diff --git a/apps/console/src/components/documents/PDFPreview.tsx b/apps/console/src/components/documents/PDFPreview.tsx
index bc3224551..6cdfcdd3c 100644
--- a/apps/console/src/components/documents/PDFPreview.tsx
+++ b/apps/console/src/components/documents/PDFPreview.tsx
@@ -21,7 +21,7 @@ import {
Spinner,
} from "@probo/ui";
import { IconMinusLarge } from "@probo/ui/src/Atoms/Icons/IconMinusLarge";
-import { type ComponentProps, useRef, useState } from "react";
+import { type ComponentProps, useCallback, useEffect, useRef, useState } from "react";
import { Document, Page, pdfjs } from "react-pdf";
import "react-pdf/dist/Page/TextLayer.css";
@@ -51,11 +51,17 @@ export function PDFPreview({ src, name }: { src: string; name?: string }) {
setScale(scale * factor);
};
- const movePage = (direction: 1 | -1) => () => {
- if (currentPage === 1 && direction === -1) {
+ const currentPageRef = useRef(currentPage);
+ useEffect(() => {
+ currentPageRef.current = currentPage;
+ }, [currentPage]);
+
+ const movePage = useCallback((direction: 1 | -1) => {
+ const prev = currentPageRef.current;
+ if (prev === 1 && direction === -1) {
return;
}
- const newPage = currentPage + direction;
+ const newPage = prev + direction;
const page = documentRef.current?.pages.current[newPage - 1];
if (!page) {
return;
@@ -66,9 +72,9 @@ export function PDFPreview({ src, name }: { src: string; name?: string }) {
inline: "center",
});
setCurrentPage(newPage);
- };
+ }, []);
- const resolveCurrentPage = () => {
+ const resolveCurrentPage = useCallback(() => {
if (!wrapperRef.current) {
return;
}
@@ -81,10 +87,11 @@ export function PDFPreview({ src, name }: { src: string; name?: string }) {
for (let i = 0; i < pages.length; i++) {
const childRect = pages[i].getBoundingClientRect();
if (childRect.top <= parentMiddleY && childRect.bottom >= parentMiddleY) {
- return setCurrentPage(i + 1);
+ setCurrentPage(i + 1);
+ return;
}
}
- };
+ }, []);
const handleDownload = () => {
const link = document.createElement("a");
@@ -100,7 +107,7 @@ export function PDFPreview({ src, name }: { src: string; name?: string }) {
{name}
-