11import React , { useCallback , useRef } from "react" ;
2+ import ArrowLeftICon from "@material-ui/icons/KeyboardBackspace" ;
3+ import ArrowRightICon from "@material-ui/icons/ArrowRightAlt" ;
24import pdfService from "../../services/pdfService" ;
35import { useDropzone } from "react-dropzone" ;
46import Share from "./Share" ;
57import constants from "../../../constants" ;
68import chromeService from "../../services/chromeService" ;
79import messagePassing from "../../services/messagePassing" ;
810import { getExtensionStoreLink , isGoogleChrome } from "../../services/helper" ;
11+ import pdf from "../../services/pdfService" ;
912const extUrl = getExtensionStoreLink ( ) ;
1013let canvas = null ;
1114export default function PdfCard ( ) {
@@ -33,25 +36,23 @@ export default function PdfCard() {
3336 const donateLabel = chromeService . getI18nMessage ( "donateLabel" ) ; // Donate
3437 const renderPdf = ( pdf , num ) => {
3538 pdf . getPage ( num ) . then ( ( page ) => {
36- const scale = 0.8 ;
39+ const scale = 1 ;
3740 const viewport = page . getViewport ( { scale : scale } ) ;
3841 canvas = canvasRef . current ;
3942 canvas . height = viewport . height ;
4043 canvas . width = viewport . width ;
4144 const ctx = canvas . getContext ( "2d" ) ;
4245 // Render PDF page into canvas context
43- var renderContext = {
46+ const renderContext = {
4447 canvasContext : ctx ,
4548 viewport : viewport ,
4649 } ;
47- var renderTask = page . render ( renderContext ) ;
50+ const renderTask = page . render ( renderContext ) ;
4851 let pageRendering , pageNumPending ;
4952 // Wait for rendering to finish
5053 renderTask . promise . then ( function ( ) {
5154 pageRendering = false ;
5255 if ( pageNumPending !== null ) {
53- // New page rendering is pending
54- renderPage ( pageNumPending ) ;
5556 pageNumPending = null ;
5657 }
5758 } ) ;
@@ -92,6 +93,13 @@ export default function PdfCard() {
9293 setPdfSettings ( { ...pdfSettings , currentPage } ) ;
9394 renderPdf ( pdfSettings . pdf , currentPage ) ;
9495 } ;
96+ const handlePdfPageChange = ( event ) => {
97+ const pageNum = parseInt ( event . target . value ) ;
98+ if ( pageNum > - 1 && pageNum <= pdfSettings . pageCount ) {
99+ setPdfSettings ( { ...pdfSettings , currentPage : pageNum } ) ;
100+ renderPdf ( pdfSettings . pdf , pageNum ) ;
101+ }
102+ } ;
95103 const onDrop = useCallback ( ( acceptedFiles ) => {
96104 acceptedFiles . forEach ( ( file ) => {
97105 const reader = new FileReader ( ) ;
@@ -107,7 +115,6 @@ export default function PdfCard() {
107115 pageCount : pdf . numPages ,
108116 } ) ;
109117 renderPdf ( pdf , 1 ) ;
110- console . log ( pdf . numPages ) ;
111118 } ) ;
112119 } ;
113120 reader . readAsArrayBuffer ( file ) ;
@@ -210,18 +217,29 @@ export default function PdfCard() {
210217 onClick = { onPrevPage }
211218 className = "inline-flex items-center px-4 py-2 border border-transparent text-sm leading-5 font-medium rounded-md text-white focus:outline-none transition duration-150 ease-in-out btn-lite"
212219 >
213- { "<-" }
220+ < ArrowLeftICon />
214221 </ button >
215222 < button
216223 onClick = { onNextPage }
217224 style = { { marginLeft : "1rem" } }
218225 className = "inline-flex items-center px-4 py-2 border border-transparent text-sm leading-5 font-medium rounded-md text-white focus:outline-none transition duration-150 ease-in-out btn-lite"
219226 >
220- { "->" }
227+ < ArrowRightICon />
221228 </ button >
222229 < span style = { { marginLeft : "1rem" } } >
223- Page: { pdfSettings . currentPage } /
224- { pdfSettings . pageCount }
230+ Page:{ " " }
231+ < input
232+ type = "number"
233+ onChange = { handlePdfPageChange }
234+ style = { {
235+ width : "4rem" ,
236+ textAlign : "end" ,
237+ border : "1px solid var(--main-color)" ,
238+ borderRadius : "1rem" ,
239+ } }
240+ value = { pdfSettings . currentPage }
241+ />
242+ /{ pdfSettings . pageCount }
225243 </ span >
226244 < button
227245 onClick = { extractText }
0 commit comments