dropdown-toggle-with-tooltip.tsx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { forwardRef } from 'react'
  2. import Tooltip from '../tooltip'
  3. import classnames from 'classnames'
  4. import { DropdownProps } from 'react-bootstrap'
  5. import { MergeAndOverride } from '../../../../../types/utils'
  6. type CustomToggleProps = MergeAndOverride<
  7. Pick<DropdownProps, 'bsClass' | 'open'>,
  8. {
  9. children: React.ReactNode
  10. bsRole: 'toggle'
  11. className?: string
  12. tooltipProps: Omit<React.ComponentProps<typeof Tooltip>, 'children'>
  13. }
  14. >
  15. const DropdownToggleWithTooltip = forwardRef<
  16. HTMLButtonElement,
  17. CustomToggleProps
  18. >(function (props, ref) {
  19. const {
  20. tooltipProps,
  21. children,
  22. bsClass,
  23. className,
  24. open,
  25. bsRole: _bsRole,
  26. ...rest
  27. } = props
  28. return (
  29. <Tooltip {...tooltipProps}>
  30. <button
  31. type="button"
  32. ref={ref}
  33. className={classnames(bsClass, 'btn', className)}
  34. aria-expanded={open}
  35. aria-haspopup="true"
  36. {...rest}
  37. >
  38. {children}
  39. </button>
  40. </Tooltip>
  41. )
  42. })
  43. DropdownToggleWithTooltip.displayName = 'DropdownToggleWithTooltip'
  44. export default DropdownToggleWithTooltip