review-panel-resolved-threads-button.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import React, { FC, useRef, useState } from 'react'
  2. import OLOverlay from '@/shared/components/ol/ol-overlay'
  3. import OLPopover from '@/shared/components/ol/ol-popover'
  4. import OLTooltip from '@/shared/components/ol/ol-tooltip'
  5. import { ReviewPanelResolvedThreadsMenu } from './review-panel-resolved-threads-menu'
  6. import { useTranslation } from 'react-i18next'
  7. import MaterialIcon from '@/shared/components/material-icon'
  8. export const ReviewPanelResolvedThreadsButton: FC = () => {
  9. const [expanded, setExpanded] = useState(false)
  10. const buttonRef = useRef<HTMLButtonElement>(null)
  11. const { t } = useTranslation()
  12. return (
  13. <>
  14. <OLTooltip
  15. id="resolved-comments"
  16. overlayProps={{ placement: 'bottom' }}
  17. description={t('resolved_comments')}
  18. >
  19. <button
  20. className="review-panel-resolved-comments-toggle"
  21. ref={buttonRef}
  22. onClick={() => setExpanded(true)}
  23. aria-label={t('resolved_comments')}
  24. >
  25. <MaterialIcon type="inbox" />
  26. </button>
  27. </OLTooltip>
  28. {expanded && (
  29. <OLOverlay
  30. show
  31. onHide={() => setExpanded(false)}
  32. transition={false}
  33. container={this}
  34. containerPadding={0}
  35. placement="bottom"
  36. rootClose
  37. target={buttonRef.current}
  38. >
  39. <OLPopover
  40. id="popover-resolved-threads"
  41. className="review-panel-resolved-comments"
  42. >
  43. <ReviewPanelResolvedThreadsMenu />
  44. </OLPopover>
  45. </OLOverlay>
  46. )}
  47. </>
  48. )
  49. }