Skip to content

Commit 24680df

Browse files
committed
fixed issue 296
1 parent e1c6894 commit 24680df

1 file changed

Lines changed: 30 additions & 15 deletions

File tree

src/components/pdfViewer.tsx

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
2424
const [pageNumber, setPageNumber] = useState<number>(1);
2525
const [scale, setScale] = useState<number>(1);
2626
const [isFullscreen, setIsFullscreen] = useState<boolean>(false);
27+
const [inputValue, setInputValue] = useState(pageNumber.toString());
2728
const pageRefs = useRef<(HTMLDivElement | null)[]>([]);
2829
const containerRef = useRef<HTMLDivElement>(null);
2930

@@ -87,11 +88,21 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
8788
});
8889
};
8990

90-
const handlePageChange = (e: React.ChangeEvent<HTMLInputElement>) => {
91-
const value = parseInt(e.target.value, 10);
92-
if (!isNaN(value) && value >= 1 && value <= (numPages ?? 1)) {
93-
setPageNumber(value);
94-
scrollToPage(value);
91+
const handlePageChange = (e: React.KeyboardEvent<HTMLInputElement>) => {
92+
if (e.key === "Enter") {
93+
const target = e.target as HTMLInputElement;
94+
if (/^\d+$/.test(inputValue)) {
95+
const value = parseInt(inputValue, 10);
96+
if (value >= 1 && value <= (numPages ?? 1)) {
97+
setPageNumber(value);
98+
scrollToPage(value);
99+
} else {
100+
setInputValue(pageNumber.toString());
101+
}
102+
} else {
103+
setInputValue(pageNumber.toString());
104+
}
105+
target.blur();
95106
}
96107
};
97108

@@ -132,6 +143,10 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
132143
}
133144
};
134145

146+
useEffect(() => {
147+
setInputValue(pageNumber.toString());
148+
}, [pageNumber]);
149+
135150
useEffect(() => {
136151
const handleFullscreenChange = () => {
137152
setIsFullscreen(!!document.fullscreenElement);
@@ -238,11 +253,11 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
238253
<FaLessThan />
239254
</Button>
240255
<input
241-
type="number"
242-
value={pageNumber}
243-
onChange={handlePageChange}
244-
min={1}
245-
max={numPages}
256+
type="text"
257+
value={inputValue}
258+
onChange={(e) => setInputValue(e.target.value)}
259+
onKeyDown={(e) => handlePageChange(e)}
260+
onFocus={() => setInputValue("")}
246261
className="h-10 w-16 rounded border p-1 text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
247262
/>
248263
<span>of {numPages ?? 1}</span>
@@ -300,11 +315,11 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
300315
<FaLessThan />
301316
</Button>
302317
<input
303-
type="number"
304-
value={pageNumber}
305-
onChange={handlePageChange}
306-
min={1}
307-
max={numPages}
318+
type="text"
319+
value={inputValue}
320+
onChange={(e) => setInputValue(e.target.value)}
321+
onKeyDown={(e) => handlePageChange(e)}
322+
onFocus={() => setInputValue("")}
308323
className="h-10 w-16 rounded border p-1 text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
309324
/>
310325
<span>of {numPages ?? 1}</span>

0 commit comments

Comments
 (0)