import React, { ReactElement, useEffect } from "react"; import styled from "styled-components"; import { RenderPageProps, Worker, Viewer, PageChangeEvent, SpecialZoomLevel, } from "@react-pdf-viewer/core"; // Import the styles import "@react-pdf-viewer/core/lib/styles/index.css"; import { defaultLayoutPlugin, ToolbarProps, ToolbarSlot, } from "@react-pdf-viewer/default-layout"; // Import styles import "@react-pdf-viewer/default-layout/lib/styles/index.css"; import { pageNavigationPlugin } from "@react-pdf-viewer/page-navigation"; // Import styles import "@react-pdf-viewer/page-navigation/lib/styles/index.css"; import { useStoreActions, useStoreState } from "../../appstore"; import BoxAnnotationLayer from "./BoxAnnotationLayer"; import { darken } from "polished"; const renderPage = (props: RenderPageProps) => { return ( <> {props.svgLayer.children} {props.textLayer.children} {props.annotationLayer.children} ); }; const renderToolbar = (Toolbar: (props: ToolbarProps) => ReactElement) => ( {(slots: ToolbarSlot) => { const { CurrentPageInput, GoToNextPage, GoToPreviousPage, NumberOfPages, Zoom, ZoomIn, ZoomOut, } = slots; return (
 /
); }}
); const ViewerContainer = styled.div` border-radius: 8px; height: 100%; `; const PDFComponentContainer = styled.div` width: 50%; overflow: auto; margin: 1rem 0.5rem; border-radius: 8px; box-shadow: 0 2.8px 2.2px rgba(0, 0, 0, 0.134), 0 6.7px 5.3px rgba(0, 0, 0, 0.148); border: 4px solid ${(p) => darken(0.05, p.theme.gray200)}; `; const PDFViewer = () => { //Store state const pdfUrl = useStoreState((s) => s.documentModel.url); const selectedPage = useStoreState( (s) => s.internal.selectedPageNumber ); const newPageSetFromTable = useStoreState((s) => s.internal.newPageSetFromTable); const setNewPageFromTable = useStoreActions((s) => s.setNewPageFromTable); const setSelectedPage = useStoreActions((s) => s.setSelectedPageNumber); const defaultLayoutPluginInstance = defaultLayoutPlugin({ renderToolbar }); const onPageChange = (e: PageChangeEvent) => { if (e.currentPage + 1 !== selectedPage && newPageSetFromTable===undefined) { setSelectedPage({pageNumber: e.currentPage + 1}); } else if(newPageSetFromTable!==undefined) { setNewPageFromTable(undefined); } }; const pageNavigationPluginInstance = pageNavigationPlugin(); const { jumpToPage } = pageNavigationPluginInstance; useEffect(() => { if(newPageSetFromTable!==undefined) { jumpToPage(newPageSetFromTable-1); } }, [jumpToPage, newPageSetFromTable]); return ( {pdfUrl ? ( ) : null} ); }; export default PDFViewer;