@@ -93,7 +93,8 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
9393 const [ newPopupCoords , setNewPopupCoords ] = useState < { x : number ; y : number } > ( { x : - 5 , y : - 5 } ) ;
9494
9595 //what mode is the user in. 0 for dragging, 1 for custom comment, 2 for common mistake
96- const [ editMode , setEditMode ] = useState < number > ( 0 ) ;
96+ type editModeType = 'pan' | 'comment' | 'mistake' ;
97+ const [ editMode , setEditMode ] = useState < editModeType > ( 'pan' ) ;
9798
9899 //pdf loading states
99100 const [ pdfDimensions , setPdfDimensions ] = useState < { width : number ; height : number } > ( { width : 0 , height : 0 } ) ;
@@ -131,13 +132,13 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
131132 } , [ fullscreen , loadSuccess , pdfDimensions . width ] ) ;
132133
133134 const commentOnClick = useCallback ( ( ) => {
134- setEditMode ( editMode === 1 ? 0 : 1 ) ;
135+ setEditMode ( editMode === 'comment' ? 'pan' : 'comment' ) ;
135136 setCustomComment ( true ) ;
136137 setNewPopupCoords ( { x : 5 , y : 5 } ) ;
137138 } , [ editMode ] ) ;
138139
139140 const commonMistakeOnClick = useCallback ( ( ) => {
140- setEditMode ( editMode === 2 ? 0 : 2 ) ;
141+ setEditMode ( editMode === 'mistake' ? 'pan' : 'mistake' ) ;
141142 setCustomComment ( false ) ;
142143 setNewPopupCoords ( { x : 5 , y : 5 } ) ;
143144 } , [ editMode ] ) ;
@@ -146,6 +147,12 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
146147
147148 useEffect ( ( ) => {
148149 const handleKeyDown = ( e : KeyboardEvent ) : void => {
150+ const { activeElement } = document ;
151+ const isTyping = activeElement && ( activeElement . tagName === 'INPUT' || activeElement . tagName === 'TEXTAREA' ) ;
152+
153+ // If typing, don't process shortcuts
154+ if ( isTyping ) return ;
155+
149156 if ( ( e . metaKey || e . ctrlKey ) && ( e . key === '+' || e . key === '=' || e . key === '-' ) ) {
150157 e . preventDefault ( ) ;
151158
@@ -169,10 +176,10 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
169176 }
170177 } ;
171178
172- window . addEventListener ( 'keydown' , handleKeyDown ) ;
179+ document . addEventListener ( 'keydown' , handleKeyDown ) ;
173180
174181 return ( ) => {
175- window . removeEventListener ( 'keydown' , handleKeyDown ) ;
182+ document . removeEventListener ( 'keydown' , handleKeyDown ) ;
176183 } ;
177184 } , [ handleZoomIn , handleZoomOut , fullscreen , toggleFullscreen , commentOnClick , commonMistakeOnClick , reviewMode ] ) ;
178185
@@ -279,7 +286,7 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
279286 const handleMouseDown = ( e : React . MouseEvent ) => {
280287 if ( ! loadSuccess ) return ;
281288
282- if ( editMode === 1 || editMode === 2 ) {
289+ if ( editMode === 'comment' || editMode === 'mistake' ) {
283290 //panning logic
284291 const container = e . currentTarget . getBoundingClientRect ( ) ;
285292
@@ -297,10 +304,10 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
297304
298305 setNewPopupCoords ( { x : normalizedX , y : normalizedY } ) ;
299306
300- setEditMode ( 0 ) ;
307+ setEditMode ( 'pan' ) ;
301308 }
302309
303- if ( editMode === 0 ) {
310+ if ( editMode === 'pan' ) {
304311 setIsDragging ( true ) ;
305312 }
306313
@@ -408,7 +415,13 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
408415 left : fullscreen ? '2.5vw' : undefined ,
409416 bgcolor : 'grey.50' ,
410417 cursor :
411- editMode === 0 ? ( isDragging ? 'grabbing' : 'grab' ) : editMode === 1 || editMode === 2 ? 'crosshair' : 'auto' ,
418+ editMode === 'pan'
419+ ? isDragging
420+ ? 'grabbing'
421+ : 'grab'
422+ : editMode === 'comment' || editMode === 'mistake'
423+ ? 'crosshair'
424+ : 'auto' ,
412425 zIndex : 10
413426 } }
414427 onMouseDown = { handleMouseDown }
@@ -426,7 +439,7 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
426439 } }
427440 >
428441 < Tooltip
429- title = "Press 'f' to toggle full screen, cmd or ctrl +/- to zoom in/out, 'c' to enter common mistake mode, and 'm' to enter common mistake mode"
442+ title = "Press 'f' to toggle full screen, cmd or ctrl +/- to zoom in/out, 'c' to enter comment mode, and 'm' to enter common mistake mode"
430443 placement = "right"
431444 >
432445 < HelpIcon style = { { fontSize : 'large' , color : 'black' } } />
@@ -472,7 +485,7 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
472485 sx = { {
473486 width : '4rem' ,
474487 height : '4rem' ,
475- bgcolor : editMode === 1 ? 'red' : 'background.paper' ,
488+ bgcolor : editMode === 'comment' ? 'red' : 'background.paper' ,
476489 marginRight : '2rem' ,
477490 border : 2 ,
478491 borderColor : 'white' ,
@@ -491,7 +504,7 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
491504 sx = { {
492505 width : '4rem' ,
493506 height : '4rem' ,
494- bgcolor : editMode === 2 ? 'red' : 'background.paper' ,
507+ bgcolor : editMode === 'mistake' ? 'red' : 'background.paper' ,
495508 marginRight : '2rem' ,
496509 border : 2 ,
497510 borderColor : 'white' ,
@@ -513,7 +526,7 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
513526 sx = { {
514527 width : '4rem' ,
515528 height : '4rem' ,
516- bgcolor : editMode === 3 ? 'red' : 'background.paper' ,
529+ bgcolor : 'background.paper' ,
517530 marginRight : '2rem' ,
518531 border : 2 ,
519532 borderColor : 'white' ,
0 commit comments