mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-09-18 01:19:24 +00:00
Fix scroll page identification
This commit is contained in:
parent
dac176f0c6
commit
da6ecc6619
@ -33,17 +33,20 @@ export function PdfViewerToolbar({
|
|||||||
currentZoom: _currentZoom = 100,
|
currentZoom: _currentZoom = 100,
|
||||||
}: PdfViewerToolbarProps) {
|
}: PdfViewerToolbarProps) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { getScrollState, getZoomState, scrollActions, zoomActions, registerImmediateZoomUpdate } = useViewer();
|
const { getScrollState, getZoomState, scrollActions, zoomActions, registerImmediateZoomUpdate, registerImmediateScrollUpdate } = useViewer();
|
||||||
|
|
||||||
const scrollState = getScrollState();
|
const scrollState = getScrollState();
|
||||||
const zoomState = getZoomState();
|
const zoomState = getZoomState();
|
||||||
const [pageInput, setPageInput] = useState(scrollState.currentPage || currentPage);
|
const [pageInput, setPageInput] = useState(scrollState.currentPage || currentPage);
|
||||||
const [displayZoomPercent, setDisplayZoomPercent] = useState(zoomState.zoomPercent || 140);
|
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(() => {
|
useEffect(() => {
|
||||||
|
registerImmediateScrollUpdate((currentPage, totalPages) => {
|
||||||
|
setPageInput(currentPage);
|
||||||
|
});
|
||||||
setPageInput(scrollState.currentPage);
|
setPageInput(scrollState.currentPage);
|
||||||
}, [scrollState.currentPage]);
|
}, [registerImmediateScrollUpdate]);
|
||||||
|
|
||||||
// Register for immediate zoom updates and sync with actual zoom state
|
// Register for immediate zoom updates and sync with actual zoom state
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -8,7 +8,7 @@ import { useViewer } from '../../contexts/ViewerContext';
|
|||||||
*/
|
*/
|
||||||
export function ScrollAPIBridge() {
|
export function ScrollAPIBridge() {
|
||||||
const { provides: scroll, state: scrollState } = useScroll();
|
const { provides: scroll, state: scrollState } = useScroll();
|
||||||
const { registerBridge } = useViewer();
|
const { registerBridge, triggerImmediateScrollUpdate } = useViewer();
|
||||||
|
|
||||||
const [_localState, setLocalState] = useState({
|
const [_localState, setLocalState] = useState({
|
||||||
currentPage: 1,
|
currentPage: 1,
|
||||||
@ -25,6 +25,8 @@ export function ScrollAPIBridge() {
|
|||||||
setLocalState(prevState => {
|
setLocalState(prevState => {
|
||||||
// Only update if state actually changed
|
// Only update if state actually changed
|
||||||
if (prevState.currentPage !== newState.currentPage || prevState.totalPages !== newState.totalPages) {
|
if (prevState.currentPage !== newState.currentPage || prevState.totalPages !== newState.totalPages) {
|
||||||
|
// Trigger immediate update for responsive UI
|
||||||
|
triggerImmediateScrollUpdate(newState.currentPage, newState.totalPages);
|
||||||
return newState;
|
return newState;
|
||||||
}
|
}
|
||||||
return prevState;
|
return prevState;
|
||||||
|
@ -61,6 +61,10 @@ interface ViewerContextType {
|
|||||||
|
|
||||||
// Immediate update callbacks
|
// Immediate update callbacks
|
||||||
registerImmediateZoomUpdate: (callback: (percent: number) => void) => void;
|
registerImmediateZoomUpdate: (callback: (percent: number) => void) => void;
|
||||||
|
registerImmediateScrollUpdate: (callback: (currentPage: number, totalPages: number) => void) => void;
|
||||||
|
|
||||||
|
// Internal - for bridges to trigger immediate updates
|
||||||
|
triggerImmediateScrollUpdate: (currentPage: number, totalPages: number) => void;
|
||||||
|
|
||||||
// Action handlers - call EmbedPDF APIs directly
|
// Action handlers - call EmbedPDF APIs directly
|
||||||
scrollActions: {
|
scrollActions: {
|
||||||
@ -139,6 +143,9 @@ export const ViewerProvider: React.FC<ViewerProviderProps> = ({ children }) => {
|
|||||||
// Immediate zoom callback for responsive display updates
|
// Immediate zoom callback for responsive display updates
|
||||||
const immediateZoomUpdateCallback = useRef<((percent: number) => void) | null>(null);
|
const immediateZoomUpdateCallback = useRef<((percent: number) => void) | null>(null);
|
||||||
|
|
||||||
|
// Immediate scroll callback for responsive display updates
|
||||||
|
const immediateScrollUpdateCallback = useRef<((currentPage: number, totalPages: number) => void) | null>(null);
|
||||||
|
|
||||||
const registerBridge = (type: string, ref: BridgeRef) => {
|
const registerBridge = (type: string, ref: BridgeRef) => {
|
||||||
bridgeRefs.current[type as keyof typeof bridgeRefs.current] = ref;
|
bridgeRefs.current[type as keyof typeof bridgeRefs.current] = ref;
|
||||||
};
|
};
|
||||||
@ -383,6 +390,16 @@ export const ViewerProvider: React.FC<ViewerProviderProps> = ({ children }) => {
|
|||||||
immediateZoomUpdateCallback.current = callback;
|
immediateZoomUpdateCallback.current = callback;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const registerImmediateScrollUpdate = (callback: (currentPage: number, totalPages: number) => void) => {
|
||||||
|
immediateScrollUpdateCallback.current = callback;
|
||||||
|
};
|
||||||
|
|
||||||
|
const triggerImmediateScrollUpdate = (currentPage: number, totalPages: number) => {
|
||||||
|
if (immediateScrollUpdateCallback.current) {
|
||||||
|
immediateScrollUpdateCallback.current(currentPage, totalPages);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const value: ViewerContextType = {
|
const value: ViewerContextType = {
|
||||||
// UI state
|
// UI state
|
||||||
isThumbnailSidebarVisible,
|
isThumbnailSidebarVisible,
|
||||||
@ -401,6 +418,8 @@ export const ViewerProvider: React.FC<ViewerProviderProps> = ({ children }) => {
|
|||||||
|
|
||||||
// Immediate updates
|
// Immediate updates
|
||||||
registerImmediateZoomUpdate,
|
registerImmediateZoomUpdate,
|
||||||
|
registerImmediateScrollUpdate,
|
||||||
|
triggerImmediateScrollUpdate,
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
scrollActions,
|
scrollActions,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user