@@ -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