@shopify/flash-list 2.0.0 → 2.0.2-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/README.md +97 -27
- package/RNFlashList.podspec +37 -0
- package/android/build.gradle +89 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutShadow.kt +105 -0
- package/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutView.kt +158 -0
- package/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutViewManager.kt +70 -0
- package/android/src/main/kotlin/com/shopify/reactnative/flash_list/BlankAreaEvent.kt +29 -0
- package/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainer.java +16 -0
- package/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerImpl.kt +16 -0
- package/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerManager.kt +34 -0
- package/android/src/main/kotlin/com/shopify/reactnative/flash_list/FlashListPackage.kt +19 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerDelegate.java +47 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerInterface.java +21 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerDelegate.java +32 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerInterface.java +16 -0
- package/android/src/test/java/com/shopify/reactnative/flash_list/AutoLayoutShadowTest.kt +147 -0
- package/android/src/test/java/com/shopify/reactnative/flash_list/models/Rect.kt +61 -0
- package/android/src/test/java/com/shopify/reactnative/flash_list/models/TestCollection.kt +6 -0
- package/android/src/test/java/com/shopify/reactnative/flash_list/models/TestDataModel.kt +8 -0
- package/android/src/test/resources/LayoutTestData.json +788 -0
- package/dist/AnimatedFlashList.js +2 -2
- package/dist/AnimatedFlashList.js.map +1 -1
- package/dist/FlashList.d.ts +167 -1
- package/dist/FlashList.d.ts.map +1 -1
- package/dist/FlashList.js +595 -3
- package/dist/FlashList.js.map +1 -1
- package/dist/FlashListProps.d.ts +63 -2
- package/dist/FlashListProps.d.ts.map +1 -1
- package/dist/FlashListProps.js.map +1 -1
- package/dist/GridLayoutProviderWithProps.d.ts +42 -0
- package/dist/GridLayoutProviderWithProps.d.ts.map +1 -0
- package/dist/GridLayoutProviderWithProps.js +114 -0
- package/dist/GridLayoutProviderWithProps.js.map +1 -0
- package/dist/MasonryFlashList.d.ts +51 -0
- package/dist/MasonryFlashList.d.ts.map +1 -0
- package/dist/MasonryFlashList.js +252 -0
- package/dist/MasonryFlashList.js.map +1 -0
- package/dist/PureComponentWrapper.d.ts +22 -0
- package/dist/PureComponentWrapper.d.ts.map +1 -0
- package/dist/PureComponentWrapper.js +37 -0
- package/dist/PureComponentWrapper.js.map +1 -0
- package/dist/__tests__/ContentContainerUtils.test.d.ts +2 -0
- package/dist/__tests__/ContentContainerUtils.test.d.ts.map +1 -0
- package/dist/__tests__/ContentContainerUtils.test.js +85 -0
- package/dist/__tests__/ContentContainerUtils.test.js.map +1 -0
- package/dist/__tests__/FlashList.test.d.ts +2 -0
- package/dist/__tests__/FlashList.test.d.ts.map +1 -0
- package/dist/__tests__/FlashList.test.js +902 -0
- package/dist/__tests__/FlashList.test.js.map +1 -0
- package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts +2 -0
- package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts.map +1 -0
- package/dist/__tests__/GridLayoutProviderWithProps.test.js +143 -0
- package/dist/__tests__/GridLayoutProviderWithProps.test.js.map +1 -0
- package/dist/__tests__/MasonryFlashList.test.d.ts +2 -0
- package/dist/__tests__/MasonryFlashList.test.d.ts.map +1 -0
- package/dist/__tests__/MasonryFlashList.test.js +254 -0
- package/dist/__tests__/MasonryFlashList.test.js.map +1 -0
- package/dist/__tests__/PlatformHelper.web.test.d.ts +2 -0
- package/dist/__tests__/PlatformHelper.web.test.d.ts.map +1 -0
- package/dist/__tests__/PlatformHelper.web.test.js +33 -0
- package/dist/__tests__/PlatformHelper.web.test.js.map +1 -0
- package/dist/__tests__/ViewabilityHelper.test.js +4 -3
- package/dist/__tests__/ViewabilityHelper.test.js.map +1 -1
- package/dist/__tests__/helpers/mountFlashList.d.ts +19 -0
- package/dist/__tests__/helpers/mountFlashList.d.ts.map +1 -0
- package/dist/__tests__/helpers/mountFlashList.js +44 -0
- package/dist/__tests__/helpers/mountFlashList.js.map +1 -0
- package/dist/__tests__/helpers/mountMasonryFlashList.d.ts +18 -0
- package/dist/__tests__/helpers/mountMasonryFlashList.d.ts.map +1 -0
- package/dist/__tests__/helpers/mountMasonryFlashList.js +49 -0
- package/dist/__tests__/helpers/mountMasonryFlashList.js.map +1 -0
- package/dist/__tests__/useBlankAreaTracker.test.d.ts +2 -0
- package/dist/__tests__/useBlankAreaTracker.test.d.ts.map +1 -0
- package/dist/__tests__/useBlankAreaTracker.test.js +179 -0
- package/dist/__tests__/useBlankAreaTracker.test.js.map +1 -0
- package/dist/benchmark/JSFPSMonitor.d.ts.map +1 -1
- package/dist/benchmark/JSFPSMonitor.js +1 -2
- package/dist/benchmark/JSFPSMonitor.js.map +1 -1
- package/dist/benchmark/useBenchmark.d.ts +4 -2
- package/dist/benchmark/useBenchmark.d.ts.map +1 -1
- package/dist/benchmark/useBenchmark.js +24 -12
- package/dist/benchmark/useBenchmark.js.map +1 -1
- package/dist/benchmark/useBlankAreaTracker.d.ts +34 -0
- package/dist/benchmark/useBlankAreaTracker.d.ts.map +1 -0
- package/dist/benchmark/useBlankAreaTracker.js +66 -0
- package/dist/benchmark/useBlankAreaTracker.js.map +1 -0
- package/dist/benchmark/useFlatListBenchmark.d.ts.map +1 -1
- package/dist/benchmark/useFlatListBenchmark.js +1 -2
- package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
- package/dist/enableNewCore.d.ts +3 -0
- package/dist/enableNewCore.d.ts.map +1 -0
- package/dist/enableNewCore.js +25 -0
- package/dist/enableNewCore.js.map +1 -0
- package/dist/errors/CustomError.d.ts +8 -0
- package/dist/errors/CustomError.d.ts.map +1 -0
- package/dist/errors/CustomError.js +14 -0
- package/dist/errors/CustomError.js.map +1 -0
- package/dist/errors/ExceptionList.d.ts +24 -0
- package/dist/errors/ExceptionList.d.ts.map +1 -0
- package/dist/errors/ExceptionList.js +26 -0
- package/dist/errors/ExceptionList.js.map +1 -0
- package/dist/errors/Warnings.d.ts +9 -0
- package/dist/errors/Warnings.d.ts.map +1 -0
- package/dist/errors/Warnings.js +13 -0
- package/dist/errors/Warnings.js.map +1 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -7
- package/dist/index.js.map +1 -1
- package/dist/native/auto-layout/AutoLayoutView.d.ts +22 -0
- package/dist/native/auto-layout/AutoLayoutView.d.ts.map +1 -0
- package/dist/native/auto-layout/AutoLayoutView.js +48 -0
- package/dist/native/auto-layout/AutoLayoutView.js.map +1 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts +4 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts.map +1 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js +6 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js.map +1 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts +5 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts.map +1 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts +4 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts.map +1 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js +6 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js.map +1 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js +6 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js.map +1 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts +16 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts.map +1 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js +3 -0
- package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js.map +1 -0
- package/dist/native/cell-container/CellContainer.android.d.ts +6 -0
- package/dist/native/cell-container/CellContainer.android.d.ts.map +1 -0
- package/dist/native/cell-container/CellContainer.android.js +9 -0
- package/dist/native/cell-container/CellContainer.android.js.map +1 -0
- package/dist/native/cell-container/CellContainer.d.ts +8 -0
- package/dist/native/cell-container/CellContainer.d.ts.map +1 -0
- package/dist/native/cell-container/CellContainer.ios.d.ts +6 -0
- package/dist/native/cell-container/CellContainer.ios.d.ts.map +1 -0
- package/dist/native/cell-container/CellContainer.ios.js +9 -0
- package/dist/native/cell-container/CellContainer.ios.js.map +1 -0
- package/dist/native/cell-container/CellContainer.js +11 -0
- package/dist/native/cell-container/CellContainer.js.map +1 -0
- package/dist/native/cell-container/CellContainer.web.d.ts +7 -0
- package/dist/native/cell-container/CellContainer.web.d.ts.map +1 -0
- package/dist/native/cell-container/CellContainer.web.js +13 -0
- package/dist/native/cell-container/CellContainer.web.js.map +1 -0
- package/dist/native/config/PlatformHelper.android.d.ts +22 -1
- package/dist/native/config/PlatformHelper.android.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.android.js +16 -1
- package/dist/native/config/PlatformHelper.android.js.map +1 -1
- package/dist/native/config/PlatformHelper.d.ts +22 -1
- package/dist/native/config/PlatformHelper.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.ios.d.ts +22 -1
- package/dist/native/config/PlatformHelper.ios.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.ios.js +15 -1
- package/dist/native/config/PlatformHelper.ios.js.map +1 -1
- package/dist/native/config/PlatformHelper.js +16 -1
- package/dist/native/config/PlatformHelper.js.map +1 -1
- package/dist/native/config/PlatformHelper.web.d.ts +23 -1
- package/dist/native/config/PlatformHelper.web.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.web.js +18 -1
- package/dist/native/config/PlatformHelper.web.js.map +1 -1
- package/dist/recyclerview/RecyclerView.d.ts.map +1 -1
- package/dist/recyclerview/RecyclerView.js +6 -6
- package/dist/recyclerview/RecyclerView.js.map +1 -1
- package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -1
- package/dist/recyclerview/RecyclerViewManager.js +8 -9
- package/dist/recyclerview/RecyclerViewManager.js.map +1 -1
- package/dist/recyclerview/RecyclerViewProps.d.ts +8 -1
- package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -1
- package/dist/recyclerview/helpers/RenderTimeTracker.d.ts +3 -0
- package/dist/recyclerview/helpers/RenderTimeTracker.d.ts.map +1 -1
- package/dist/recyclerview/helpers/RenderTimeTracker.js +7 -0
- package/dist/recyclerview/helpers/RenderTimeTracker.js.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewController.js +0 -4
- package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -1
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -1
- package/dist/recyclerview/layout-managers/LayoutManager.js +1 -2
- package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -1
- package/dist/specs/AutoLayoutNativeComponent.d.ts +18 -0
- package/dist/specs/AutoLayoutNativeComponent.d.ts.map +1 -0
- package/dist/specs/AutoLayoutNativeComponent.js +6 -0
- package/dist/specs/AutoLayoutNativeComponent.js.map +1 -0
- package/dist/specs/CellContainerNativeComponent.d.ts +8 -0
- package/dist/specs/CellContainerNativeComponent.d.ts.map +1 -0
- package/dist/specs/CellContainerNativeComponent.js +6 -0
- package/dist/specs/CellContainerNativeComponent.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/ContentContainerUtils.d.ts +27 -0
- package/dist/utils/ContentContainerUtils.d.ts.map +1 -0
- package/dist/utils/ContentContainerUtils.js +48 -0
- package/dist/utils/ContentContainerUtils.js.map +1 -0
- package/dist/viewability/ViewToken.d.ts.map +1 -0
- package/dist/viewability/ViewToken.js.map +1 -0
- package/dist/{recyclerview/viewability → viewability}/ViewabilityHelper.d.ts +2 -2
- package/dist/viewability/ViewabilityHelper.d.ts.map +1 -0
- package/dist/{recyclerview/viewability → viewability}/ViewabilityHelper.js +4 -2
- package/dist/{recyclerview/viewability → viewability}/ViewabilityHelper.js.map +1 -1
- package/dist/{recyclerview/viewability → viewability}/ViewabilityManager.d.ts +3 -3
- package/dist/viewability/ViewabilityManager.d.ts.map +1 -0
- package/dist/{recyclerview/viewability → viewability}/ViewabilityManager.js +16 -16
- package/dist/viewability/ViewabilityManager.js.map +1 -0
- package/ios/RNFlashList.xcodeproj/project.pbxproj +3 -0
- package/ios/RNFlashList.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
- package/ios/Sources/AutoLayoutView.swift +294 -0
- package/ios/Sources/AutoLayoutViewComponentView.h +16 -0
- package/ios/Sources/AutoLayoutViewComponentView.mm +90 -0
- package/ios/Sources/AutoLayoutViewManager.mm +14 -0
- package/ios/Sources/AutoLayoutViewManager.swift +12 -0
- package/ios/Sources/CellContainerComponentView.h +18 -0
- package/ios/Sources/CellContainerComponentView.mm +62 -0
- package/ios/Sources/CellContainerManager.mm +8 -0
- package/ios/Sources/CellContainerManager.swift +12 -0
- package/ios/Sources/FlatListPro-Bridging-Header.h +11 -0
- package/ios/Tests/AutoLayoutViewTests.swift +113 -0
- package/package.json +14 -3
- package/src/AnimatedFlashList.ts +2 -2
- package/src/FlashList.tsx +953 -0
- package/src/FlashListProps.ts +79 -3
- package/src/GridLayoutProviderWithProps.ts +180 -0
- package/src/MasonryFlashList.tsx +476 -0
- package/src/PureComponentWrapper.tsx +42 -0
- package/src/__tests__/ContentContainerUtils.test.ts +130 -0
- package/src/__tests__/FlashList.test.tsx +1001 -0
- package/src/__tests__/GridLayoutProviderWithProps.test.ts +179 -0
- package/src/__tests__/MasonryFlashList.test.ts +292 -0
- package/src/__tests__/PlatformHelper.web.test.ts +45 -0
- package/src/__tests__/ViewabilityHelper.test.ts +14 -13
- package/src/__tests__/helpers/mountFlashList.tsx +62 -0
- package/src/__tests__/helpers/mountMasonryFlashList.tsx +70 -0
- package/src/__tests__/useBlankAreaTracker.test.tsx +206 -0
- package/src/benchmark/JSFPSMonitor.ts +3 -3
- package/src/benchmark/useBenchmark.ts +40 -12
- package/src/benchmark/useBlankAreaTracker.ts +117 -0
- package/src/benchmark/useFlatListBenchmark.ts +1 -3
- package/src/enableNewCore.ts +24 -0
- package/src/errors/CustomError.ts +10 -0
- package/src/errors/ExceptionList.ts +28 -0
- package/src/errors/Warnings.ts +15 -0
- package/src/index.ts +43 -7
- package/src/native/auto-layout/AutoLayoutView.tsx +73 -0
- package/src/native/auto-layout/AutoLayoutViewNativeComponent.android.ts +7 -0
- package/src/native/auto-layout/AutoLayoutViewNativeComponent.ios.ts +7 -0
- package/src/native/auto-layout/AutoLayoutViewNativeComponent.ts +7 -0
- package/src/native/auto-layout/AutoLayoutViewNativeComponentProps.ts +17 -0
- package/src/native/cell-container/CellContainer.android.ts +7 -0
- package/src/native/cell-container/CellContainer.ios.ts +7 -0
- package/src/native/cell-container/CellContainer.tsx +14 -0
- package/src/native/cell-container/CellContainer.web.tsx +9 -0
- package/src/native/config/PlatformHelper.android.ts +25 -1
- package/src/native/config/PlatformHelper.ios.ts +24 -1
- package/src/native/config/PlatformHelper.ts +25 -1
- package/src/native/config/PlatformHelper.web.ts +30 -1
- package/src/recyclerview/RecyclerView.tsx +11 -6
- package/src/recyclerview/RecyclerViewManager.ts +18 -9
- package/src/recyclerview/RecyclerViewProps.ts +11 -1
- package/src/recyclerview/helpers/RenderTimeTracker.ts +8 -0
- package/src/recyclerview/hooks/useRecyclerViewController.tsx +0 -4
- package/src/recyclerview/layout-managers/LayoutManager.ts +1 -2
- package/src/specs/AutoLayoutNativeComponent.ts +24 -0
- package/src/specs/CellContainerNativeComponent.ts +9 -0
- package/src/utils/ContentContainerUtils.ts +92 -0
- package/src/{recyclerview/viewability → viewability}/ViewabilityHelper.ts +9 -8
- package/src/{recyclerview/viewability → viewability}/ViewabilityManager.ts +20 -18
- package/dist/errors/ErrorMessages.d.ts +0 -16
- package/dist/errors/ErrorMessages.d.ts.map +0 -1
- package/dist/errors/ErrorMessages.js +0 -19
- package/dist/errors/ErrorMessages.js.map +0 -1
- package/dist/errors/WarningMessages.d.ts +0 -4
- package/dist/errors/WarningMessages.d.ts.map +0 -1
- package/dist/errors/WarningMessages.js +0 -7
- package/dist/errors/WarningMessages.js.map +0 -1
- package/dist/isNewArch.d.ts +0 -2
- package/dist/isNewArch.d.ts.map +0 -1
- package/dist/isNewArch.js +0 -25
- package/dist/isNewArch.js.map +0 -1
- package/dist/recyclerview/viewability/ViewToken.d.ts.map +0 -1
- package/dist/recyclerview/viewability/ViewToken.js.map +0 -1
- package/dist/recyclerview/viewability/ViewabilityHelper.d.ts.map +0 -1
- package/dist/recyclerview/viewability/ViewabilityManager.d.ts.map +0 -1
- package/dist/recyclerview/viewability/ViewabilityManager.js.map +0 -1
- package/src/FlashList.ts +0 -1
- package/src/errors/ErrorMessages.ts +0 -26
- package/src/errors/WarningMessages.ts +0 -4
- package/src/isNewArch.ts +0 -25
- /package/dist/{recyclerview/viewability → viewability}/ViewToken.d.ts +0 -0
- /package/dist/{recyclerview/viewability → viewability}/ViewToken.js +0 -0
- /package/src/{recyclerview/viewability → viewability}/ViewToken.ts +0 -0
package/dist/FlashListProps.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type React from "react";
|
|
2
2
|
import { StyleProp, ScrollViewProps, ViewabilityConfig, ViewStyle } from "react-native";
|
|
3
|
-
import
|
|
3
|
+
import { BlankAreaEventHandler } from "./native/auto-layout/AutoLayoutView";
|
|
4
|
+
import ViewToken from "./viewability/ViewToken";
|
|
4
5
|
export interface ListRenderItemInfo<TItem> {
|
|
5
6
|
item: TItem;
|
|
6
7
|
index: number;
|
|
@@ -20,6 +21,7 @@ export interface OverrideProps {
|
|
|
20
21
|
export type RenderTarget = "Cell" | "StickyHeader" | "Measurement";
|
|
21
22
|
export declare const RenderTargetOptions: Record<string, RenderTarget>;
|
|
22
23
|
export type ListRenderItem<TItem> = (info: ListRenderItemInfo<TItem>) => React.ReactElement | null;
|
|
24
|
+
export type ContentStyle = Pick<ViewStyle, "backgroundColor" | "paddingTop" | "paddingLeft" | "paddingRight" | "paddingBottom" | "padding" | "paddingVertical" | "paddingHorizontal">;
|
|
23
25
|
export interface ViewabilityConfigCallbackPair<TItem> {
|
|
24
26
|
viewabilityConfig: ViewabilityConfig;
|
|
25
27
|
onViewableItemsChanged: ((info: {
|
|
@@ -49,6 +51,13 @@ export interface FlashListProps<TItem> extends Omit<ScrollViewProps, "maintainVi
|
|
|
49
51
|
* For simplicity, data is a plain array of items of a given type.
|
|
50
52
|
*/
|
|
51
53
|
data: ReadonlyArray<TItem> | null | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Average or median size for elements in the list. Doesn't have to be very accurate but a good estimate can improve performance.
|
|
56
|
+
* A quick look at `Element Inspector` can help you determine this. If you're confused between two values, the smaller value is a better choice.
|
|
57
|
+
* For vertical lists provide average height and for horizontal average width.
|
|
58
|
+
* Read more about it here: https://shopify.github.io/flash-list/docs/estimated-item-size
|
|
59
|
+
*/
|
|
60
|
+
estimatedItemSize?: number;
|
|
52
61
|
/**
|
|
53
62
|
* Each cell is rendered using this element.
|
|
54
63
|
* Can be a React Component Class, or a render function.
|
|
@@ -95,10 +104,29 @@ export interface FlashListProps<TItem> extends Omit<ScrollViewProps, "maintainVi
|
|
|
95
104
|
* Rendered as the main scrollview.
|
|
96
105
|
*/
|
|
97
106
|
renderScrollComponent?: React.ComponentType<ScrollViewProps> | React.FC<ScrollViewProps>;
|
|
107
|
+
/**
|
|
108
|
+
* You can use `contentContainerStyle` to apply padding that will be applied to the whole content itself.
|
|
109
|
+
* For example, you can apply this padding, so that all of your items have leading and trailing space.
|
|
110
|
+
*/
|
|
111
|
+
contentContainerStyle?: ContentStyle;
|
|
98
112
|
/**
|
|
99
113
|
* Draw distance for advanced rendering (in dp/px)
|
|
100
114
|
*/
|
|
101
115
|
drawDistance?: number;
|
|
116
|
+
/**
|
|
117
|
+
* Specifies how far the first item is drawn from start of the list window or, offset of the first item of the list (not the header).
|
|
118
|
+
* Needed if you're using initialScrollIndex prop. Before the initial draw the list cannot figure out the size of header or, any special margin/padding that might have been applied
|
|
119
|
+
* using header styles etc.
|
|
120
|
+
* If this isn't provided initialScrollIndex might not scroll to the provided index.
|
|
121
|
+
*/
|
|
122
|
+
estimatedFirstItemOffset?: number;
|
|
123
|
+
/**
|
|
124
|
+
* Visible height and width of the list. This is not the scroll content size.
|
|
125
|
+
*/
|
|
126
|
+
estimatedListSize?: {
|
|
127
|
+
height: number;
|
|
128
|
+
width: number;
|
|
129
|
+
};
|
|
102
130
|
/**
|
|
103
131
|
* A marker property for telling the list to re-render (since it implements PureComponent).
|
|
104
132
|
* If any of your `renderItem`, Header, Footer, etc. functions depend on anything outside of the `data` prop,
|
|
@@ -113,6 +141,10 @@ export interface FlashListProps<TItem> extends Omit<ScrollViewProps, "maintainVi
|
|
|
113
141
|
* Instead of starting at the top with the first item, start at initialScrollIndex.
|
|
114
142
|
*/
|
|
115
143
|
initialScrollIndex?: number | null | undefined;
|
|
144
|
+
/**
|
|
145
|
+
* Reverses the direction of scroll. Uses scale transforms of -1.
|
|
146
|
+
*/
|
|
147
|
+
inverted?: boolean | null | undefined;
|
|
116
148
|
/**
|
|
117
149
|
* Used to extract a unique key for a given item at the specified index.
|
|
118
150
|
* Key is used for optimizing performance. Defining `keyExtractor` is also necessary
|
|
@@ -125,6 +157,17 @@ export interface FlashListProps<TItem> extends Omit<ScrollViewProps, "maintainVi
|
|
|
125
157
|
* Items should all be the same height - masonry layouts are not supported.
|
|
126
158
|
*/
|
|
127
159
|
numColumns?: number | undefined;
|
|
160
|
+
/**
|
|
161
|
+
* Computes blank space that is visible to the user during scroll or list load. If list doesn't have enough items to fill the screen even then this will be raised.
|
|
162
|
+
* Values reported: {
|
|
163
|
+
* offsetStart -> visible blank space on top of the screen (while going up). If value is greater than 0 then it's visible to user.
|
|
164
|
+
* offsetEnd -> visible blank space at the end of the screen (while going down). If value is greater than 0 then it's visible to user.
|
|
165
|
+
* blankArea -> max(offsetStart, offsetEnd) use this directly and look for values > 0
|
|
166
|
+
* }
|
|
167
|
+
* Please note that this event isn't synced with onScroll event but works with native onDraw/layoutSubviews. Events with values > 0 are blanks.
|
|
168
|
+
* This event is raised even when there is no visible blank with negative values for extensibility however, for most use cases check blankArea > 0 and use the value.
|
|
169
|
+
*/
|
|
170
|
+
onBlankArea?: BlankAreaEventHandler;
|
|
128
171
|
/**
|
|
129
172
|
* Called once when the scroll position gets within onEndReachedThreshold of the rendered content.
|
|
130
173
|
*/
|
|
@@ -169,7 +212,11 @@ export interface FlashListProps<TItem> extends Omit<ScrollViewProps, "maintainVi
|
|
|
169
212
|
*/
|
|
170
213
|
getItemType?: (item: TItem, index: number, extraData?: any) => string | number | undefined;
|
|
171
214
|
/**
|
|
172
|
-
* This method can be used to change column span of an item.
|
|
215
|
+
* This method can be used to provide explicit size estimates or change column span of an item.
|
|
216
|
+
*
|
|
217
|
+
* Providing specific estimates is a good idea when you can calculate sizes reliably. FlashList will prefer this value over `estimatedItemSize` for that specific item.
|
|
218
|
+
* Precise estimates will also improve precision of `scrollToIndex` method and `initialScrollIndex` prop. If you have a `separator` below your items you can include its size in the estimate.
|
|
219
|
+
*
|
|
173
220
|
* Changing item span is useful when you have grid layouts (numColumns > 1) and you want few items to be bigger than the rest.
|
|
174
221
|
*
|
|
175
222
|
* Modify the given layout. Do not return. FlashList will fallback to default values if this is ignored.
|
|
@@ -178,6 +225,7 @@ export interface FlashListProps<TItem> extends Omit<ScrollViewProps, "maintainVi
|
|
|
178
225
|
*/
|
|
179
226
|
overrideItemLayout?: (layout: {
|
|
180
227
|
span?: number;
|
|
228
|
+
size?: number;
|
|
181
229
|
}, item: TItem, index: number, maxColumns: number, extraData?: any) => void;
|
|
182
230
|
/**
|
|
183
231
|
* For debugging and exception use cases, internal props will be overriden with these values if used
|
|
@@ -203,6 +251,19 @@ export interface FlashListProps<TItem> extends Omit<ScrollViewProps, "maintainVi
|
|
|
203
251
|
* A specific `onViewableItemsChanged` will be called when its corresponding `ViewabilityConfig`'s conditions are met.
|
|
204
252
|
*/
|
|
205
253
|
viewabilityConfigCallbackPairs?: ViewabilityConfigCallbackPairs<TItem> | undefined;
|
|
254
|
+
/**
|
|
255
|
+
* FlashList attempts to measure size of horizontal lists by drawing an extra list item in advance. This can sometimes cause issues when used with `initialScrollIndex` in lists
|
|
256
|
+
* with very little content. You might see some amount of over scroll. When set to true the list's rendered size needs to be deterministic (i.e., height and width greater than 0)
|
|
257
|
+
* as FlashList will skip rendering the extra item for measurement. Default value is `false`.
|
|
258
|
+
*/
|
|
259
|
+
disableHorizontalListHeightMeasurement?: boolean;
|
|
260
|
+
/**
|
|
261
|
+
* FlashList applies some fixes to layouts of its children which can conflict with custom `CellRendererComponent`
|
|
262
|
+
* implementations. You can disable this behavior by setting this to `true`.
|
|
263
|
+
* Recommendation: Set this to `true` while you apply special behavior to the `CellRendererComponent`. Once done set this to
|
|
264
|
+
* `false` again.
|
|
265
|
+
*/
|
|
266
|
+
disableAutoLayout?: boolean;
|
|
206
267
|
/**
|
|
207
268
|
* New arch only
|
|
208
269
|
* Maximum number of items in the recycle pool. These are the items that are cached in the recycle pool when they are scrolled off the screen.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlashListProps.d.ts","sourceRoot":"","sources":["../src/FlashListProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAO,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"FlashListProps.d.ts","sourceRoot":"","sources":["../src/FlashListProps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlashListProps.js","sourceRoot":"","sources":["../src/FlashListProps.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"FlashListProps.js","sourceRoot":"","sources":["../src/FlashListProps.ts"],"names":[],"mappings":";;;AAgCa,QAAA,mBAAmB,GAAiC;IAC/D,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa;CAC3B,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Dimension, GridLayoutProvider, Layout, LayoutManager } from "recyclerlistview";
|
|
2
|
+
import { FlashListProps } from "./FlashListProps";
|
|
3
|
+
export default class GridLayoutProviderWithProps<T> extends GridLayoutProvider {
|
|
4
|
+
private props;
|
|
5
|
+
private layoutObject;
|
|
6
|
+
private averageWindow;
|
|
7
|
+
private renderWindowInsets;
|
|
8
|
+
private _hasExpired;
|
|
9
|
+
defaultEstimatedItemSize: number;
|
|
10
|
+
constructor(maxSpan: number, getLayoutType: (index: number, props: FlashListProps<T>, mutableLayout: {
|
|
11
|
+
span?: number;
|
|
12
|
+
size?: number;
|
|
13
|
+
}) => string | number, getSpan: (index: number, props: FlashListProps<T>, mutableLayout: {
|
|
14
|
+
span?: number;
|
|
15
|
+
size?: number;
|
|
16
|
+
}) => number, getHeightOrWidth: (index: number, props: FlashListProps<T>, mutableLayout: {
|
|
17
|
+
span?: number;
|
|
18
|
+
size?: number;
|
|
19
|
+
}) => number | undefined, props: FlashListProps<T>, acceptableRelayoutDelta?: number);
|
|
20
|
+
updateProps(props: FlashListProps<T>): GridLayoutProviderWithProps<T>;
|
|
21
|
+
/**
|
|
22
|
+
* This methods returns true if the layout provider has expired and needs to be recreated.
|
|
23
|
+
* This can happen if the number of columns has changed or the render window size has changed in a way that cannot be handled by the layout provider internally.
|
|
24
|
+
*/
|
|
25
|
+
get hasExpired(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Calling this method will mark the layout provider as expired. As a result, a new one will be created by FlashList and old cached layouts will be discarded.
|
|
28
|
+
*/
|
|
29
|
+
markExpired(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Calling this method will help the layout provider track average item sizes on its own
|
|
32
|
+
* Overriding layout manager can help achieve the same thing without relying on this method being called however, it will make implementation very complex for a simple use case
|
|
33
|
+
* @param index Index of the item being reported
|
|
34
|
+
*/
|
|
35
|
+
reportItemLayout(index: number): void;
|
|
36
|
+
get averageItemSize(): number;
|
|
37
|
+
newLayoutManager(renderWindowSize: Dimension, isHorizontal?: boolean, cachedLayouts?: Layout[]): LayoutManager;
|
|
38
|
+
private updateCachedDimensions;
|
|
39
|
+
private getCleanLayoutObj;
|
|
40
|
+
private getAdjustedRenderWindowSize;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=GridLayoutProviderWithProps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridLayoutProviderWithProps.d.ts","sourceRoot":"","sources":["../src/GridLayoutProviderWithProps.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,MAAM,EACN,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,MAAM,CAAC,OAAO,OAAO,2BAA2B,CAAC,CAAC,CAAE,SAAQ,kBAAkB;IAC5E,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAAsC;IAChE,OAAO,CAAC,WAAW,CAAS;IACrB,wBAAwB,SAAO;gBAGpC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,CACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EACxB,aAAa,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAC5C,MAAM,GAAG,MAAM,EACpB,OAAO,EAAE,CACP,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EACxB,aAAa,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAC5C,MAAM,EACX,gBAAgB,EAAE,CAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EACxB,aAAa,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAC5C,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EACxB,uBAAuB,CAAC,EAAE,MAAM;IA6B3B,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,2BAA2B,CAAC,CAAC,CAAC;IAmB5E;;;OAGG;IACH,IAAW,UAAU,YAEpB;IAED;;OAEG;IACI,WAAW;IAIlB;;;;OAIG;IACI,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAYrC,IAAW,eAAe,WAEzB;IAEM,gBAAgB,CACrB,gBAAgB,EAAE,SAAS,EAC3B,YAAY,CAAC,EAAE,OAAO,EACtB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,aAAa;IA0BhB,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,2BAA2B;CAOpC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var recyclerlistview_1 = require("recyclerlistview");
|
|
5
|
+
var AverageWindow_1 = require("./utils/AverageWindow");
|
|
6
|
+
var ContentContainerUtils_1 = require("./utils/ContentContainerUtils");
|
|
7
|
+
var GridLayoutProviderWithProps = /** @class */ (function (_super) {
|
|
8
|
+
tslib_1.__extends(GridLayoutProviderWithProps, _super);
|
|
9
|
+
function GridLayoutProviderWithProps(maxSpan, getLayoutType, getSpan, getHeightOrWidth, props, acceptableRelayoutDelta) {
|
|
10
|
+
var _a;
|
|
11
|
+
var _this = _super.call(this, maxSpan, function (i) {
|
|
12
|
+
return getLayoutType(i, _this.props, _this.getCleanLayoutObj());
|
|
13
|
+
}, function (i) {
|
|
14
|
+
return getSpan(i, _this.props, _this.getCleanLayoutObj());
|
|
15
|
+
}, function (i) {
|
|
16
|
+
var _a;
|
|
17
|
+
return (
|
|
18
|
+
// Using average item size if no override has been provided by the developer
|
|
19
|
+
(_a = getHeightOrWidth(i, _this.props, _this.getCleanLayoutObj())) !== null && _a !== void 0 ? _a : _this.averageItemSize);
|
|
20
|
+
}, acceptableRelayoutDelta) || this;
|
|
21
|
+
_this.layoutObject = { span: undefined, size: undefined };
|
|
22
|
+
_this.renderWindowInsets = { width: 0, height: 0 };
|
|
23
|
+
_this._hasExpired = false;
|
|
24
|
+
_this.defaultEstimatedItemSize = 100;
|
|
25
|
+
_this.props = props;
|
|
26
|
+
_this.averageWindow = new AverageWindow_1.AverageWindow(1, (_a = props.estimatedItemSize) !== null && _a !== void 0 ? _a : _this.defaultEstimatedItemSize);
|
|
27
|
+
_this.renderWindowInsets = _this.getAdjustedRenderWindowSize(_this.renderWindowInsets);
|
|
28
|
+
return _this;
|
|
29
|
+
}
|
|
30
|
+
GridLayoutProviderWithProps.prototype.updateProps = function (props) {
|
|
31
|
+
var newInsetValues = (0, ContentContainerUtils_1.applyContentContainerInsetForLayoutManager)({
|
|
32
|
+
height: 0,
|
|
33
|
+
width: 0,
|
|
34
|
+
}, props.contentContainerStyle, Boolean(props.horizontal));
|
|
35
|
+
this._hasExpired =
|
|
36
|
+
this._hasExpired ||
|
|
37
|
+
this.props.numColumns !== props.numColumns ||
|
|
38
|
+
newInsetValues.height !== this.renderWindowInsets.height ||
|
|
39
|
+
newInsetValues.width !== this.renderWindowInsets.width;
|
|
40
|
+
this.renderWindowInsets = newInsetValues;
|
|
41
|
+
this.props = props;
|
|
42
|
+
return this;
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(GridLayoutProviderWithProps.prototype, "hasExpired", {
|
|
45
|
+
/**
|
|
46
|
+
* This methods returns true if the layout provider has expired and needs to be recreated.
|
|
47
|
+
* This can happen if the number of columns has changed or the render window size has changed in a way that cannot be handled by the layout provider internally.
|
|
48
|
+
*/
|
|
49
|
+
get: function () {
|
|
50
|
+
return this._hasExpired;
|
|
51
|
+
},
|
|
52
|
+
enumerable: false,
|
|
53
|
+
configurable: true
|
|
54
|
+
});
|
|
55
|
+
/**
|
|
56
|
+
* Calling this method will mark the layout provider as expired. As a result, a new one will be created by FlashList and old cached layouts will be discarded.
|
|
57
|
+
*/
|
|
58
|
+
GridLayoutProviderWithProps.prototype.markExpired = function () {
|
|
59
|
+
this._hasExpired = true;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Calling this method will help the layout provider track average item sizes on its own
|
|
63
|
+
* Overriding layout manager can help achieve the same thing without relying on this method being called however, it will make implementation very complex for a simple use case
|
|
64
|
+
* @param index Index of the item being reported
|
|
65
|
+
*/
|
|
66
|
+
GridLayoutProviderWithProps.prototype.reportItemLayout = function (index) {
|
|
67
|
+
var _a;
|
|
68
|
+
var layout = (_a = this.getLayoutManager()) === null || _a === void 0 ? void 0 : _a.getLayouts()[index];
|
|
69
|
+
if (layout) {
|
|
70
|
+
// For the same index we can now return different estimates because average is updated in realtime
|
|
71
|
+
// Marking the layout as overridden will help layout manager avoid using the average after initial measurement
|
|
72
|
+
layout.isOverridden = true;
|
|
73
|
+
this.averageWindow.addValue(this.props.horizontal ? layout.width : layout.height);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
Object.defineProperty(GridLayoutProviderWithProps.prototype, "averageItemSize", {
|
|
77
|
+
get: function () {
|
|
78
|
+
return this.averageWindow.currentValue;
|
|
79
|
+
},
|
|
80
|
+
enumerable: false,
|
|
81
|
+
configurable: true
|
|
82
|
+
});
|
|
83
|
+
GridLayoutProviderWithProps.prototype.newLayoutManager = function (renderWindowSize, isHorizontal, cachedLayouts) {
|
|
84
|
+
var _a;
|
|
85
|
+
// Average window is updated whenever a new layout manager is created. This is because old values are not relevant anymore.
|
|
86
|
+
var estimatedItemCount = Math.max(3, Math.round((this.props.horizontal
|
|
87
|
+
? renderWindowSize.width
|
|
88
|
+
: renderWindowSize.height) /
|
|
89
|
+
((_a = this.props.estimatedItemSize) !== null && _a !== void 0 ? _a : this.defaultEstimatedItemSize)));
|
|
90
|
+
this.averageWindow = new AverageWindow_1.AverageWindow(2 * (this.props.numColumns || 1) * estimatedItemCount, this.averageWindow.currentValue);
|
|
91
|
+
var newLayoutManager = _super.prototype.newLayoutManager.call(this, this.getAdjustedRenderWindowSize(renderWindowSize), isHorizontal, cachedLayouts);
|
|
92
|
+
if (cachedLayouts) {
|
|
93
|
+
this.updateCachedDimensions(cachedLayouts, newLayoutManager);
|
|
94
|
+
}
|
|
95
|
+
return newLayoutManager;
|
|
96
|
+
};
|
|
97
|
+
GridLayoutProviderWithProps.prototype.updateCachedDimensions = function (cachedLayouts, layoutManager) {
|
|
98
|
+
var layoutCount = cachedLayouts.length;
|
|
99
|
+
for (var i = 0; i < layoutCount; i++) {
|
|
100
|
+
cachedLayouts[i] = tslib_1.__assign(tslib_1.__assign({}, cachedLayouts[i]), layoutManager.getStyleOverridesForIndex(i));
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
GridLayoutProviderWithProps.prototype.getCleanLayoutObj = function () {
|
|
104
|
+
this.layoutObject.size = undefined;
|
|
105
|
+
this.layoutObject.span = undefined;
|
|
106
|
+
return this.layoutObject;
|
|
107
|
+
};
|
|
108
|
+
GridLayoutProviderWithProps.prototype.getAdjustedRenderWindowSize = function (renderWindowSize) {
|
|
109
|
+
return (0, ContentContainerUtils_1.applyContentContainerInsetForLayoutManager)(tslib_1.__assign({}, renderWindowSize), this.props.contentContainerStyle, Boolean(this.props.horizontal));
|
|
110
|
+
};
|
|
111
|
+
return GridLayoutProviderWithProps;
|
|
112
|
+
}(recyclerlistview_1.GridLayoutProvider));
|
|
113
|
+
exports.default = GridLayoutProviderWithProps;
|
|
114
|
+
//# sourceMappingURL=GridLayoutProviderWithProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridLayoutProviderWithProps.js","sourceRoot":"","sources":["../src/GridLayoutProviderWithProps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { NativeScrollEvent } from "react-native";
|
|
3
|
+
import FlashList from "./FlashList";
|
|
4
|
+
import { FlashListProps, ListRenderItemInfo } from "./FlashListProps";
|
|
5
|
+
export interface MasonryListRenderItemInfo<TItem> extends ListRenderItemInfo<TItem> {
|
|
6
|
+
columnSpan: number;
|
|
7
|
+
columnIndex: number;
|
|
8
|
+
}
|
|
9
|
+
export type MasonryListRenderItem<TItem> = (info: MasonryListRenderItemInfo<TItem>) => React.ReactElement | null;
|
|
10
|
+
export interface MasonryFlashListProps<T> extends Omit<FlashListProps<T>, "horizontal" | "initialScrollIndex" | "inverted" | "onBlankArea" | "renderItem" | "viewabilityConfigCallbackPairs"> {
|
|
11
|
+
/**
|
|
12
|
+
* Allows you to change the column widths of the list. This is helpful if you want some columns to be wider than the others.
|
|
13
|
+
* e.g, if `numColumns` is `3`, you can return `2` for `index 1` and `1` for the rest to achieve a `1:2:1` split by width.
|
|
14
|
+
*/
|
|
15
|
+
getColumnFlex?: (items: MasonryListItem<T>[], columnIndex: number, maxColumns: number, extraData?: any) => number;
|
|
16
|
+
/**
|
|
17
|
+
* If enabled, MasonryFlashList will try to reduce difference in column height by modifying item order.
|
|
18
|
+
* `overrideItemLayout` is required to make this work.
|
|
19
|
+
*/
|
|
20
|
+
optimizeItemArrangement?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Extends typical `renderItem` to include `columnIndex` and `columnSpan` (number of columns the item spans).
|
|
23
|
+
* `columnIndex` gives the consumer column information in case they might need to treat items differently based on column.
|
|
24
|
+
* This information may not otherwise be derived if using the `optimizeItemArrangement` feature, as the items will no
|
|
25
|
+
* longer be linearly distributed across the columns; instead they are allocated to the column with the least estimated height.
|
|
26
|
+
*/
|
|
27
|
+
renderItem: MasonryListRenderItem<T> | null | undefined;
|
|
28
|
+
}
|
|
29
|
+
export interface MasonryFlashListScrollEvent extends NativeScrollEvent {
|
|
30
|
+
doNotPropagate?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface MasonryListItem<T> {
|
|
33
|
+
originalIndex: number;
|
|
34
|
+
originalItem: T;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* MasonryFlashListRef with support for scroll related methods
|
|
38
|
+
*/
|
|
39
|
+
export interface MasonryFlashListRef<T> {
|
|
40
|
+
scrollToOffset: FlashList<T>["scrollToOffset"];
|
|
41
|
+
scrollToEnd: FlashList<T>["scrollToEnd"];
|
|
42
|
+
getScrollableNode: FlashList<T>["getScrollableNode"];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* FlashList variant that enables rendering of masonry layouts.
|
|
46
|
+
* If you want `MasonryFlashList` to optimize item arrangement, enable `optimizeItemArrangement` and pass a valid `overrideItemLayout` function.
|
|
47
|
+
*/
|
|
48
|
+
export declare const MasonryFlashList: <T>(props: MasonryFlashListProps<T> & {
|
|
49
|
+
ref?: React.RefObject<MasonryFlashListRef<T>>;
|
|
50
|
+
}) => React.ReactElement;
|
|
51
|
+
//# sourceMappingURL=MasonryFlashList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MasonryFlashList.d.ts","sourceRoot":"","sources":["../src/MasonryFlashList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AACvE,OAAO,EAKL,iBAAiB,EAElB,MAAM,cAAc,CAAC;AAItB,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAItE,MAAM,WAAW,yBAAyB,CAAC,KAAK,CAC9C,SAAQ,kBAAkB,CAAC,KAAK,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,qBAAqB,CAAC,KAAK,IAAI,CACzC,IAAI,EAAE,yBAAyB,CAAC,KAAK,CAAC,KACnC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAE/B,MAAM,WAAW,qBAAqB,CAAC,CAAC,CACtC,SAAQ,IAAI,CACV,cAAc,CAAC,CAAC,CAAC,EACf,YAAY,GACZ,oBAAoB,GACpB,UAAU,GACV,aAAa,GACb,YAAY,GACZ,gCAAgC,CACnC;IACD;;;OAGG;IACH,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,EAC3B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,GAAG,KACZ,MAAM,CAAC;IAEZ;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;;OAKG;IACH,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;CACzD;AAKD,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC/C,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACzC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;CACtD;AAiYD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAgC,CAAC,CAAC,EAC7D,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG;IAChC,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C,KACE,KAAK,CAAC,YAAY,CAAC"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MasonryFlashList = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
var react_native_1 = require("react-native");
|
|
7
|
+
var CustomError_1 = tslib_1.__importDefault(require("./errors/CustomError"));
|
|
8
|
+
var ExceptionList_1 = tslib_1.__importDefault(require("./errors/ExceptionList"));
|
|
9
|
+
var FlashList_1 = tslib_1.__importDefault(require("./FlashList"));
|
|
10
|
+
var ContentContainerUtils_1 = require("./utils/ContentContainerUtils");
|
|
11
|
+
var defaultEstimatedItemSize = 100;
|
|
12
|
+
/**
|
|
13
|
+
* FlashList variant that enables rendering of masonry layouts.
|
|
14
|
+
* If you want `MasonryFlashList` to optimize item arrangement, enable `optimizeItemArrangement` and pass a valid `overrideItemLayout` function.
|
|
15
|
+
*/
|
|
16
|
+
var MasonryFlashListComponent = react_1.default.forwardRef(function (
|
|
17
|
+
/**
|
|
18
|
+
* Forward Ref will force cast generic parament T to unknown. Export has a explicit cast to solve this.
|
|
19
|
+
*/
|
|
20
|
+
props, forwardRef) {
|
|
21
|
+
var _a, _b, _c, _d, _e;
|
|
22
|
+
var columnCount = props.numColumns || 1;
|
|
23
|
+
var drawDistance = props.drawDistance;
|
|
24
|
+
var estimatedListSize = (_b = (_a = props.estimatedListSize) !== null && _a !== void 0 ? _a : react_native_1.Dimensions.get("window")) !== null && _b !== void 0 ? _b : { height: 500, width: 500 };
|
|
25
|
+
if (props.optimizeItemArrangement && !props.overrideItemLayout) {
|
|
26
|
+
throw new CustomError_1.default(ExceptionList_1.default.overrideItemLayoutRequiredForMasonryOptimization);
|
|
27
|
+
}
|
|
28
|
+
var dataSet = useDataSet(columnCount, Boolean(props.optimizeItemArrangement), props.data, props.overrideItemLayout, props.extraData);
|
|
29
|
+
var totalColumnFlex = useTotalColumnFlex(dataSet, props);
|
|
30
|
+
var propsRef = (0, react_1.useRef)(props);
|
|
31
|
+
propsRef.current = props;
|
|
32
|
+
var onScrollRef = (0, react_1.useRef)([]);
|
|
33
|
+
var emptyScrollEvent = (0, react_1.useRef)(getEmptyScrollEvent())
|
|
34
|
+
.current;
|
|
35
|
+
var ScrollComponent = (0, react_1.useRef)(getFlashListScrollView(onScrollRef, function () {
|
|
36
|
+
var _a;
|
|
37
|
+
return (((_a = getListRenderedSize(parentFlashList)) === null || _a === void 0 ? void 0 : _a.height) ||
|
|
38
|
+
estimatedListSize.height);
|
|
39
|
+
})).current;
|
|
40
|
+
var onScrollProxy = (0, react_1.useRef)(function (scrollEvent) {
|
|
41
|
+
var _a, _b, _c, _d, _e;
|
|
42
|
+
emptyScrollEvent.nativeEvent.contentOffset.y =
|
|
43
|
+
scrollEvent.nativeEvent.contentOffset.y -
|
|
44
|
+
((_b = (_a = parentFlashList.current) === null || _a === void 0 ? void 0 : _a.firstItemOffset) !== null && _b !== void 0 ? _b : 0);
|
|
45
|
+
(_c = onScrollRef.current) === null || _c === void 0 ? void 0 : _c.forEach(function (onScrollCallback) {
|
|
46
|
+
onScrollCallback === null || onScrollCallback === void 0 ? void 0 : onScrollCallback(emptyScrollEvent);
|
|
47
|
+
});
|
|
48
|
+
if (!scrollEvent.nativeEvent.doNotPropagate) {
|
|
49
|
+
(_e = (_d = propsRef.current).onScroll) === null || _e === void 0 ? void 0 : _e.call(_d, scrollEvent);
|
|
50
|
+
}
|
|
51
|
+
}).current;
|
|
52
|
+
/**
|
|
53
|
+
* We're triggering an onScroll on internal lists so that they register the correct offset which is offset - header size.
|
|
54
|
+
* This will make sure viewability callbacks are triggered correctly.
|
|
55
|
+
* 32 ms is equal to two frames at 60 fps. Faster framerates will not cause any problems.
|
|
56
|
+
*/
|
|
57
|
+
var onLoadForNestedLists = (0, react_1.useRef)(function (args) {
|
|
58
|
+
var _a, _b;
|
|
59
|
+
setTimeout(function () {
|
|
60
|
+
emptyScrollEvent.nativeEvent.doNotPropagate = true;
|
|
61
|
+
onScrollProxy === null || onScrollProxy === void 0 ? void 0 : onScrollProxy(emptyScrollEvent);
|
|
62
|
+
emptyScrollEvent.nativeEvent.doNotPropagate = false;
|
|
63
|
+
}, 32);
|
|
64
|
+
(_b = (_a = propsRef.current).onLoad) === null || _b === void 0 ? void 0 : _b.call(_a, args);
|
|
65
|
+
}).current;
|
|
66
|
+
var _f = tslib_1.__read(useRefWithForwardRef(forwardRef), 2), parentFlashList = _f[0], getFlashList = _f[1];
|
|
67
|
+
var renderItem = props.renderItem, getItemType = props.getItemType, getColumnFlex = props.getColumnFlex, overrideItemLayout = props.overrideItemLayout, viewabilityConfig = props.viewabilityConfig, keyExtractor = props.keyExtractor, onLoad = props.onLoad, onViewableItemsChanged = props.onViewableItemsChanged, data = props.data, stickyHeaderIndices = props.stickyHeaderIndices, CellRendererComponent = props.CellRendererComponent, ItemSeparatorComponent = props.ItemSeparatorComponent, remainingProps = tslib_1.__rest(props, ["renderItem", "getItemType", "getColumnFlex", "overrideItemLayout", "viewabilityConfig", "keyExtractor", "onLoad", "onViewableItemsChanged", "data", "stickyHeaderIndices", "CellRendererComponent", "ItemSeparatorComponent"]);
|
|
68
|
+
var firstColumnHeight = ((_d = (_c = dataSet[0]) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0) *
|
|
69
|
+
((_e = props.estimatedItemSize) !== null && _e !== void 0 ? _e : defaultEstimatedItemSize);
|
|
70
|
+
var insetForLayoutManager = (0, ContentContainerUtils_1.applyContentContainerInsetForLayoutManager)({ height: 0, width: 0 }, props.contentContainerStyle, false);
|
|
71
|
+
return (react_1.default.createElement(FlashList_1.default, tslib_1.__assign({ ref: getFlashList }, remainingProps, { horizontal: false, numColumns: columnCount, data: dataSet, onScroll: onScrollProxy, estimatedItemSize: firstColumnHeight || estimatedListSize.height, renderItem: function (args) {
|
|
72
|
+
var _a, _b;
|
|
73
|
+
return (react_1.default.createElement(FlashList_1.default, { renderScrollComponent: ScrollComponent, estimatedItemSize: props.estimatedItemSize, data: args.item, onLoad: args.index === 0 ? onLoadForNestedLists : undefined, renderItem: function (innerArgs) {
|
|
74
|
+
var _a;
|
|
75
|
+
return ((_a = renderItem === null || renderItem === void 0 ? void 0 : renderItem(tslib_1.__assign(tslib_1.__assign({}, innerArgs), { item: innerArgs.item.originalItem, index: innerArgs.item.originalIndex, columnSpan: 1, columnIndex: args.index }))) !== null && _a !== void 0 ? _a : null);
|
|
76
|
+
}, keyExtractor: keyExtractor
|
|
77
|
+
? function (item, _) {
|
|
78
|
+
return keyExtractor === null || keyExtractor === void 0 ? void 0 : keyExtractor(item.originalItem, item.originalIndex);
|
|
79
|
+
}
|
|
80
|
+
: undefined, getItemType: getItemType
|
|
81
|
+
? function (item, _, extraData) {
|
|
82
|
+
return getItemType === null || getItemType === void 0 ? void 0 : getItemType(item.originalItem, item.originalIndex, extraData);
|
|
83
|
+
}
|
|
84
|
+
: undefined, drawDistance: drawDistance, estimatedListSize: {
|
|
85
|
+
height: estimatedListSize.height,
|
|
86
|
+
width: (((((_a = getListRenderedSize(parentFlashList)) === null || _a === void 0 ? void 0 : _a.width) ||
|
|
87
|
+
estimatedListSize.width) +
|
|
88
|
+
insetForLayoutManager.width) /
|
|
89
|
+
totalColumnFlex) *
|
|
90
|
+
((_b = getColumnFlex === null || getColumnFlex === void 0 ? void 0 : getColumnFlex(args.item, args.index, columnCount, props.extraData)) !== null && _b !== void 0 ? _b : 1),
|
|
91
|
+
}, extraData: props.extraData, CellRendererComponent: CellRendererComponent, ItemSeparatorComponent: ItemSeparatorComponent, viewabilityConfig: viewabilityConfig, onViewableItemsChanged: onViewableItemsChanged
|
|
92
|
+
? function (info) {
|
|
93
|
+
updateViewTokens(info.viewableItems);
|
|
94
|
+
updateViewTokens(info.changed);
|
|
95
|
+
onViewableItemsChanged === null || onViewableItemsChanged === void 0 ? void 0 : onViewableItemsChanged(info);
|
|
96
|
+
}
|
|
97
|
+
: undefined, overrideItemLayout: overrideItemLayout
|
|
98
|
+
? function (layout, item, _, __, extraData) {
|
|
99
|
+
overrideItemLayout === null || overrideItemLayout === void 0 ? void 0 : overrideItemLayout(layout, item.originalItem, item.originalIndex, columnCount, extraData);
|
|
100
|
+
layout.span = undefined;
|
|
101
|
+
}
|
|
102
|
+
: undefined }));
|
|
103
|
+
}, overrideItemLayout: getColumnFlex
|
|
104
|
+
? function (layout, item, index, maxColumns, extraData) {
|
|
105
|
+
layout.span =
|
|
106
|
+
(columnCount *
|
|
107
|
+
getColumnFlex(item, index, maxColumns, extraData)) /
|
|
108
|
+
totalColumnFlex;
|
|
109
|
+
}
|
|
110
|
+
: undefined })));
|
|
111
|
+
});
|
|
112
|
+
/**
|
|
113
|
+
* Splits data for each column's FlashList
|
|
114
|
+
*/
|
|
115
|
+
var useDataSet = function (columnCount, optimizeItemArrangement, sourceData, overrideItemLayout, extraData) {
|
|
116
|
+
return (0, react_1.useMemo)(function () {
|
|
117
|
+
var _a;
|
|
118
|
+
if (!sourceData || sourceData.length === 0) {
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
var columnHeightTracker = new Array(columnCount).fill(0);
|
|
122
|
+
var layoutObject = { size: undefined };
|
|
123
|
+
var dataSet = new Array(columnCount);
|
|
124
|
+
var dataSize = sourceData.length;
|
|
125
|
+
for (var i = 0; i < columnCount; i++) {
|
|
126
|
+
dataSet[i] = [];
|
|
127
|
+
}
|
|
128
|
+
for (var i = 0; i < dataSize; i++) {
|
|
129
|
+
var nextColumnIndex = i % columnCount;
|
|
130
|
+
if (optimizeItemArrangement) {
|
|
131
|
+
for (var j = 0; j < columnCount; j++) {
|
|
132
|
+
if (columnHeightTracker[j] < columnHeightTracker[nextColumnIndex]) {
|
|
133
|
+
nextColumnIndex = j;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// update height of column
|
|
137
|
+
layoutObject.size = undefined;
|
|
138
|
+
overrideItemLayout(layoutObject, sourceData[i], i, columnCount, extraData);
|
|
139
|
+
columnHeightTracker[nextColumnIndex] +=
|
|
140
|
+
(_a = layoutObject.size) !== null && _a !== void 0 ? _a : defaultEstimatedItemSize;
|
|
141
|
+
}
|
|
142
|
+
dataSet[nextColumnIndex].push({
|
|
143
|
+
originalItem: sourceData[i],
|
|
144
|
+
originalIndex: i,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return dataSet;
|
|
148
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
149
|
+
}, [sourceData, columnCount, optimizeItemArrangement, extraData]);
|
|
150
|
+
};
|
|
151
|
+
var useTotalColumnFlex = function (dataSet, props) {
|
|
152
|
+
return (0, react_1.useMemo)(function () {
|
|
153
|
+
var columnCount = props.numColumns || 1;
|
|
154
|
+
if (!props.getColumnFlex) {
|
|
155
|
+
return columnCount;
|
|
156
|
+
}
|
|
157
|
+
var totalFlexSum = 0;
|
|
158
|
+
var dataSize = dataSet.length;
|
|
159
|
+
for (var i = 0; i < dataSize; i++) {
|
|
160
|
+
totalFlexSum += props.getColumnFlex(dataSet[i], i, columnCount, props.extraData);
|
|
161
|
+
}
|
|
162
|
+
return totalFlexSum;
|
|
163
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
164
|
+
}, [dataSet, props.getColumnFlex, props.extraData]);
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* Handle both function refs and refs with current property
|
|
168
|
+
*/
|
|
169
|
+
var useRefWithForwardRef = function (forwardRef) {
|
|
170
|
+
var ref = (0, react_1.useRef)(null);
|
|
171
|
+
return [
|
|
172
|
+
ref,
|
|
173
|
+
(0, react_1.useCallback)(function (instance) {
|
|
174
|
+
ref.current = instance;
|
|
175
|
+
if (typeof forwardRef === "function") {
|
|
176
|
+
forwardRef(instance);
|
|
177
|
+
}
|
|
178
|
+
else if (forwardRef) {
|
|
179
|
+
forwardRef.current = instance;
|
|
180
|
+
}
|
|
181
|
+
}, [forwardRef]),
|
|
182
|
+
];
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* This ScrollView is actually just a view mimicking a scrollview. We block the onScroll event from being passed to the parent list directly.
|
|
186
|
+
* We manually drive onScroll from the parent and thus, achieve recycling.
|
|
187
|
+
*/
|
|
188
|
+
var getFlashListScrollView = function (onScrollRef, getParentHeight) {
|
|
189
|
+
var FlashListScrollView = react_1.default.forwardRef(function (props, ref) {
|
|
190
|
+
var onLayout = props.onLayout, onScroll = props.onScroll, rest = tslib_1.__rest(props, ["onLayout", "onScroll"]);
|
|
191
|
+
var onLayoutProxy = (0, react_1.useCallback)(function (layoutEvent) {
|
|
192
|
+
onLayout === null || onLayout === void 0 ? void 0 : onLayout({
|
|
193
|
+
nativeEvent: {
|
|
194
|
+
layout: {
|
|
195
|
+
height: getParentHeight(),
|
|
196
|
+
width: layoutEvent.nativeEvent.layout.width,
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
}, [onLayout]);
|
|
201
|
+
(0, react_1.useEffect)(function () {
|
|
202
|
+
var _a;
|
|
203
|
+
if (onScroll) {
|
|
204
|
+
(_a = onScrollRef.current) === null || _a === void 0 ? void 0 : _a.push(onScroll);
|
|
205
|
+
}
|
|
206
|
+
return function () {
|
|
207
|
+
if (!onScrollRef.current || !onScroll) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
var indexToDelete = onScrollRef.current.indexOf(onScroll);
|
|
211
|
+
if (indexToDelete > -1) {
|
|
212
|
+
onScrollRef.current.splice(indexToDelete, 1);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
}, [onScroll]);
|
|
216
|
+
return react_1.default.createElement(react_native_1.View, tslib_1.__assign({ ref: ref }, rest, { onLayout: onLayoutProxy }));
|
|
217
|
+
});
|
|
218
|
+
FlashListScrollView.displayName = "FlashListScrollView";
|
|
219
|
+
return FlashListScrollView;
|
|
220
|
+
};
|
|
221
|
+
var updateViewTokens = function (tokens) {
|
|
222
|
+
var length = tokens.length;
|
|
223
|
+
for (var i = 0; i < length; i++) {
|
|
224
|
+
var token = tokens[i];
|
|
225
|
+
if (token.index !== null && token.index !== undefined) {
|
|
226
|
+
if (token.item) {
|
|
227
|
+
token.index = token.item.originalIndex;
|
|
228
|
+
token.item = token.item.originalItem;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
token.index = null;
|
|
232
|
+
token.item = undefined;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
var getEmptyScrollEvent = function () {
|
|
238
|
+
return {
|
|
239
|
+
nativeEvent: { contentOffset: { y: 0, x: 0 } },
|
|
240
|
+
};
|
|
241
|
+
};
|
|
242
|
+
var getListRenderedSize = function (parentFlashList) {
|
|
243
|
+
var _a, _b;
|
|
244
|
+
return (_b = (_a = parentFlashList === null || parentFlashList === void 0 ? void 0 : parentFlashList.current) === null || _a === void 0 ? void 0 : _a.recyclerlistview_unsafe) === null || _b === void 0 ? void 0 : _b.getRenderedSize();
|
|
245
|
+
};
|
|
246
|
+
MasonryFlashListComponent.displayName = "MasonryFlashList";
|
|
247
|
+
/**
|
|
248
|
+
* FlashList variant that enables rendering of masonry layouts.
|
|
249
|
+
* If you want `MasonryFlashList` to optimize item arrangement, enable `optimizeItemArrangement` and pass a valid `overrideItemLayout` function.
|
|
250
|
+
*/
|
|
251
|
+
exports.MasonryFlashList = MasonryFlashListComponent;
|
|
252
|
+
//# sourceMappingURL=MasonryFlashList.js.map
|