Skip to content

Commit 1948b29

Browse files
authored
Merge pull request #502 from Rithish-2914/fix/pdf-viewer-page-count
fix: correct PDF viewer page count and input handling
2 parents e4cf76e + 3d6b3bd commit 1948b29

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

src/components/newPdfViewer.tsx

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,21 +61,24 @@ const Controls = memo(function Controls({documentId, toggleFullscreen, isFullscr
6161

6262
const { provides: zoomProv, state: zoomState } = useZoom(documentId);
6363
const { provides: scrollProv, state: scrollState } = useScroll(documentId);
64-
const [pageNo, setPageNo] = useState("1");
64+
const [pageNo, setPageNo] = useState("");
6565

6666
useEffect(() => {
6767
if (!scrollProv) return;
68-
const unsub = scrollProv.onPageChange(() =>
69-
setPageNo(String(scrollProv.getCurrentPage()))
70-
);
68+
const unsub = scrollProv.onPageChange(() => {
69+
const current = scrollProv.getCurrentPage();
70+
setPageNo(String(current));
71+
});
72+
const current = scrollProv.getCurrentPage();
73+
setPageNo(String(current));
7174
return () => unsub();
7275
}, [scrollProv]);
7376

7477
const pageChange = useCallback(
7578
(e: React.KeyboardEvent<HTMLInputElement>) => {
7679
if (e.key !== "Enter") return;
7780
const page = parseInt(pageNo, 10);
78-
if (!isNaN(page) && page >= 1 && page <= (scrollState?.totalPages ?? 1)) {
81+
if (!isNaN(page) && scrollState?.totalPages && page >= 1 && page <= scrollState.totalPages) {
7982
scrollProv?.scrollToPage({ pageNumber: page, behavior: "smooth" });
8083
}
8184
},
@@ -99,13 +102,20 @@ const Controls = memo(function Controls({documentId, toggleFullscreen, isFullscr
99102
<div className={(!isFullscreen && !isMobile) ? "flex flex-col items-center gap-2" : "flex flex-row items-center gap-2"}>
100103
<input
101104
type="text"
102-
value={pageNo}
105+
value={totalPages ? pageNo : ""}
103106
onChange={(e) => setPageNo(e.target.value)}
104107
onKeyDown={pageChange}
105-
onFocus={() => setPageNo("")}
108+
onFocus={() => {
109+
if (totalPages) setPageNo("");
110+
}}
111+
onBlur={() => {
112+
if (!pageNo && scrollProv) {
113+
setPageNo(String(scrollProv.getCurrentPage()));
114+
}
115+
}}
106116
className="h-9 w-14 rounded border bg-[#e7e9ff] p-1 text-center text-sm [appearance:textfield] dark:bg-[#1f1f2a] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
107117
/>
108-
<span className="text-xs font-medium text-white">of {totalPages ?? 1}</span>
118+
<span className="text-xs font-medium text-white">of {totalPages ?? "..."}</span>
109119
</div>
110120
)
111121

0 commit comments

Comments
 (0)