@react-native-ohos/flash-list 1.8.3-rc.5 → 2.1.1-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.OpenSource +1 -1
- package/dist/AnimatedFlashList.d.ts +4 -28
- package/dist/AnimatedFlashList.d.ts.map +1 -1
- package/dist/AnimatedFlashList.js +5 -30
- package/dist/AnimatedFlashList.js.map +1 -1
- package/dist/FlashList.d.ts +1 -179
- package/dist/FlashList.d.ts.map +1 -1
- package/dist/FlashList.js +1 -599
- package/dist/FlashList.js.map +1 -1
- package/dist/FlashListProps.d.ts +285 -278
- package/dist/FlashListProps.d.ts.map +1 -1
- package/dist/FlashListProps.js +5 -31
- package/dist/FlashListProps.js.map +1 -1
- package/dist/FlashListRef.d.ts +305 -0
- package/dist/FlashListRef.d.ts.map +1 -0
- package/dist/FlashListRef.js +2 -0
- package/dist/FlashListRef.js.map +1 -0
- package/dist/benchmark/AutoScrollHelper.d.ts +17 -40
- package/dist/benchmark/AutoScrollHelper.d.ts.map +1 -1
- package/dist/benchmark/AutoScrollHelper.js +59 -90
- package/dist/benchmark/AutoScrollHelper.js.map +1 -1
- package/dist/benchmark/JSFPSMonitor.d.ts +22 -45
- package/dist/benchmark/JSFPSMonitor.d.ts.map +1 -1
- package/dist/benchmark/JSFPSMonitor.js +59 -87
- package/dist/benchmark/JSFPSMonitor.js.map +1 -1
- package/dist/benchmark/roundToDecimalPlaces.d.ts +1 -24
- package/dist/benchmark/roundToDecimalPlaces.d.ts.map +1 -1
- package/dist/benchmark/roundToDecimalPlaces.js +4 -31
- package/dist/benchmark/roundToDecimalPlaces.js.map +1 -1
- package/dist/benchmark/useBenchmark.d.ts +40 -57
- package/dist/benchmark/useBenchmark.d.ts.map +1 -1
- package/dist/benchmark/useBenchmark.js +119 -189
- package/dist/benchmark/useBenchmark.js.map +1 -1
- package/dist/benchmark/useDataMultiplier.d.ts +8 -31
- package/dist/benchmark/useDataMultiplier.d.ts.map +1 -1
- package/dist/benchmark/useDataMultiplier.js +19 -47
- package/dist/benchmark/useDataMultiplier.js.map +1 -1
- package/dist/benchmark/useFlatListBenchmark.d.ts +14 -35
- package/dist/benchmark/useFlatListBenchmark.d.ts.map +1 -1
- package/dist/benchmark/useFlatListBenchmark.js +92 -122
- package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
- package/dist/errors/ErrorMessages.d.ts +16 -0
- package/dist/errors/ErrorMessages.d.ts.map +1 -0
- package/dist/errors/ErrorMessages.js +16 -0
- package/dist/errors/ErrorMessages.js.map +1 -0
- package/dist/errors/WarningMessages.d.ts +6 -0
- package/dist/errors/WarningMessages.d.ts.map +1 -0
- package/dist/errors/WarningMessages.js +7 -0
- package/dist/errors/WarningMessages.js.map +1 -0
- package/dist/index.d.ts +15 -36
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -54
- package/dist/index.js.map +1 -1
- package/dist/isNewArch.d.ts +2 -0
- package/dist/isNewArch.d.ts.map +1 -0
- package/dist/isNewArch.js +22 -0
- package/dist/isNewArch.js.map +1 -0
- package/dist/native/config/PlatformHelper.android.d.ts +6 -48
- package/dist/native/config/PlatformHelper.android.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.android.js +6 -45
- package/dist/native/config/PlatformHelper.android.js.map +1 -1
- package/dist/native/config/PlatformHelper.d.ts +6 -48
- package/dist/native/config/PlatformHelper.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.harmony.d.ts +29 -48
- package/dist/native/config/PlatformHelper.harmony.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.harmony.js +29 -44
- package/dist/native/config/PlatformHelper.harmony.js.map +1 -1
- package/dist/native/config/PlatformHelper.ios.d.ts +6 -48
- package/dist/native/config/PlatformHelper.ios.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.ios.js +6 -44
- package/dist/native/config/PlatformHelper.ios.js.map +1 -1
- package/dist/native/config/PlatformHelper.js +6 -45
- package/dist/native/config/PlatformHelper.js.map +1 -1
- package/dist/native/config/PlatformHelper.web.d.ts +6 -49
- package/dist/native/config/PlatformHelper.web.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.web.js +6 -47
- package/dist/native/config/PlatformHelper.web.js.map +1 -1
- package/dist/recyclerview/LayoutCommitObserver.d.ts +12 -0
- package/dist/recyclerview/LayoutCommitObserver.d.ts.map +1 -0
- package/dist/recyclerview/LayoutCommitObserver.js +58 -0
- package/dist/recyclerview/LayoutCommitObserver.js.map +1 -0
- package/dist/recyclerview/RecyclerView.d.ts +13 -0
- package/dist/recyclerview/RecyclerView.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerView.js +368 -0
- package/dist/recyclerview/RecyclerView.js.map +1 -0
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts +46 -0
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewContextProvider.js +10 -0
- package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -0
- package/dist/recyclerview/RecyclerViewManager.d.ts +78 -0
- package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewManager.js +343 -0
- package/dist/recyclerview/RecyclerViewManager.js.map +1 -0
- package/dist/recyclerview/RecyclerViewProps.d.ts +2 -0
- package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewProps.js +2 -0
- package/dist/recyclerview/RecyclerViewProps.js.map +1 -0
- package/dist/recyclerview/RenderStackManager.d.ts +86 -0
- package/dist/recyclerview/RenderStackManager.d.ts.map +1 -0
- package/dist/recyclerview/RenderStackManager.js +252 -0
- package/dist/recyclerview/RenderStackManager.js.map +1 -0
- package/dist/recyclerview/ViewHolder.d.ts +45 -0
- package/dist/recyclerview/ViewHolder.d.ts.map +1 -0
- package/dist/recyclerview/ViewHolder.js +94 -0
- package/dist/recyclerview/ViewHolder.js.map +1 -0
- package/dist/recyclerview/ViewHolderCollection.d.ts +63 -0
- package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -0
- package/dist/recyclerview/ViewHolderCollection.js +87 -0
- package/dist/recyclerview/ViewHolderCollection.js.map +1 -0
- package/dist/recyclerview/components/CompatScroller.d.ts +7 -0
- package/dist/recyclerview/components/CompatScroller.d.ts.map +1 -0
- package/dist/recyclerview/components/CompatScroller.js +7 -0
- package/dist/recyclerview/components/CompatScroller.js.map +1 -0
- package/dist/recyclerview/components/CompatView.d.ts +7 -0
- package/dist/recyclerview/components/CompatView.d.ts.map +1 -0
- package/dist/recyclerview/components/CompatView.js +7 -0
- package/dist/recyclerview/components/CompatView.js.map +1 -0
- package/dist/recyclerview/components/ScrollAnchor.d.ts +29 -0
- package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -0
- package/dist/recyclerview/components/ScrollAnchor.js +33 -0
- package/dist/recyclerview/components/ScrollAnchor.js.map +1 -0
- package/dist/recyclerview/components/StickyHeaders.d.ts +38 -0
- package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -0
- package/dist/recyclerview/components/StickyHeaders.js +112 -0
- package/dist/recyclerview/components/StickyHeaders.js.map +1 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts +51 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts.map +1 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js +95 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +105 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js +202 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -0
- package/dist/recyclerview/helpers/RenderTimeTracker.d.ts +14 -0
- package/dist/recyclerview/helpers/RenderTimeTracker.d.ts.map +1 -0
- package/dist/recyclerview/helpers/RenderTimeTracker.js +44 -0
- package/dist/recyclerview/helpers/RenderTimeTracker.js.map +1 -0
- package/dist/recyclerview/helpers/VelocityTracker.d.ts +29 -0
- package/dist/recyclerview/helpers/VelocityTracker.d.ts.map +1 -0
- package/dist/recyclerview/helpers/VelocityTracker.js +64 -0
- package/dist/recyclerview/helpers/VelocityTracker.js.map +1 -0
- package/dist/recyclerview/hooks/useBoundDetection.d.ts +17 -0
- package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useBoundDetection.js +132 -0
- package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -0
- package/dist/recyclerview/hooks/useLayoutState.d.ts +14 -0
- package/dist/recyclerview/hooks/useLayoutState.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useLayoutState.js +38 -0
- package/dist/recyclerview/hooks/useLayoutState.js.map +1 -0
- package/dist/recyclerview/hooks/useMappingHelper.d.ts +9 -0
- package/dist/recyclerview/hooks/useMappingHelper.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useMappingHelper.js +15 -0
- package/dist/recyclerview/hooks/useMappingHelper.js.map +1 -0
- package/dist/recyclerview/hooks/useOnLoad.d.ts +25 -0
- package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useOnLoad.js +67 -0
- package/dist/recyclerview/hooks/useOnLoad.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +28 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.js +507 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +8 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.js +32 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclingState.d.ts +18 -0
- package/dist/recyclerview/hooks/useRecyclingState.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclingState.js +49 -0
- package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -0
- package/dist/recyclerview/hooks/useSecondaryProps.d.ts +27 -0
- package/dist/recyclerview/hooks/useSecondaryProps.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useSecondaryProps.js +90 -0
- package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -0
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts +15 -0
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js +58 -0
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js.map +1 -0
- package/dist/recyclerview/hooks/useUnmountFlag.d.ts +10 -0
- package/dist/recyclerview/hooks/useUnmountFlag.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useUnmountFlag.js +25 -0
- package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +79 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.js +221 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts +296 -0
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/LayoutManager.js +279 -0
- package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts +51 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js +151 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts +81 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +269 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts +12 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts.map +1 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.js +14 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -0
- package/dist/recyclerview/utils/componentUtils.d.ts +19 -0
- package/dist/recyclerview/utils/componentUtils.d.ts.map +1 -0
- package/dist/recyclerview/utils/componentUtils.js +27 -0
- package/dist/recyclerview/utils/componentUtils.js.map +1 -0
- package/dist/recyclerview/utils/findVisibleIndex.d.ts +24 -0
- package/dist/recyclerview/utils/findVisibleIndex.d.ts.map +1 -0
- package/dist/recyclerview/utils/findVisibleIndex.js +76 -0
- package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -0
- package/dist/recyclerview/utils/measureLayout.d.ts +52 -0
- package/dist/recyclerview/utils/measureLayout.d.ts.map +1 -0
- package/dist/recyclerview/utils/measureLayout.js +99 -0
- package/dist/recyclerview/utils/measureLayout.js.map +1 -0
- package/dist/recyclerview/utils/measureLayout.web.d.ts +29 -0
- package/dist/recyclerview/utils/measureLayout.web.d.ts.map +1 -0
- package/dist/recyclerview/utils/measureLayout.web.js +79 -0
- package/dist/recyclerview/utils/measureLayout.web.js.map +1 -0
- package/dist/recyclerview/viewability/ViewToken.d.ts +8 -0
- package/dist/recyclerview/viewability/ViewToken.d.ts.map +1 -0
- package/dist/recyclerview/viewability/ViewToken.js +2 -0
- package/dist/recyclerview/viewability/ViewToken.js.map +1 -0
- package/dist/recyclerview/viewability/ViewabilityHelper.d.ts +26 -0
- package/dist/recyclerview/viewability/ViewabilityHelper.d.ts.map +1 -0
- package/dist/recyclerview/viewability/ViewabilityHelper.js +98 -0
- package/dist/recyclerview/viewability/ViewabilityHelper.js.map +1 -0
- package/dist/recyclerview/viewability/ViewabilityManager.d.ts +25 -0
- package/dist/recyclerview/viewability/ViewabilityManager.d.ts.map +1 -0
- package/dist/recyclerview/viewability/ViewabilityManager.js +94 -0
- package/dist/recyclerview/viewability/ViewabilityManager.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/AverageWindow.d.ts +33 -43
- package/dist/utils/AverageWindow.d.ts.map +1 -1
- package/dist/utils/AverageWindow.js +66 -71
- package/dist/utils/AverageWindow.js.map +1 -1
- package/jestSetup.js +23 -37
- package/package.json +15 -24
- package/src/AnimatedFlashList.ts +2 -25
- package/src/FlashList.ts +1 -0
- package/src/FlashListProps.ts +109 -100
- package/src/FlashListRef.ts +320 -0
- package/src/benchmark/AutoScrollHelper.ts +0 -24
- package/src/benchmark/JSFPSMonitor.ts +2 -26
- package/src/benchmark/roundToDecimalPlaces.ts +0 -24
- package/src/benchmark/useBenchmark.ts +59 -105
- package/src/benchmark/useDataMultiplier.ts +0 -24
- package/src/benchmark/useFlatListBenchmark.ts +43 -32
- package/src/errors/ErrorMessages.ts +26 -0
- package/src/errors/WarningMessages.ts +9 -0
- package/src/index.ts +18 -46
- package/src/isNewArch.ts +25 -0
- package/src/native/config/PlatformHelper.android.ts +3 -49
- package/src/native/config/PlatformHelper.harmony.ts +3 -24
- package/src/native/config/PlatformHelper.ios.ts +3 -48
- package/src/native/config/PlatformHelper.ts +3 -49
- package/src/native/config/PlatformHelper.web.ts +4 -55
- package/src/recyclerview/LayoutCommitObserver.tsx +74 -0
- package/src/recyclerview/RecyclerView.tsx +616 -0
- package/src/recyclerview/RecyclerViewContextProvider.ts +65 -0
- package/src/recyclerview/RecyclerViewManager.ts +461 -0
- package/src/recyclerview/RecyclerViewProps.ts +1 -0
- package/src/recyclerview/RenderStackManager.ts +317 -0
- package/src/recyclerview/ViewHolder.tsx +180 -0
- package/src/recyclerview/ViewHolderCollection.tsx +193 -0
- package/src/recyclerview/components/CompatScroller.ts +9 -0
- package/src/recyclerview/components/CompatView.ts +9 -0
- package/src/recyclerview/components/ScrollAnchor.tsx +66 -0
- package/src/recyclerview/components/StickyHeaders.tsx +222 -0
- package/src/recyclerview/helpers/ConsecutiveNumbers.ts +120 -0
- package/src/recyclerview/helpers/EngagedIndicesTracker.ts +301 -0
- package/src/recyclerview/helpers/RenderTimeTracker.ts +50 -0
- package/src/recyclerview/helpers/VelocityTracker.ts +77 -0
- package/src/recyclerview/hooks/useBoundDetection.ts +176 -0
- package/src/recyclerview/hooks/useLayoutState.ts +55 -0
- package/src/recyclerview/hooks/useMappingHelper.ts +20 -0
- package/src/recyclerview/hooks/useOnLoad.ts +80 -0
- package/src/recyclerview/hooks/useRecyclerViewController.tsx +633 -0
- package/src/recyclerview/hooks/useRecyclerViewManager.ts +42 -0
- package/src/recyclerview/hooks/useRecyclingState.ts +67 -0
- package/src/recyclerview/hooks/useSecondaryProps.tsx +124 -0
- package/src/recyclerview/hooks/useUnmountAwareCallbacks.ts +73 -0
- package/src/recyclerview/hooks/useUnmountFlag.ts +27 -0
- package/src/recyclerview/layout-managers/GridLayoutManager.ts +256 -0
- package/src/recyclerview/layout-managers/LayoutManager.ts +568 -0
- package/src/recyclerview/layout-managers/LinearLayoutManager.ts +171 -0
- package/src/recyclerview/layout-managers/MasonryLayoutManager.ts +323 -0
- package/src/recyclerview/utils/adjustOffsetForRTL.ts +17 -0
- package/src/recyclerview/utils/componentUtils.ts +28 -0
- package/src/recyclerview/utils/findVisibleIndex.ts +93 -0
- package/src/recyclerview/utils/measureLayout.ts +128 -0
- package/src/recyclerview/utils/measureLayout.web.ts +102 -0
- package/src/recyclerview/viewability/ViewToken.ts +7 -0
- package/src/{viewability → recyclerview/viewability}/ViewabilityHelper.ts +8 -33
- package/src/{viewability → recyclerview/viewability}/ViewabilityManager.ts +23 -46
- package/src/utils/AverageWindow.ts +33 -24
- package/dist/GridLayoutProviderWithProps.d.ts +0 -65
- package/dist/GridLayoutProviderWithProps.d.ts.map +0 -1
- package/dist/GridLayoutProviderWithProps.js +0 -138
- package/dist/GridLayoutProviderWithProps.js.map +0 -1
- package/dist/MasonryFlashList.d.ts +0 -74
- package/dist/MasonryFlashList.d.ts.map +0 -1
- package/dist/MasonryFlashList.js +0 -275
- package/dist/MasonryFlashList.js.map +0 -1
- package/dist/PureComponentWrapper.d.ts +0 -45
- package/dist/PureComponentWrapper.d.ts.map +0 -1
- package/dist/PureComponentWrapper.js +0 -60
- package/dist/PureComponentWrapper.js.map +0 -1
- package/dist/__tests__/AverageWindow.test.d.ts +0 -2
- package/dist/__tests__/AverageWindow.test.d.ts.map +0 -1
- package/dist/__tests__/AverageWindow.test.js +0 -69
- package/dist/__tests__/AverageWindow.test.js.map +0 -1
- package/dist/__tests__/ContentContainerUtils.test.d.ts +0 -2
- package/dist/__tests__/ContentContainerUtils.test.d.ts.map +0 -1
- package/dist/__tests__/ContentContainerUtils.test.js +0 -85
- package/dist/__tests__/ContentContainerUtils.test.js.map +0 -1
- package/dist/__tests__/FlashList.test.d.ts +0 -2
- package/dist/__tests__/FlashList.test.d.ts.map +0 -1
- package/dist/__tests__/FlashList.test.js +0 -792
- package/dist/__tests__/FlashList.test.js.map +0 -1
- package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts +0 -2
- package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts.map +0 -1
- package/dist/__tests__/GridLayoutProviderWithProps.test.js +0 -143
- package/dist/__tests__/GridLayoutProviderWithProps.test.js.map +0 -1
- package/dist/__tests__/MasonryFlashList.test.d.ts +0 -2
- package/dist/__tests__/MasonryFlashList.test.d.ts.map +0 -1
- package/dist/__tests__/MasonryFlashList.test.js +0 -254
- package/dist/__tests__/MasonryFlashList.test.js.map +0 -1
- package/dist/__tests__/PlatformHelper.web.test.d.ts +0 -2
- package/dist/__tests__/PlatformHelper.web.test.d.ts.map +0 -1
- package/dist/__tests__/PlatformHelper.web.test.js +0 -33
- package/dist/__tests__/PlatformHelper.web.test.js.map +0 -1
- package/dist/__tests__/ViewabilityHelper.test.d.ts +0 -2
- package/dist/__tests__/ViewabilityHelper.test.d.ts.map +0 -1
- package/dist/__tests__/ViewabilityHelper.test.js +0 -187
- package/dist/__tests__/ViewabilityHelper.test.js.map +0 -1
- package/dist/__tests__/helpers/mountFlashList.d.ts +0 -19
- package/dist/__tests__/helpers/mountFlashList.d.ts.map +0 -1
- package/dist/__tests__/helpers/mountFlashList.js +0 -44
- package/dist/__tests__/helpers/mountFlashList.js.map +0 -1
- package/dist/__tests__/helpers/mountMasonryFlashList.d.ts +0 -18
- package/dist/__tests__/helpers/mountMasonryFlashList.d.ts.map +0 -1
- package/dist/__tests__/helpers/mountMasonryFlashList.js +0 -49
- package/dist/__tests__/helpers/mountMasonryFlashList.js.map +0 -1
- package/dist/__tests__/useBlankAreaTracker.test.d.ts +0 -2
- package/dist/__tests__/useBlankAreaTracker.test.d.ts.map +0 -1
- package/dist/__tests__/useBlankAreaTracker.test.js +0 -177
- package/dist/__tests__/useBlankAreaTracker.test.js.map +0 -1
- package/dist/benchmark/useBlankAreaTracker.d.ts +0 -57
- package/dist/benchmark/useBlankAreaTracker.d.ts.map +0 -1
- package/dist/benchmark/useBlankAreaTracker.js +0 -90
- package/dist/benchmark/useBlankAreaTracker.js.map +0 -1
- package/dist/errors/CustomError.d.ts +0 -31
- package/dist/errors/CustomError.d.ts.map +0 -1
- package/dist/errors/CustomError.js +0 -37
- package/dist/errors/CustomError.js.map +0 -1
- package/dist/errors/ExceptionList.d.ts +0 -47
- package/dist/errors/ExceptionList.d.ts.map +0 -1
- package/dist/errors/ExceptionList.js +0 -49
- package/dist/errors/ExceptionList.js.map +0 -1
- package/dist/errors/Warnings.d.ts +0 -32
- package/dist/errors/Warnings.d.ts.map +0 -1
- package/dist/errors/Warnings.js +0 -36
- package/dist/errors/Warnings.js.map +0 -1
- package/dist/fabric/AutoLayoutNativeComponent.d.ts +0 -42
- package/dist/fabric/AutoLayoutNativeComponent.d.ts.map +0 -1
- package/dist/fabric/AutoLayoutNativeComponent.js +0 -29
- package/dist/fabric/AutoLayoutNativeComponent.js.map +0 -1
- package/dist/fabric/CellContainerNativeComponent.d.ts +0 -31
- package/dist/fabric/CellContainerNativeComponent.d.ts.map +0 -1
- package/dist/fabric/CellContainerNativeComponent.js +0 -29
- package/dist/fabric/CellContainerNativeComponent.js.map +0 -1
- package/dist/native/auto-layout/AutoLayoutView.d.ts +0 -45
- package/dist/native/auto-layout/AutoLayoutView.d.ts.map +0 -1
- package/dist/native/auto-layout/AutoLayoutView.js +0 -71
- package/dist/native/auto-layout/AutoLayoutView.js.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts +0 -27
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js +0 -29
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts +0 -28
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.harmony.d.ts +0 -27
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.harmony.d.ts.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.harmony.js +0 -29
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.harmony.js.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts +0 -27
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js +0 -29
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js +0 -29
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts +0 -39
- package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts.map +0 -1
- package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js +0 -26
- package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js.map +0 -1
- package/dist/native/cell-container/CellContainer.android.d.ts +0 -29
- package/dist/native/cell-container/CellContainer.android.d.ts.map +0 -1
- package/dist/native/cell-container/CellContainer.android.js +0 -32
- package/dist/native/cell-container/CellContainer.android.js.map +0 -1
- package/dist/native/cell-container/CellContainer.d.ts +0 -31
- package/dist/native/cell-container/CellContainer.d.ts.map +0 -1
- package/dist/native/cell-container/CellContainer.harmony.d.ts +0 -29
- package/dist/native/cell-container/CellContainer.harmony.d.ts.map +0 -1
- package/dist/native/cell-container/CellContainer.harmony.js +0 -32
- package/dist/native/cell-container/CellContainer.harmony.js.map +0 -1
- package/dist/native/cell-container/CellContainer.ios.d.ts +0 -29
- package/dist/native/cell-container/CellContainer.ios.d.ts.map +0 -1
- package/dist/native/cell-container/CellContainer.ios.js +0 -32
- package/dist/native/cell-container/CellContainer.ios.js.map +0 -1
- package/dist/native/cell-container/CellContainer.js +0 -34
- package/dist/native/cell-container/CellContainer.js.map +0 -1
- package/dist/native/cell-container/CellContainer.web.d.ts +0 -30
- package/dist/native/cell-container/CellContainer.web.d.ts.map +0 -1
- package/dist/native/cell-container/CellContainer.web.js +0 -36
- package/dist/native/cell-container/CellContainer.web.js.map +0 -1
- package/dist/utils/ContentContainerUtils.d.ts +0 -50
- package/dist/utils/ContentContainerUtils.d.ts.map +0 -1
- package/dist/utils/ContentContainerUtils.js +0 -71
- package/dist/utils/ContentContainerUtils.js.map +0 -1
- package/dist/viewability/ViewToken.d.ts +0 -31
- package/dist/viewability/ViewToken.d.ts.map +0 -1
- package/dist/viewability/ViewToken.js +0 -26
- package/dist/viewability/ViewToken.js.map +0 -1
- package/dist/viewability/ViewabilityHelper.d.ts +0 -49
- package/dist/viewability/ViewabilityHelper.d.ts.map +0 -1
- package/dist/viewability/ViewabilityHelper.js +0 -130
- package/dist/viewability/ViewabilityHelper.js.map +0 -1
- package/dist/viewability/ViewabilityManager.d.ts +0 -48
- package/dist/viewability/ViewabilityManager.d.ts.map +0 -1
- package/dist/viewability/ViewabilityManager.js +0 -131
- package/dist/viewability/ViewabilityManager.js.map +0 -1
- package/harmony/flash_list/BuildProfile.ets +0 -17
- package/harmony/flash_list/LICENSE +0 -7
- package/harmony/flash_list/build-profile.json5 +0 -8
- package/harmony/flash_list/hvigorfile.ts +0 -1
- package/harmony/flash_list/index.ets +0 -27
- package/harmony/flash_list/obfuscation-rules.txt +0 -18
- package/harmony/flash_list/oh-package.json5 +0 -24
- package/harmony/flash_list/src/main/cpp/AutoLayoutNode.cpp +0 -63
- package/harmony/flash_list/src/main/cpp/AutoLayoutNode.h +0 -54
- package/harmony/flash_list/src/main/cpp/AutoLayoutShadow.cpp +0 -140
- package/harmony/flash_list/src/main/cpp/AutoLayoutShadow.h +0 -66
- package/harmony/flash_list/src/main/cpp/AutoLayoutViewComponentInstance.cpp +0 -208
- package/harmony/flash_list/src/main/cpp/AutoLayoutViewComponentInstance.h +0 -78
- package/harmony/flash_list/src/main/cpp/AutoLayoutViewEventEmitRequestHandler.h +0 -53
- package/harmony/flash_list/src/main/cpp/AutoLayoutViewJSIBinder.h +0 -50
- package/harmony/flash_list/src/main/cpp/CMakeLists.txt +0 -12
- package/harmony/flash_list/src/main/cpp/CellContainerComponentInstance.cpp +0 -80
- package/harmony/flash_list/src/main/cpp/CellContainerComponentInstance.h +0 -64
- package/harmony/flash_list/src/main/cpp/CellContainerJSIBinder.h +0 -39
- package/harmony/flash_list/src/main/cpp/ComponentDescriptors.h +0 -40
- package/harmony/flash_list/src/main/cpp/EventEmitters.cpp +0 -40
- package/harmony/flash_list/src/main/cpp/EventEmitters.h +0 -48
- package/harmony/flash_list/src/main/cpp/FlashListPackage.h +0 -85
- package/harmony/flash_list/src/main/cpp/FlashListStackNode.cpp +0 -87
- package/harmony/flash_list/src/main/cpp/FlashListStackNode.h +0 -57
- package/harmony/flash_list/src/main/cpp/Props.cpp +0 -52
- package/harmony/flash_list/src/main/cpp/Props.h +0 -64
- package/harmony/flash_list/src/main/cpp/ShadowNodes.cpp +0 -34
- package/harmony/flash_list/src/main/cpp/ShadowNodes.h +0 -48
- package/harmony/flash_list/src/main/ets/Logger.ets +0 -64
- package/harmony/flash_list/src/main/ets/RNAutoLayoutShadow.ets +0 -154
- package/harmony/flash_list/src/main/ets/RNAutoLayoutView.ets +0 -277
- package/harmony/flash_list/src/main/ets/RNCellContainer.ets +0 -113
- package/harmony/flash_list/src/main/module.json5 +0 -9
- package/harmony/flash_list/src/main/resources/base/element/color.json +0 -8
- package/harmony/flash_list/src/main/resources/base/element/string.json +0 -16
- package/harmony/flash_list/src/main/resources/base/media/icon.png +0 -0
- package/harmony/flash_list/src/main/resources/base/profile/main_pages.json +0 -5
- package/harmony/flash_list/src/main/resources/en_US/element/string.json +0 -16
- package/harmony/flash_list/src/main/resources/zh_CN/element/string.json +0 -16
- package/harmony/flash_list.har +0 -0
- package/src/FlashList.tsx +0 -949
- package/src/GridLayoutProviderWithProps.ts +0 -204
- package/src/MasonryFlashList.tsx +0 -499
- package/src/PureComponentWrapper.tsx +0 -65
- package/src/benchmark/useBlankAreaTracker.ts +0 -141
- package/src/errors/CustomError.ts +0 -34
- package/src/errors/ExceptionList.ts +0 -52
- package/src/errors/Warnings.ts +0 -39
- package/src/fabric/AutoLayoutNativeComponent.ts +0 -52
- package/src/fabric/CellContainerNativeComponent.ts +0 -35
- package/src/native/auto-layout/AutoLayoutView.tsx +0 -97
- package/src/native/auto-layout/AutoLayoutViewNativeComponent.android.ts +0 -31
- package/src/native/auto-layout/AutoLayoutViewNativeComponent.harmony.ts +0 -31
- package/src/native/auto-layout/AutoLayoutViewNativeComponent.ios.ts +0 -31
- package/src/native/auto-layout/AutoLayoutViewNativeComponent.ts +0 -31
- package/src/native/auto-layout/AutoLayoutViewNativeComponentProps.ts +0 -41
- package/src/native/cell-container/CellContainer.android.ts +0 -31
- package/src/native/cell-container/CellContainer.harmony.ts +0 -31
- package/src/native/cell-container/CellContainer.ios.ts +0 -31
- package/src/native/cell-container/CellContainer.tsx +0 -38
- package/src/native/cell-container/CellContainer.web.tsx +0 -33
- package/src/utils/ContentContainerUtils.ts +0 -116
- package/src/viewability/ViewToken.ts +0 -31
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { PlatformConfig } from "../../native/config/PlatformHelper";
|
|
2
|
+
import { ConsecutiveNumbers } from "./ConsecutiveNumbers";
|
|
3
|
+
export class RVEngagedIndicesTrackerImpl {
|
|
4
|
+
constructor() {
|
|
5
|
+
// Current scroll position of the list
|
|
6
|
+
this.scrollOffset = 0;
|
|
7
|
+
// Distance to pre-render items before and after the visible viewport (in pixels)
|
|
8
|
+
this.drawDistance = PlatformConfig.defaultDrawDistance;
|
|
9
|
+
// Whether to use offset projection to predict the next scroll offset
|
|
10
|
+
this.enableOffsetProjection = true;
|
|
11
|
+
// Average render time of the list
|
|
12
|
+
this.averageRenderTime = 16;
|
|
13
|
+
// Internal override to disable offset projection
|
|
14
|
+
this.forceDisableOffsetProjection = false;
|
|
15
|
+
// Currently rendered item indices (including buffer items)
|
|
16
|
+
this.engagedIndices = ConsecutiveNumbers.EMPTY;
|
|
17
|
+
// Buffer distribution multipliers for scroll direction optimization
|
|
18
|
+
this.smallMultiplier = 0.3; // Used for buffer in the opposite direction of scroll
|
|
19
|
+
this.largeMultiplier = 0.7; // Used for buffer in the direction of scroll
|
|
20
|
+
// Circular buffer to track recent scroll velocities for direction detection
|
|
21
|
+
this.velocityHistory = [0, 0, 0, -0.1, -0.1];
|
|
22
|
+
this.velocityIndex = 0;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Updates scroll position and determines which items should be rendered.
|
|
26
|
+
* Implements a smart buffer system that:
|
|
27
|
+
* 1. Calculates the visible viewport
|
|
28
|
+
* 2. Determines optimal buffer distribution based on scroll direction
|
|
29
|
+
* 3. Adjusts buffer sizes at list boundaries
|
|
30
|
+
* 4. Returns new indices that need to be rendered
|
|
31
|
+
*/
|
|
32
|
+
updateScrollOffset(offset, velocity, layoutManager) {
|
|
33
|
+
// Update current scroll position
|
|
34
|
+
this.scrollOffset = offset;
|
|
35
|
+
// STEP 1: Determine the currently visible viewport
|
|
36
|
+
const windowSize = layoutManager.getWindowsSize();
|
|
37
|
+
const isHorizontal = layoutManager.isHorizontal();
|
|
38
|
+
// Update velocity history
|
|
39
|
+
if (velocity) {
|
|
40
|
+
this.updateVelocityHistory(isHorizontal ? velocity.x : velocity.y);
|
|
41
|
+
}
|
|
42
|
+
// Determine scroll direction to optimize buffer distribution
|
|
43
|
+
const isScrollingBackward = this.isScrollingBackward();
|
|
44
|
+
const viewportStart = this.enableOffsetProjection && !this.forceDisableOffsetProjection
|
|
45
|
+
? this.getProjectedScrollOffset(offset, this.averageRenderTime)
|
|
46
|
+
: offset;
|
|
47
|
+
// console.log("timeMs", this.averageRenderTime, offset, viewportStart);
|
|
48
|
+
const viewportSize = isHorizontal ? windowSize.width : windowSize.height;
|
|
49
|
+
const viewportEnd = viewportStart + viewportSize;
|
|
50
|
+
// STEP 2: Determine buffer size and distribution
|
|
51
|
+
// The total extra space where items will be pre-rendered
|
|
52
|
+
const totalBuffer = this.drawDistance * 2;
|
|
53
|
+
// Distribute more buffer in the direction of scrolling
|
|
54
|
+
// When scrolling forward: more buffer after viewport
|
|
55
|
+
// When scrolling backward: more buffer before viewport
|
|
56
|
+
const beforeRatio = isScrollingBackward
|
|
57
|
+
? this.largeMultiplier
|
|
58
|
+
: this.smallMultiplier;
|
|
59
|
+
const afterRatio = isScrollingBackward
|
|
60
|
+
? this.smallMultiplier
|
|
61
|
+
: this.largeMultiplier;
|
|
62
|
+
const bufferBefore = Math.ceil(totalBuffer * beforeRatio);
|
|
63
|
+
const bufferAfter = Math.ceil(totalBuffer * afterRatio);
|
|
64
|
+
// STEP 3: Calculate the extended viewport (visible area + buffers)
|
|
65
|
+
// The start position with buffer (never less than 0)
|
|
66
|
+
let extendedStart = Math.max(0, viewportStart - bufferBefore);
|
|
67
|
+
// If we couldn't apply full buffer at start, calculate how much was unused
|
|
68
|
+
const unusedStartBuffer = Math.max(0, bufferBefore - viewportStart);
|
|
69
|
+
// Add any unused start buffer to the end buffer
|
|
70
|
+
let extendedEnd = viewportEnd + bufferAfter + unusedStartBuffer;
|
|
71
|
+
// STEP 4: Handle end boundary adjustments
|
|
72
|
+
// Get the total content size to check for end boundary
|
|
73
|
+
const layoutSize = layoutManager.getLayoutSize();
|
|
74
|
+
const maxPosition = isHorizontal ? layoutSize.width : layoutSize.height;
|
|
75
|
+
// If we hit the end boundary, redistribute unused buffer to the start
|
|
76
|
+
if (extendedEnd > maxPosition) {
|
|
77
|
+
// Calculate unused end buffer and apply it to the start if possible
|
|
78
|
+
const unusedEndBuffer = extendedEnd - maxPosition;
|
|
79
|
+
extendedEnd = maxPosition;
|
|
80
|
+
// Try to extend start position further with the unused end buffer
|
|
81
|
+
extendedStart = Math.max(0, extendedStart - unusedEndBuffer);
|
|
82
|
+
}
|
|
83
|
+
// STEP 5: Get and return the new engaged indices
|
|
84
|
+
const newEngagedIndices = layoutManager.getVisibleLayouts(extendedStart, extendedEnd);
|
|
85
|
+
// console.log(
|
|
86
|
+
// "newEngagedIndices",
|
|
87
|
+
// newEngagedIndices,
|
|
88
|
+
// this.scrollOffset,
|
|
89
|
+
// viewportStart
|
|
90
|
+
// );
|
|
91
|
+
// Only return new indices if they've changed
|
|
92
|
+
const oldEngagedIndices = this.engagedIndices;
|
|
93
|
+
this.engagedIndices = newEngagedIndices;
|
|
94
|
+
return newEngagedIndices.equals(oldEngagedIndices)
|
|
95
|
+
? undefined
|
|
96
|
+
: newEngagedIndices;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Updates the velocity history with a new velocity value.
|
|
100
|
+
* @param velocity - Current scroll velocity component (x or y)
|
|
101
|
+
*/
|
|
102
|
+
updateVelocityHistory(velocity) {
|
|
103
|
+
this.velocityHistory[this.velocityIndex] = velocity;
|
|
104
|
+
this.velocityIndex = (this.velocityIndex + 1) % this.velocityHistory.length;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Determines scroll direction by analyzing recent velocity history.
|
|
108
|
+
* Uses a majority voting system on the last 5 velocity values.
|
|
109
|
+
* @returns true if scrolling backward (negative direction), false otherwise
|
|
110
|
+
*/
|
|
111
|
+
isScrollingBackward() {
|
|
112
|
+
// should decide based on whether we have more positive or negative values, use for loop
|
|
113
|
+
let positiveCount = 0;
|
|
114
|
+
let negativeCount = 0;
|
|
115
|
+
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
116
|
+
for (let i = 0; i < this.velocityHistory.length; i++) {
|
|
117
|
+
if (this.velocityHistory[i] > 0) {
|
|
118
|
+
positiveCount++;
|
|
119
|
+
}
|
|
120
|
+
else if (this.velocityHistory[i] < 0) {
|
|
121
|
+
negativeCount++;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return positiveCount < negativeCount;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Calculates the median velocity based on velocity history
|
|
128
|
+
* Medina works better agains outliers
|
|
129
|
+
* @returns Median velocity over the recent history
|
|
130
|
+
*/
|
|
131
|
+
getMedianVelocity() {
|
|
132
|
+
// Make a copy of velocity history and sort it
|
|
133
|
+
const sortedVelocities = [...this.velocityHistory].sort((valueA, valueB) => valueA - valueB);
|
|
134
|
+
const length = sortedVelocities.length;
|
|
135
|
+
// If length is odd, return the middle element
|
|
136
|
+
if (length % 2 === 1) {
|
|
137
|
+
return sortedVelocities[Math.floor(length / 2)];
|
|
138
|
+
}
|
|
139
|
+
// If length is even, return the average of the two middle elements
|
|
140
|
+
const midIndex = length / 2;
|
|
141
|
+
return (sortedVelocities[midIndex - 1] + sortedVelocities[midIndex]) / 2;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Projects the next scroll offset based on median velocity
|
|
145
|
+
* @param timeMs Time in milliseconds to predict ahead
|
|
146
|
+
* @returns Projected scroll offset
|
|
147
|
+
*/
|
|
148
|
+
getProjectedScrollOffset(offset, timeMs) {
|
|
149
|
+
const medianVelocity = this.getMedianVelocity();
|
|
150
|
+
// Convert time from ms to seconds for velocity calculation
|
|
151
|
+
// Predict next position: current position + (velocity * time)
|
|
152
|
+
return offset + medianVelocity * timeMs;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Calculates which items are currently visible in the viewport.
|
|
156
|
+
* Unlike getEngagedIndices, this doesn't include buffer items.
|
|
157
|
+
* @param layoutManager - Layout manager to fetch item positions
|
|
158
|
+
* @returns Indices of items currently visible in the viewport
|
|
159
|
+
*/
|
|
160
|
+
computeVisibleIndices(layoutManager) {
|
|
161
|
+
const windowSize = layoutManager.getWindowsSize();
|
|
162
|
+
const isHorizontal = layoutManager.isHorizontal();
|
|
163
|
+
// Calculate viewport boundaries
|
|
164
|
+
const viewportStart = this.scrollOffset;
|
|
165
|
+
const viewportSize = isHorizontal ? windowSize.width : windowSize.height;
|
|
166
|
+
const viewportEnd = viewportStart + viewportSize;
|
|
167
|
+
// Get indices of items currently visible in the viewport
|
|
168
|
+
const newVisibleIndices = layoutManager.getVisibleLayouts(viewportStart, viewportEnd);
|
|
169
|
+
return newVisibleIndices;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Returns the currently engaged (rendered) indices.
|
|
173
|
+
* This includes both visible items and buffer items.
|
|
174
|
+
* @returns The last computed set of engaged indices
|
|
175
|
+
*/
|
|
176
|
+
getEngagedIndices() {
|
|
177
|
+
return this.engagedIndices;
|
|
178
|
+
}
|
|
179
|
+
setScrollDirection(scrollDirection) {
|
|
180
|
+
if (scrollDirection === "forward") {
|
|
181
|
+
this.velocityHistory = [0, 0, 0, 0.1, 0.1];
|
|
182
|
+
this.velocityIndex = 0;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this.velocityHistory = [0, 0, 0, -0.1, -0.1];
|
|
186
|
+
this.velocityIndex = 0;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Resets the velocity history based on the current scroll direction.
|
|
191
|
+
* This ensures that the velocity history is always in sync with the current scroll direction.
|
|
192
|
+
*/
|
|
193
|
+
resetVelocityHistory() {
|
|
194
|
+
if (this.isScrollingBackward()) {
|
|
195
|
+
this.setScrollDirection("backward");
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
this.setScrollDirection("forward");
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=EngagedIndicesTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EngagedIndicesTracker.js","sourceRoot":"","sources":["../../../src/recyclerview/helpers/EngagedIndicesTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class RenderTimeTracker {
|
|
2
|
+
private renderTimeAvgWindow;
|
|
3
|
+
private lastTimerStartedAt;
|
|
4
|
+
private maxRenderTime;
|
|
5
|
+
private defaultRenderTime;
|
|
6
|
+
private rendersWithoutCommit;
|
|
7
|
+
private maxRendersWithoutCommit;
|
|
8
|
+
startTracking(): void;
|
|
9
|
+
markRenderComplete(): void;
|
|
10
|
+
hasExceededMaxRendersWithoutCommit(): boolean;
|
|
11
|
+
getRawValue(): number;
|
|
12
|
+
getAverageRenderTime(): number;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=RenderTimeTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderTimeTracker.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/helpers/RenderTimeTracker.ts"],"names":[],"mappings":"AAGA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,mBAAmB,CAAwB;IACnD,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,uBAAuB,CAAM;IAErC,aAAa;IAUb,kBAAkB;IAWlB,kCAAkC;IAIlC,WAAW;IAIX,oBAAoB;CASrB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { PlatformConfig } from "../../native/config/PlatformHelper";
|
|
2
|
+
import { AverageWindow } from "../../utils/AverageWindow";
|
|
3
|
+
export class RenderTimeTracker {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.renderTimeAvgWindow = new AverageWindow(5);
|
|
6
|
+
this.lastTimerStartedAt = -1;
|
|
7
|
+
this.maxRenderTime = 32; // TODO: Improve this even more
|
|
8
|
+
this.defaultRenderTime = 16;
|
|
9
|
+
this.rendersWithoutCommit = 0;
|
|
10
|
+
this.maxRendersWithoutCommit = 40;
|
|
11
|
+
}
|
|
12
|
+
startTracking() {
|
|
13
|
+
this.rendersWithoutCommit++;
|
|
14
|
+
if (!PlatformConfig.trackAverageRenderTimeForOffsetProjection) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (this.lastTimerStartedAt === -1) {
|
|
18
|
+
this.lastTimerStartedAt = Date.now();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
markRenderComplete() {
|
|
22
|
+
this.rendersWithoutCommit = 0;
|
|
23
|
+
if (!PlatformConfig.trackAverageRenderTimeForOffsetProjection) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (this.lastTimerStartedAt !== -1) {
|
|
27
|
+
this.renderTimeAvgWindow.addValue(Date.now() - this.lastTimerStartedAt);
|
|
28
|
+
this.lastTimerStartedAt = -1;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
hasExceededMaxRendersWithoutCommit() {
|
|
32
|
+
return this.rendersWithoutCommit >= this.maxRendersWithoutCommit;
|
|
33
|
+
}
|
|
34
|
+
getRawValue() {
|
|
35
|
+
return this.renderTimeAvgWindow.currentValue;
|
|
36
|
+
}
|
|
37
|
+
getAverageRenderTime() {
|
|
38
|
+
if (!PlatformConfig.trackAverageRenderTimeForOffsetProjection) {
|
|
39
|
+
return this.defaultRenderTime;
|
|
40
|
+
}
|
|
41
|
+
return Math.min(this.maxRenderTime, Math.max(Math.round(this.renderTimeAvgWindow.currentValue), 16));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=RenderTimeTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderTimeTracker.js","sourceRoot":"","sources":["../../../src/recyclerview/helpers/RenderTimeTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,OAAO,iBAAiB;IAA9B;QACU,wBAAmB,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3C,uBAAkB,GAAG,CAAC,CAAC,CAAC;QACxB,kBAAa,GAAG,EAAE,CAAC,CAAC,+BAA+B;QACnD,sBAAiB,GAAG,EAAE,CAAC;QACvB,yBAAoB,GAAG,CAAC,CAAC;QACzB,4BAAuB,GAAG,EAAE,CAAC;IAwCvC,CAAC;IAtCC,aAAa;QACX,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,yCAAyC,EAAE,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,yCAAyC,EAAE,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACxE,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,kCAAkC;QAChC,OAAO,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,uBAAuB,CAAC;IACnE,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;IAC/C,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,cAAc,CAAC,yCAAyC,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAChE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks and calculates velocity for scroll/drag movements
|
|
3
|
+
* Used to determine momentum scrolling behavior
|
|
4
|
+
*/
|
|
5
|
+
export declare class VelocityTracker<T> {
|
|
6
|
+
/** Timestamp of the last velocity update */
|
|
7
|
+
private lastUpdateTime;
|
|
8
|
+
/** Current velocity vector with x and y components */
|
|
9
|
+
private velocity;
|
|
10
|
+
/** Reference to the momentum end timeout */
|
|
11
|
+
private timeoutId;
|
|
12
|
+
/**
|
|
13
|
+
* Calculates velocity based on position change over time
|
|
14
|
+
* @param newOffset Current position value
|
|
15
|
+
* @param oldOffset Previous position value
|
|
16
|
+
* @param isHorizontal Whether movement is horizontal (true) or vertical (false)
|
|
17
|
+
* @param isRTL Whether layout direction is right-to-left
|
|
18
|
+
* @param callback Function to call with velocity updates and momentum end signal
|
|
19
|
+
*/
|
|
20
|
+
computeVelocity(newOffset: number, oldOffset: number, isHorizontal: boolean, callback: (velocity: {
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
}, isMomentumEnd: boolean) => void): void;
|
|
24
|
+
/**
|
|
25
|
+
* Cleans up resources by clearing any pending timeout
|
|
26
|
+
*/
|
|
27
|
+
cleanUp(): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=VelocityTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VelocityTracker.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/helpers/VelocityTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC;IAC5B,4CAA4C;IAC5C,OAAO,CAAC,cAAc,CAAc;IACpC,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAkB;IAElC,4CAA4C;IAC5C,OAAO,CAAC,SAAS,CAA+B;IAEhD;;;;;;;OAOG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,OAAO,EACrB,QAAQ,EAAE,CACR,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAClC,aAAa,EAAE,OAAO,KACnB,IAAI;IAuCX;;OAEG;IACH,OAAO;CAMR"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks and calculates velocity for scroll/drag movements
|
|
3
|
+
* Used to determine momentum scrolling behavior
|
|
4
|
+
*/
|
|
5
|
+
export class VelocityTracker {
|
|
6
|
+
constructor() {
|
|
7
|
+
/** Timestamp of the last velocity update */
|
|
8
|
+
this.lastUpdateTime = Date.now();
|
|
9
|
+
/** Current velocity vector with x and y components */
|
|
10
|
+
this.velocity = { x: 0, y: 0 };
|
|
11
|
+
/** Reference to the momentum end timeout */
|
|
12
|
+
this.timeoutId = null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Calculates velocity based on position change over time
|
|
16
|
+
* @param newOffset Current position value
|
|
17
|
+
* @param oldOffset Previous position value
|
|
18
|
+
* @param isHorizontal Whether movement is horizontal (true) or vertical (false)
|
|
19
|
+
* @param isRTL Whether layout direction is right-to-left
|
|
20
|
+
* @param callback Function to call with velocity updates and momentum end signal
|
|
21
|
+
*/
|
|
22
|
+
computeVelocity(newOffset, oldOffset, isHorizontal, callback) {
|
|
23
|
+
// Clear any pending momentum end timeout
|
|
24
|
+
this.cleanUp();
|
|
25
|
+
// Calculate time since last update
|
|
26
|
+
const currentTime = Date.now();
|
|
27
|
+
const timeSinceLastUpdate = Math.max(1, currentTime - this.lastUpdateTime);
|
|
28
|
+
// Calculate velocity as distance/time
|
|
29
|
+
const newVelocity = (newOffset - oldOffset) / timeSinceLastUpdate;
|
|
30
|
+
// console.log(
|
|
31
|
+
// "newVelocity",
|
|
32
|
+
// newOffset,
|
|
33
|
+
// oldOffset,
|
|
34
|
+
// currentTime,
|
|
35
|
+
// this.lastUpdateTime,
|
|
36
|
+
// timeSinceLastUpdate,
|
|
37
|
+
// newVelocity
|
|
38
|
+
// );
|
|
39
|
+
this.lastUpdateTime = currentTime;
|
|
40
|
+
// Apply velocity to the correct axis
|
|
41
|
+
this.velocity.x = isHorizontal ? newVelocity : 0;
|
|
42
|
+
this.velocity.y = isHorizontal ? 0 : newVelocity;
|
|
43
|
+
// Trigger callback with current velocity
|
|
44
|
+
callback(this.velocity, false);
|
|
45
|
+
// Set timeout to signal momentum end after 100ms of no updates
|
|
46
|
+
this.timeoutId = setTimeout(() => {
|
|
47
|
+
this.cleanUp();
|
|
48
|
+
this.lastUpdateTime = Date.now();
|
|
49
|
+
this.velocity.x = 0;
|
|
50
|
+
this.velocity.y = 0;
|
|
51
|
+
callback(this.velocity, true);
|
|
52
|
+
}, 100);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Cleans up resources by clearing any pending timeout
|
|
56
|
+
*/
|
|
57
|
+
cleanUp() {
|
|
58
|
+
if (this.timeoutId !== null) {
|
|
59
|
+
clearTimeout(this.timeoutId);
|
|
60
|
+
this.timeoutId = null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=VelocityTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VelocityTracker.js","sourceRoot":"","sources":["../../../src/recyclerview/helpers/VelocityTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,eAAe;IAA5B;QACE,4CAA4C;QACpC,mBAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,sDAAsD;QAC9C,aAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAElC,4CAA4C;QACpC,cAAS,GAA0B,IAAI,CAAC;IAiElD,CAAC;IA/DC;;;;;;;OAOG;IACH,eAAe,CACb,SAAiB,EACjB,SAAiB,EACjB,YAAqB,EACrB,QAGS;QAET,yCAAyC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,mCAAmC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QAE3E,sCAAsC;QACtC,MAAM,WAAW,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,mBAAmB,CAAC;QAElE,eAAe;QACf,mBAAmB;QACnB,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,yBAAyB;QACzB,yBAAyB;QACzB,gBAAgB;QAChB,KAAK;QACL,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;QAElC,qCAAqC;QACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAEjD,yCAAyC;QACzC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE/B,+DAA+D;QAC/D,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RecyclerViewManager } from "../RecyclerViewManager";
|
|
2
|
+
import { CompatScroller } from "../components/CompatScroller";
|
|
3
|
+
/**
|
|
4
|
+
* Hook to detect when the scroll position reaches near the start or end of the list
|
|
5
|
+
* and trigger the appropriate callbacks. This hook is responsible for:
|
|
6
|
+
* 1. Detecting when the user scrolls near the end of the list (onEndReached)
|
|
7
|
+
* 2. Detecting when the user scrolls near the start of the list (onStartReached)
|
|
8
|
+
* 3. Managing auto-scrolling to bottom when new content is added
|
|
9
|
+
*
|
|
10
|
+
* @param recyclerViewManager - The RecyclerViewManager instance that handles the list's core functionality
|
|
11
|
+
* @param props - The RecyclerViewProps containing configuration and callbacks
|
|
12
|
+
* @param scrollViewRef - Reference to the scrollable container component
|
|
13
|
+
*/
|
|
14
|
+
export declare function useBoundDetection<T>(recyclerViewManager: RecyclerViewManager<T>, scrollViewRef: React.RefObject<CompatScroller>): {
|
|
15
|
+
checkBounds: () => void;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=useBoundDetection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBoundDetection.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useBoundDetection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC3C,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;;EA2J/C"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
2
|
+
import { useUnmountAwareAnimationFrame } from "./useUnmountAwareCallbacks";
|
|
3
|
+
/**
|
|
4
|
+
* Hook to detect when the scroll position reaches near the start or end of the list
|
|
5
|
+
* and trigger the appropriate callbacks. This hook is responsible for:
|
|
6
|
+
* 1. Detecting when the user scrolls near the end of the list (onEndReached)
|
|
7
|
+
* 2. Detecting when the user scrolls near the start of the list (onStartReached)
|
|
8
|
+
* 3. Managing auto-scrolling to bottom when new content is added
|
|
9
|
+
*
|
|
10
|
+
* @param recyclerViewManager - The RecyclerViewManager instance that handles the list's core functionality
|
|
11
|
+
* @param props - The RecyclerViewProps containing configuration and callbacks
|
|
12
|
+
* @param scrollViewRef - Reference to the scrollable container component
|
|
13
|
+
*/
|
|
14
|
+
export function useBoundDetection(recyclerViewManager, scrollViewRef) {
|
|
15
|
+
// Track whether we've already triggered the end reached callback to prevent duplicate calls
|
|
16
|
+
const pendingEndReached = useRef(false);
|
|
17
|
+
// Track whether we've already triggered the start reached callback to prevent duplicate calls
|
|
18
|
+
const pendingStartReached = useRef(false);
|
|
19
|
+
// Track whether we should auto-scroll to bottom when new content is added
|
|
20
|
+
const pendingAutoscrollToBottom = useRef(false);
|
|
21
|
+
const lastCheckBoundsTime = useRef(Date.now());
|
|
22
|
+
const { data } = recyclerViewManager.props;
|
|
23
|
+
const { requestAnimationFrame } = useUnmountAwareAnimationFrame();
|
|
24
|
+
const windowHeight = recyclerViewManager.hasLayout()
|
|
25
|
+
? recyclerViewManager.getWindowSize().height
|
|
26
|
+
: 0;
|
|
27
|
+
const contentHeight = recyclerViewManager.hasLayout()
|
|
28
|
+
? recyclerViewManager.getChildContainerDimensions().height
|
|
29
|
+
: 0;
|
|
30
|
+
const windowWidth = recyclerViewManager.hasLayout()
|
|
31
|
+
? recyclerViewManager.getWindowSize().width
|
|
32
|
+
: 0;
|
|
33
|
+
const contentWidth = recyclerViewManager.hasLayout()
|
|
34
|
+
? recyclerViewManager.getChildContainerDimensions().width
|
|
35
|
+
: 0;
|
|
36
|
+
/**
|
|
37
|
+
* Checks if the scroll position is near the start or end of the list
|
|
38
|
+
* and triggers appropriate callbacks if configured.
|
|
39
|
+
*/
|
|
40
|
+
const checkBounds = useCallback(() => {
|
|
41
|
+
var _a;
|
|
42
|
+
lastCheckBoundsTime.current = Date.now();
|
|
43
|
+
const { onEndReached, onStartReached, maintainVisibleContentPosition, horizontal, onEndReachedThreshold: onEndReachedThresholdProp, onStartReachedThreshold: onStartReachedThresholdProp, } = recyclerViewManager.props;
|
|
44
|
+
// Skip all calculations if neither callback is provided and autoscroll is disabled
|
|
45
|
+
const autoscrollToBottomThreshold = (_a = maintainVisibleContentPosition === null || maintainVisibleContentPosition === void 0 ? void 0 : maintainVisibleContentPosition.autoscrollToBottomThreshold) !== null && _a !== void 0 ? _a : -1;
|
|
46
|
+
if (!onEndReached && !onStartReached && autoscrollToBottomThreshold < 0) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (recyclerViewManager.getIsFirstLayoutComplete()) {
|
|
50
|
+
const lastScrollOffset = recyclerViewManager.getAbsoluteLastScrollOffset();
|
|
51
|
+
const contentSize = recyclerViewManager.getChildContainerDimensions();
|
|
52
|
+
const windowSize = recyclerViewManager.getWindowSize();
|
|
53
|
+
const isHorizontal = horizontal === true;
|
|
54
|
+
// Calculate dimensions based on scroll direction
|
|
55
|
+
const visibleLength = isHorizontal ? windowSize.width : windowSize.height;
|
|
56
|
+
const contentLength = (isHorizontal ? contentSize.width : contentSize.height) +
|
|
57
|
+
recyclerViewManager.firstItemOffset;
|
|
58
|
+
// Check if we're near the end of the list
|
|
59
|
+
if (onEndReached) {
|
|
60
|
+
const onEndReachedThreshold = onEndReachedThresholdProp !== null && onEndReachedThresholdProp !== void 0 ? onEndReachedThresholdProp : 0.5;
|
|
61
|
+
const endThresholdDistance = onEndReachedThreshold * visibleLength;
|
|
62
|
+
const isNearEnd = Math.ceil(lastScrollOffset + visibleLength) >=
|
|
63
|
+
contentLength - endThresholdDistance;
|
|
64
|
+
if (isNearEnd && !pendingEndReached.current) {
|
|
65
|
+
pendingEndReached.current = true;
|
|
66
|
+
onEndReached();
|
|
67
|
+
}
|
|
68
|
+
pendingEndReached.current = isNearEnd;
|
|
69
|
+
}
|
|
70
|
+
// Check if we're near the start of the list
|
|
71
|
+
if (onStartReached) {
|
|
72
|
+
const onStartReachedThreshold = onStartReachedThresholdProp !== null && onStartReachedThresholdProp !== void 0 ? onStartReachedThresholdProp : 0.2;
|
|
73
|
+
const startThresholdDistance = onStartReachedThreshold * visibleLength;
|
|
74
|
+
const isNearStart = lastScrollOffset <= startThresholdDistance;
|
|
75
|
+
if (isNearStart && !pendingStartReached.current) {
|
|
76
|
+
pendingStartReached.current = true;
|
|
77
|
+
onStartReached();
|
|
78
|
+
}
|
|
79
|
+
pendingStartReached.current = isNearStart;
|
|
80
|
+
}
|
|
81
|
+
// Handle auto-scrolling to bottom for vertical lists
|
|
82
|
+
if (!isHorizontal && autoscrollToBottomThreshold >= 0) {
|
|
83
|
+
const autoscrollToBottomThresholdDistance = autoscrollToBottomThreshold * visibleLength;
|
|
84
|
+
const isNearBottom = Math.ceil(lastScrollOffset + visibleLength) >=
|
|
85
|
+
contentLength - autoscrollToBottomThresholdDistance;
|
|
86
|
+
if (isNearBottom) {
|
|
87
|
+
pendingAutoscrollToBottom.current = true;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
pendingAutoscrollToBottom.current = false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}, [recyclerViewManager]);
|
|
95
|
+
const runAutoScrollToBottomCheck = useCallback(() => {
|
|
96
|
+
if (pendingAutoscrollToBottom.current) {
|
|
97
|
+
pendingAutoscrollToBottom.current = false;
|
|
98
|
+
requestAnimationFrame(() => {
|
|
99
|
+
var _a, _b, _c;
|
|
100
|
+
const shouldAnimate = (_b = (_a = recyclerViewManager.props.maintainVisibleContentPosition) === null || _a === void 0 ? void 0 : _a.animateAutoScrollToBottom) !== null && _b !== void 0 ? _b : true;
|
|
101
|
+
(_c = scrollViewRef.current) === null || _c === void 0 ? void 0 : _c.scrollToEnd({
|
|
102
|
+
animated: shouldAnimate,
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}, [requestAnimationFrame, scrollViewRef, recyclerViewManager]);
|
|
107
|
+
// Reset end reached state when data changes
|
|
108
|
+
useMemo(() => {
|
|
109
|
+
pendingEndReached.current = false;
|
|
110
|
+
// needs to run only when data changes
|
|
111
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
112
|
+
}, [data]);
|
|
113
|
+
// Auto-scroll to bottom when new content is added and we're near the bottom
|
|
114
|
+
useEffect(() => {
|
|
115
|
+
runAutoScrollToBottomCheck();
|
|
116
|
+
}, [data, runAutoScrollToBottomCheck, windowHeight, windowWidth]);
|
|
117
|
+
// Since content changes frequently, we try and avoid doing the auto scroll during active scrolls
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
if (Date.now() - lastCheckBoundsTime.current >= 100) {
|
|
120
|
+
runAutoScrollToBottomCheck();
|
|
121
|
+
}
|
|
122
|
+
}, [
|
|
123
|
+
contentHeight,
|
|
124
|
+
contentWidth,
|
|
125
|
+
recyclerViewManager.firstItemOffset,
|
|
126
|
+
runAutoScrollToBottomCheck,
|
|
127
|
+
]);
|
|
128
|
+
return {
|
|
129
|
+
checkBounds,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=useBoundDetection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBoundDetection.js","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useBoundDetection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type LayoutStateSetter<T> = (newValue: T | ((prevValue: T) => T), skipParentLayout?: boolean) => void;
|
|
2
|
+
export type LayoutStateInitialValue<T> = T | (() => T);
|
|
3
|
+
/**
|
|
4
|
+
* Custom hook that combines state management with RecyclerView layout updates.
|
|
5
|
+
* This hook provides a way to manage state that affects the layout of the RecyclerView,
|
|
6
|
+
* ensuring that any state changes trigger a layout recalculation.
|
|
7
|
+
*
|
|
8
|
+
* @param initialState - The initial state value or a function that returns the initial state
|
|
9
|
+
* @returns A tuple containing:
|
|
10
|
+
* - The current state value
|
|
11
|
+
* - A setter function that updates the state and triggers a layout recalculation
|
|
12
|
+
*/
|
|
13
|
+
export declare function useLayoutState<T>(initialState: LayoutStateInitialValue<T>): [T, LayoutStateSetter<T>];
|
|
14
|
+
//# sourceMappingURL=useLayoutState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLayoutState.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useLayoutState.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CACjC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EACnC,gBAAgB,CAAC,EAAE,OAAO,KACvB,IAAI,CAAC;AAEV,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAEvD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,YAAY,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACvC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CA+B3B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { useState, useCallback } from "react";
|
|
2
|
+
import { useRecyclerViewContext } from "../RecyclerViewContextProvider";
|
|
3
|
+
/**
|
|
4
|
+
* Custom hook that combines state management with RecyclerView layout updates.
|
|
5
|
+
* This hook provides a way to manage state that affects the layout of the RecyclerView,
|
|
6
|
+
* ensuring that any state changes trigger a layout recalculation.
|
|
7
|
+
*
|
|
8
|
+
* @param initialState - The initial state value or a function that returns the initial state
|
|
9
|
+
* @returns A tuple containing:
|
|
10
|
+
* - The current state value
|
|
11
|
+
* - A setter function that updates the state and triggers a layout recalculation
|
|
12
|
+
*/
|
|
13
|
+
export function useLayoutState(initialState) {
|
|
14
|
+
// Initialize state with the provided initial value
|
|
15
|
+
const [state, setState] = useState(initialState);
|
|
16
|
+
// Get the RecyclerView context for layout management
|
|
17
|
+
const recyclerViewContext = useRecyclerViewContext();
|
|
18
|
+
/**
|
|
19
|
+
* Setter function that updates the state and triggers a layout recalculation.
|
|
20
|
+
* This ensures that any state changes that affect the layout are properly reflected
|
|
21
|
+
* in the RecyclerView's visual representation.
|
|
22
|
+
*
|
|
23
|
+
* @param newValue - Either a new state value or a function that receives the previous state
|
|
24
|
+
* and returns the new state
|
|
25
|
+
*/
|
|
26
|
+
const setLayoutState = useCallback((newValue, skipParentLayout) => {
|
|
27
|
+
// Update the state using either the new value or the result of the updater function
|
|
28
|
+
setState((prevValue) => typeof newValue === "function"
|
|
29
|
+
? newValue(prevValue)
|
|
30
|
+
: newValue);
|
|
31
|
+
if (!skipParentLayout) {
|
|
32
|
+
// Trigger a layout recalculation in the RecyclerView
|
|
33
|
+
recyclerViewContext === null || recyclerViewContext === void 0 ? void 0 : recyclerViewContext.layout();
|
|
34
|
+
}
|
|
35
|
+
}, [recyclerViewContext]);
|
|
36
|
+
return [state, setLayoutState];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=useLayoutState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLayoutState.js","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useLayoutState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,YAAwC;IAExC,mDAAmD;IACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAI,YAAY,CAAC,CAAC;IACpD,qDAAqD;IACrD,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;IAErD;;;;;;;OAOG;IACH,MAAM,cAAc,GAAyB,WAAW,CACtD,CAAC,QAAQ,EAAE,gBAAgB,EAAE,EAAE;QAC7B,oFAAoF;QACpF,QAAQ,CAAC,CAAC,SAAS,EAAE,EAAE,CACrB,OAAO,QAAQ,KAAK,UAAU;YAC5B,CAAC,CAAE,QAAgC,CAAC,SAAS,CAAC;YAC9C,CAAC,CAAC,QAAQ,CACb,CAAC;QACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,qDAAqD;YACrD,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAM,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,EACD,CAAC,mBAAmB,CAAC,CACtB,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a function that can help create a mapping key for the items.
|
|
3
|
+
* Useful when doing .map on items to create a list of components.
|
|
4
|
+
* Using this ensures that performance is optimal for FlashList
|
|
5
|
+
*/
|
|
6
|
+
export declare const useMappingHelper: () => {
|
|
7
|
+
getMappingKey: (itemKey: string | number | bigint, index: number) => string | number | bigint;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useMappingHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMappingHelper.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useMappingHelper.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;6BAGf,MAAM,GAAG,MAAM,GAAG,MAAM,SAAS,MAAM;CAOpD,CAAC"}
|