about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2023-11-10 21:23:17 +0000
committerGitHub <noreply@github.com>2023-11-10 21:23:17 +0000
commit86b4842d67c563caf68388e2453f716d1c553862 (patch)
tree9ba736984ac9116f4039fddae6ae487bbf728de5 /src
parent91f8a23fbca5585490bb0f2064cdec8dd4b47cc9 (diff)
downloadvoidsky-86b4842d67c563caf68388e2453f716d1c553862.tar.zst
Fix initial pager gap after fast scroll (#1868)
Diffstat (limited to 'src')
-rw-r--r--src/view/com/pager/PagerWithHeader.tsx16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/view/com/pager/PagerWithHeader.tsx b/src/view/com/pager/PagerWithHeader.tsx
index e93d91fed..95798d26b 100644
--- a/src/view/com/pager/PagerWithHeader.tsx
+++ b/src/view/com/pager/PagerWithHeader.tsx
@@ -138,17 +138,20 @@ export const PagerWithHeader = React.forwardRef<PagerRef, PagerWithHeaderProps>(
       })
     }
 
+    const lastForcedScrollY = useSharedValue(0)
     const onScrollWorklet = React.useCallback(
       (e: NativeScrollEvent) => {
         'worklet'
         const nextScrollY = e.contentOffset.y
         scrollY.value = nextScrollY
 
-        if (nextScrollY < headerOnlyHeight) {
+        const forcedScrollY = Math.min(nextScrollY, headerOnlyHeight)
+        if (lastForcedScrollY.value !== forcedScrollY) {
+          lastForcedScrollY.value = forcedScrollY
           const refs = scrollRefs.value
           for (let i = 0; i < refs.length; i++) {
             if (i !== currentPage) {
-              scrollTo(refs[i], 0, nextScrollY, false)
+              scrollTo(refs[i], 0, forcedScrollY, false)
             }
           }
         }
@@ -158,7 +161,14 @@ export const PagerWithHeader = React.forwardRef<PagerRef, PagerWithHeaderProps>(
           runOnJS(setIsScrolledDown)(nextIsScrolledDown)
         }
       },
-      [currentPage, headerOnlyHeight, isScrolledDown, scrollRefs, scrollY],
+      [
+        currentPage,
+        headerOnlyHeight,
+        isScrolledDown,
+        scrollRefs,
+        scrollY,
+        lastForcedScrollY,
+      ],
     )
 
     const onPageSelectedInner = React.useCallback(