pdf-viewer-controls-menu-button.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { useRef } from 'react'
  2. import PdfPageNumberControl from './pdf-page-number-control'
  3. import PdfZoomButtons from './pdf-zoom-buttons'
  4. import { useTranslation } from 'react-i18next'
  5. import MaterialIcon from '@/shared/components/material-icon'
  6. import useDropdown from '@/shared/hooks/use-dropdown'
  7. import OLTooltip from '@/features/ui/components/ol/ol-tooltip'
  8. import OLButton from '@/features/ui/components/ol/ol-button'
  9. import OLOverlay from '@/features/ui/components/ol/ol-overlay'
  10. import OLPopover from '@/features/ui/components/ol/ol-popover'
  11. type PdfViewerControlsMenuButtonProps = {
  12. setZoom: (zoom: string) => void
  13. setPage: (page: number) => void
  14. page: number
  15. totalPages: number
  16. }
  17. export default function PdfViewerControlsMenuButton({
  18. setZoom,
  19. setPage,
  20. page,
  21. totalPages,
  22. }: PdfViewerControlsMenuButtonProps) {
  23. const { t } = useTranslation()
  24. const {
  25. open: popoverOpen,
  26. onToggle: togglePopover,
  27. ref: popoverRef,
  28. } = useDropdown()
  29. const targetRef = useRef<HTMLButtonElement | null>(null)
  30. return (
  31. <>
  32. <OLTooltip
  33. id="pdf-controls-menu-tooltip"
  34. description={t('view_options')}
  35. overlayProps={{ placement: 'bottom' }}
  36. >
  37. <span>
  38. <OLButton
  39. variant="ghost"
  40. className="pdf-toolbar-btn pdfjs-toolbar-popover-button"
  41. onClick={togglePopover}
  42. ref={targetRef}
  43. >
  44. <MaterialIcon type="more_horiz" />
  45. </OLButton>
  46. </span>
  47. </OLTooltip>
  48. <OLOverlay
  49. show={popoverOpen}
  50. target={targetRef.current}
  51. placement="bottom"
  52. containerPadding={0}
  53. transition
  54. rootClose
  55. onHide={() => togglePopover(false)}
  56. >
  57. <OLPopover
  58. className="pdfjs-toolbar-popover"
  59. id="pdf-toolbar-popover-menu"
  60. ref={popoverRef}
  61. >
  62. <PdfPageNumberControl
  63. setPage={setPage}
  64. page={page}
  65. totalPages={totalPages}
  66. />
  67. <div className="pdfjs-zoom-controls">
  68. <PdfZoomButtons setZoom={setZoom} />
  69. </div>
  70. </OLPopover>
  71. </OLOverlay>
  72. </>
  73. )
  74. }