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

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