Skip to content

Commit 61f72ed

Browse files
committed
prevent shortcuts on text fields, union string type, wording fix
1 parent 6f94151 commit 61f72ed

1 file changed

Lines changed: 26 additions & 13 deletions

File tree

src/frontend/src/pages/PartPage/PartPageComponents/PdfDisplay.tsx

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)