Toolbar.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import React, { useEffect, useState } from 'react';
  2. import ToolbarComponent from '../components/Toolbar';
  3. import useActions from '../actions';
  4. import useStore from '../store';
  5. import { scrollIntoView, scaleCheck } from '../helpers/utility';
  6. import { delay } from '../helpers/time';
  7. const Toolbar: React.FC = () => {
  8. const [
  9. { totalPage, currentPage, scale, rotation, viewport, displayMode },
  10. dispatch,
  11. ] = useStore();
  12. const [hideToolbar, setHideToolbar] = useState(false);
  13. let scrollTimeout: any = null;
  14. const {
  15. setCurrentPage: setCurrentPageAction,
  16. changeScale,
  17. changeRotate,
  18. toggleDisplayMode,
  19. setSidebar,
  20. } = useActions(dispatch);
  21. const setCurrentPage = (num: number): void => {
  22. if (num > 0) {
  23. const ele: HTMLElement = document.getElementById(
  24. `page_${num}`
  25. ) as HTMLElement;
  26. scrollIntoView(ele);
  27. }
  28. setCurrentPageAction(num);
  29. setHideToolbar(false);
  30. };
  31. const handleHandClick = (): void => {
  32. setSidebar('');
  33. };
  34. const timer = () => {
  35. if (scrollTimeout > 0) {
  36. clearTimeout(scrollTimeout);
  37. setHideToolbar(false);
  38. }
  39. scrollTimeout = setTimeout(() => {
  40. setHideToolbar(true);
  41. }, 3000);
  42. };
  43. const handleScroll = () => {
  44. setHideToolbar(false);
  45. };
  46. const handleClockwiseRotation = (): void => {
  47. const r = rotation + 90;
  48. changeRotate(r);
  49. setHideToolbar(false);
  50. };
  51. const handleCounterclockwiseRotation = (): void => {
  52. const r = rotation - 90;
  53. changeRotate(r);
  54. setHideToolbar(false);
  55. };
  56. const handleZoomIn = (): void => {
  57. changeScale(scaleCheck(scale * 100 + 10));
  58. setHideToolbar(false);
  59. };
  60. const handleZoomOut = (): void => {
  61. changeScale(scaleCheck(scale * 100 - 10));
  62. setHideToolbar(false);
  63. };
  64. useEffect(() => {
  65. const viewer = document.getElementById('pdf_viewer');
  66. if (viewer) {
  67. viewer.addEventListener('scroll', handleScroll);
  68. }
  69. return () => {
  70. if (viewer) {
  71. viewer.removeEventListener('scroll', handleScroll);
  72. }
  73. };
  74. }, [viewport]);
  75. useEffect(() => {
  76. if (!hideToolbar) {
  77. timer();
  78. }
  79. }, [hideToolbar]);
  80. useEffect(() => {
  81. delay(3000).then(() => {
  82. setHideToolbar(true);
  83. });
  84. }, []);
  85. return (
  86. <ToolbarComponent
  87. totalPage={totalPage}
  88. currentPage={currentPage}
  89. setCurrentPage={setCurrentPage}
  90. changeScale={changeScale}
  91. handleClockwiseRotation={handleClockwiseRotation}
  92. handleCounterclockwiseRotation={handleCounterclockwiseRotation}
  93. handleZoomIn={handleZoomIn}
  94. handleZoomOut={handleZoomOut}
  95. handleHandClick={handleHandClick}
  96. scale={scale}
  97. viewport={viewport}
  98. displayMode={displayMode}
  99. toggleDisplayMode={toggleDisplayMode}
  100. hidden={hideToolbar}
  101. />
  102. );
  103. };
  104. export default Toolbar;