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

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