dropdown-toggle-with-tooltip.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. isOpened: boolean
  11. bsRole: 'toggle'
  12. className?: string
  13. tooltipProps: Omit<React.ComponentProps<typeof Tooltip>, 'children'>
  14. }
  15. >
  16. const DropdownToggleWithTooltip = forwardRef<
  17. HTMLButtonElement,
  18. CustomToggleProps
  19. >(function (props, ref) {
  20. const {
  21. tooltipProps,
  22. isOpened,
  23. children,
  24. bsClass,
  25. className,
  26. open,
  27. bsRole: _bsRole,
  28. ...rest
  29. } = props
  30. const button = (
  31. <button
  32. type="button"
  33. ref={ref}
  34. className={classnames(bsClass, 'btn', className)}
  35. aria-expanded={open}
  36. aria-haspopup="true"
  37. {...rest}
  38. >
  39. {children}
  40. </button>
  41. )
  42. return (
  43. <>{isOpened ? button : <Tooltip {...tooltipProps}>{button}</Tooltip>}</>
  44. )
  45. })
  46. DropdownToggleWithTooltip.displayName = 'DropdownToggleWithTooltip'
  47. export default DropdownToggleWithTooltip