Fix scroll page identification

This commit is contained in:
Reece Browne
2025-09-17 14:35:44 +01:00
parent dac176f0c6
commit da6ecc6619
3 changed files with 28 additions and 4 deletions

View File

@@ -33,17 +33,20 @@ export function PdfViewerToolbar({
currentZoom: _currentZoom = 100,
}: PdfViewerToolbarProps) {
const { t } = useTranslation();
const { getScrollState, getZoomState, scrollActions, zoomActions, registerImmediateZoomUpdate } = useViewer();
const { getScrollState, getZoomState, scrollActions, zoomActions, registerImmediateZoomUpdate, registerImmediateScrollUpdate } = useViewer();
const scrollState = getScrollState();
const zoomState = getZoomState();
const [pageInput, setPageInput] = useState(scrollState.currentPage || currentPage);
const [displayZoomPercent, setDisplayZoomPercent] = useState(zoomState.zoomPercent || 140);
// Update page input when scroll state changes
// Register for immediate scroll updates and sync with actual scroll state
useEffect(() => {
registerImmediateScrollUpdate((currentPage, totalPages) => {
setPageInput(currentPage);
});
setPageInput(scrollState.currentPage);
}, [scrollState.currentPage]);
}, [registerImmediateScrollUpdate]);
// Register for immediate zoom updates and sync with actual zoom state
useEffect(() => {

View File

@@ -8,7 +8,7 @@ import { useViewer } from '../../contexts/ViewerContext';
*/
export function ScrollAPIBridge() {
const { provides: scroll, state: scrollState } = useScroll();
const { registerBridge } = useViewer();
const { registerBridge, triggerImmediateScrollUpdate } = useViewer();
const [_localState, setLocalState] = useState({
currentPage: 1,
@@ -25,6 +25,8 @@ export function ScrollAPIBridge() {
setLocalState(prevState => {
// Only update if state actually changed
if (prevState.currentPage !== newState.currentPage || prevState.totalPages !== newState.totalPages) {
// Trigger immediate update for responsive UI
triggerImmediateScrollUpdate(newState.currentPage, newState.totalPages);
return newState;
}
return prevState;