Skip to content

Commit 73f9da4

Browse files
committed
wip
1 parent 208d066 commit 73f9da4

1 file changed

Lines changed: 60 additions & 45 deletions

File tree

src/Reader.tsx

Lines changed: 60 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ const Reader = ({
7777
const [defaultScale, setDefaultScale] = useState<number | null>(null);
7878
const [rotation, setRotation] = useState<number>(initialRotation);
7979
const [defaultRotations, setDefaultRotations] = useState<number[] | null>();
80+
const [renderScale, setRenderScale] = useState<number | undefined>(
81+
initialScale,
82+
);
8083

8184
const [scrollAnchor, setScrollAnchor] = useState<{
8285
index: number;
@@ -287,6 +290,7 @@ const Reader = ({
287290
);
288291
setDefaultRotations(rotations);
289292
setPageViewports(viewports);
293+
setRenderScale(scale);
290294
setViewportsReady(true);
291295
};
292296

@@ -327,50 +331,6 @@ const Reader = ({
327331
virtualizer.measure();
328332
onViewportsMeasured && onViewportsMeasured();
329333

330-
if (scrollAnchor) {
331-
// manually calculate offset here in case it was cached from an earlier render
332-
const startOffset = getOffsetForIndexEager(
333-
scrollAnchor.index,
334-
virtualizer,
335-
estimateSize,
336-
);
337-
338-
if (startOffset != null) {
339-
const itemHeight = estimateSize(scrollAnchor.index);
340-
const offset = getOffsetForIndexAndPercentage({
341-
itemHeight: itemHeight,
342-
percentage: scrollAnchor.percentageOffsetY,
343-
startOffset: startOffset,
344-
});
345-
346-
virtualizer.scrollToOffset(offset, {
347-
align: "center",
348-
behavior: "auto",
349-
});
350-
351-
if (parentRef.current) {
352-
const pageViewport = viewports[scrollAnchor.index];
353-
if (pageViewport) {
354-
const pageInnerBoxWidth = pageViewport.width + EXTRA_WIDTH;
355-
const containerWidth = parentRef.current.clientWidth;
356-
357-
const offsetX =
358-
pageInnerBoxWidth * (scrollAnchor.percentageOffsetX / 100);
359-
360-
const pageLeftOffsetInContainer =
361-
(containerWidth - pageInnerBoxWidth) / 2;
362-
363-
const targetAbsoluteX = pageLeftOffsetInContainer + offsetX;
364-
365-
const newScrollLeft = targetAbsoluteX - containerWidth / 2;
366-
367-
parentRef.current.scrollLeft = newScrollLeft;
368-
}
369-
}
370-
}
371-
setScrollAnchor(null);
372-
}
373-
374334
const jumpToPage = (
375335
pageIndex: number,
376336
options?: {
@@ -436,6 +396,61 @@ const Reader = ({
436396
// eslint-disable-next-line react-hooks/exhaustive-deps
437397
}, [viewports, scale, viewportsReady]);
438398

399+
useEffect(() => {
400+
if (!viewports || !viewportsReady) return;
401+
if (scale === undefined) return;
402+
if (!scrollAnchor) return;
403+
404+
const startOffset = getOffsetForIndexEager(
405+
scrollAnchor.index,
406+
virtualizer,
407+
estimateSize,
408+
);
409+
410+
if (startOffset != null) {
411+
const itemHeight = estimateSize(scrollAnchor.index);
412+
const offset = getOffsetForIndexAndPercentage({
413+
itemHeight: itemHeight,
414+
percentage: scrollAnchor.percentageOffsetY,
415+
startOffset: startOffset,
416+
});
417+
418+
virtualizer.scrollToOffset(offset, {
419+
align: "center",
420+
behavior: "auto",
421+
});
422+
423+
if (parentRef.current) {
424+
const pageViewport = viewports[scrollAnchor.index];
425+
if (pageViewport) {
426+
const pageInnerBoxWidth = pageViewport.width + EXTRA_WIDTH;
427+
const containerWidth = parentRef.current.clientWidth;
428+
429+
const offsetX =
430+
pageInnerBoxWidth * (scrollAnchor.percentageOffsetX / 100);
431+
432+
const pageLeftOffsetInContainer =
433+
(containerWidth - pageInnerBoxWidth) / 2;
434+
435+
const targetAbsoluteX = pageLeftOffsetInContainer + offsetX;
436+
437+
const newScrollLeft = targetAbsoluteX - containerWidth / 2;
438+
439+
parentRef.current.scrollLeft = newScrollLeft;
440+
}
441+
}
442+
}
443+
444+
setScrollAnchor(null);
445+
}, [
446+
estimateSize,
447+
scrollAnchor,
448+
virtualizer,
449+
viewports,
450+
viewportsReady,
451+
scale,
452+
]);
453+
439454
const { normalizedVelocity } = useVirtualizerVelocity({
440455
virtualizer,
441456
estimateSize,
@@ -475,7 +490,7 @@ const Reader = ({
475490
.getVirtualItems()
476491
.map((virtualItem) => (
477492
<Page
478-
scale={scale}
493+
scale={renderScale}
479494
key={virtualItem.key}
480495
virtualItem={virtualItem}
481496
viewports={viewports}

0 commit comments

Comments
 (0)