@shopify/flash-list 1.8.0 → 2.0.0-alpha.2
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 +147 -26
- package/dist/FlashListProps.d.ts +65 -2
- package/dist/FlashListProps.d.ts.map +1 -1
- package/dist/__tests__/AverageWindow.test.js +35 -0
- package/dist/__tests__/AverageWindow.test.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/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -8
- package/dist/index.js.map +1 -1
- package/dist/recyclerview/RecycleKeyManager.d.ts +82 -0
- package/dist/recyclerview/RecycleKeyManager.d.ts.map +1 -0
- package/dist/recyclerview/RecycleKeyManager.js +135 -0
- package/dist/recyclerview/RecycleKeyManager.js.map +1 -0
- package/dist/recyclerview/RecyclerView.d.ts +12 -0
- package/dist/recyclerview/RecyclerView.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerView.js +283 -0
- package/dist/recyclerview/RecyclerView.js.map +1 -0
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts +12 -0
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewContextProvider.js +11 -0
- package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -0
- package/dist/recyclerview/RecyclerViewManager.d.ts +52 -0
- package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewManager.js +323 -0
- package/dist/recyclerview/RecyclerViewManager.js.map +1 -0
- package/dist/recyclerview/RecyclerViewProps.d.ts +9 -0
- package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewProps.js +3 -0
- package/dist/recyclerview/RecyclerViewProps.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 +96 -0
- package/dist/recyclerview/ViewHolder.js.map +1 -0
- package/dist/recyclerview/ViewHolderCollection.d.ts +57 -0
- package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -0
- package/dist/recyclerview/ViewHolderCollection.js +75 -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 +8 -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 +8 -0
- package/dist/recyclerview/components/CompatView.js.map +1 -0
- package/dist/recyclerview/components/ScrollAnchor.d.ts +28 -0
- package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -0
- package/dist/recyclerview/components/ScrollAnchor.js +35 -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 +119 -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 +122 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +59 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js +138 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -0
- package/dist/recyclerview/hooks/useBoundDetection.d.ts +19 -0
- package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useBoundDetection.js +103 -0
- package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -0
- package/dist/recyclerview/hooks/useLayoutState.d.ts +12 -0
- package/dist/recyclerview/hooks/useLayoutState.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useLayoutState.js +43 -0
- package/dist/recyclerview/hooks/useLayoutState.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 +73 -0
- package/dist/recyclerview/hooks/useOnLoad.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +72 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.js +370 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +6 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.js +27 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclingState.d.ts +16 -0
- package/dist/recyclerview/hooks/useRecyclingState.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclingState.js +54 -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 +93 -0
- package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -0
- package/dist/recyclerview/hooks/useUnmountFlag.d.ts +11 -0
- package/dist/recyclerview/hooks/useUnmountFlag.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useUnmountFlag.js +28 -0
- package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +65 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.js +204 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts +281 -0
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/LayoutManager.js +250 -0
- package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts +52 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js +191 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts +73 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +274 -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 +18 -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 +32 -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 +82 -0
- package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -0
- package/dist/recyclerview/utils/measureLayout.d.ts +56 -0
- package/dist/recyclerview/utils/measureLayout.d.ts.map +1 -0
- package/dist/recyclerview/utils/measureLayout.js +77 -0
- package/dist/recyclerview/utils/measureLayout.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/AverageWindow.d.ts +13 -0
- package/dist/utils/AverageWindow.d.ts.map +1 -1
- package/dist/utils/AverageWindow.js +30 -1
- package/dist/utils/AverageWindow.js.map +1 -1
- package/package.json +1 -1
- package/src/FlashListProps.ts +73 -2
- package/src/__tests__/AverageWindow.test.ts +49 -1
- package/src/enableNewCore.ts +22 -0
- package/src/index.ts +21 -0
- package/src/recyclerview/RecycleKeyManager.ts +185 -0
- package/src/recyclerview/RecyclerView.tsx +500 -0
- package/src/recyclerview/RecyclerViewContextProvider.ts +19 -0
- package/src/recyclerview/RecyclerViewManager.ts +379 -0
- package/src/recyclerview/RecyclerViewProps.ts +10 -0
- package/src/recyclerview/ViewHolder.tsx +173 -0
- package/src/recyclerview/ViewHolderCollection.tsx +164 -0
- package/src/recyclerview/components/CompatScroller.ts +9 -0
- package/src/recyclerview/components/CompatView.ts +9 -0
- package/src/recyclerview/components/ScrollAnchor.tsx +53 -0
- package/src/recyclerview/components/StickyHeaders.tsx +210 -0
- package/src/recyclerview/helpers/ConsecutiveNumbers.ts +120 -0
- package/src/recyclerview/helpers/EngagedIndicesTracker.ts +191 -0
- package/src/recyclerview/hooks/useBoundDetection.ts +127 -0
- package/src/recyclerview/hooks/useLayoutState.ts +46 -0
- package/src/recyclerview/hooks/useOnLoad.ts +78 -0
- package/src/recyclerview/hooks/useRecyclerViewController.tsx +487 -0
- package/src/recyclerview/hooks/useRecyclerViewManager.ts +30 -0
- package/src/recyclerview/hooks/useRecyclingState.ts +63 -0
- package/src/recyclerview/hooks/useSecondaryProps.tsx +119 -0
- package/src/recyclerview/hooks/useUnmountFlag.ts +26 -0
- package/src/recyclerview/layout-managers/GridLayoutManager.ts +215 -0
- package/src/recyclerview/layout-managers/LayoutManager.ts +493 -0
- package/src/recyclerview/layout-managers/LinearLayoutManager.ts +167 -0
- package/src/recyclerview/layout-managers/MasonryLayoutManager.ts +302 -0
- package/src/recyclerview/utils/adjustOffsetForRTL.ts +17 -0
- package/src/recyclerview/utils/componentUtils.ts +28 -0
- package/src/recyclerview/utils/findVisibleIndex.ts +94 -0
- package/src/recyclerview/utils/measureLayout.ts +89 -0
- package/src/utils/AverageWindow.ts +33 -0
- package/src/viewability/ViewToken.ts +1 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RecycleKeyManagerImpl = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var RecycleKeyManagerImpl = /** @class */ (function () {
|
|
6
|
+
/**
|
|
7
|
+
* Creates a new RecycleKeyManager with a specified maximum number of items.
|
|
8
|
+
* @param maxItems - Maximum number of unique keys that can be active simultaneously.
|
|
9
|
+
* Defaults to Number.MAX_SAFE_INTEGER if not specified.
|
|
10
|
+
*/
|
|
11
|
+
function RecycleKeyManagerImpl(maxItems) {
|
|
12
|
+
if (maxItems === void 0) { maxItems = Number.MAX_SAFE_INTEGER; }
|
|
13
|
+
this.maxItems = maxItems;
|
|
14
|
+
this.keyPools = new Map();
|
|
15
|
+
this.keyMap = new Map();
|
|
16
|
+
this.stableIdMap = new Map();
|
|
17
|
+
this.keyCounter = 0;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Gets a key for the specified item type, prioritizing stable ID associations.
|
|
21
|
+
* If a stable ID exists, returns its associated key. Otherwise, either reuses
|
|
22
|
+
* a key from the pool or generates a new one.
|
|
23
|
+
* @param itemType - The type/category of the item
|
|
24
|
+
* @param stableId - Optional unique identifier for stable item tracking
|
|
25
|
+
* @param currentKey - Optional current key to maintain if it exists in the pool
|
|
26
|
+
* @returns A unique key for the item
|
|
27
|
+
*/
|
|
28
|
+
RecycleKeyManagerImpl.prototype.getKey = function (itemType, stableId, currentKey) {
|
|
29
|
+
// Return existing key if stableId is already mapped
|
|
30
|
+
if (stableId && this.stableIdMap.has(stableId)) {
|
|
31
|
+
return this.stableIdMap.get(stableId);
|
|
32
|
+
}
|
|
33
|
+
// Get or create the pool for this item type
|
|
34
|
+
var pool = this.keyPools.get(itemType);
|
|
35
|
+
if (!pool) {
|
|
36
|
+
pool = new Set();
|
|
37
|
+
this.keyPools.set(itemType, pool);
|
|
38
|
+
}
|
|
39
|
+
var key;
|
|
40
|
+
// Reuse existing key from pool if available
|
|
41
|
+
if (pool.size > 0) {
|
|
42
|
+
key =
|
|
43
|
+
currentKey && pool.has(currentKey)
|
|
44
|
+
? currentKey
|
|
45
|
+
: pool.values().next().value;
|
|
46
|
+
pool.delete(key);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Generate new key if pool is empty
|
|
50
|
+
key = this.generateKey();
|
|
51
|
+
}
|
|
52
|
+
// Update mappings with new key information
|
|
53
|
+
this.keyMap.set(key, { itemType: itemType, stableId: stableId });
|
|
54
|
+
if (stableId) {
|
|
55
|
+
this.stableIdMap.set(stableId, key);
|
|
56
|
+
}
|
|
57
|
+
// Ensure we don't exceed the maximum number of active keys
|
|
58
|
+
this.ensurePoolSize();
|
|
59
|
+
return key;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Recycles a key by adding it back to its item type's pool and cleaning up
|
|
63
|
+
* associated mappings. This should be called when a view is no longer visible.
|
|
64
|
+
* @param key - The key to be recycled
|
|
65
|
+
*/
|
|
66
|
+
RecycleKeyManagerImpl.prototype.recycleKey = function (key) {
|
|
67
|
+
var keyInfo = this.keyMap.get(key);
|
|
68
|
+
if (!keyInfo) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
var itemType = keyInfo.itemType, stableId = keyInfo.stableId;
|
|
72
|
+
// Clean up stable ID mapping if it exists
|
|
73
|
+
if (stableId) {
|
|
74
|
+
this.stableIdMap.delete(stableId);
|
|
75
|
+
}
|
|
76
|
+
// Add key back to its type's pool
|
|
77
|
+
var pool = this.keyPools.get(itemType);
|
|
78
|
+
if (!pool) {
|
|
79
|
+
pool = new Set();
|
|
80
|
+
this.keyPools.set(itemType, pool);
|
|
81
|
+
}
|
|
82
|
+
pool.add(key);
|
|
83
|
+
this.keyMap.delete(key);
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Checks if a key is currently available in the recycling pool.
|
|
87
|
+
* @param key - The key to check
|
|
88
|
+
* @returns True if the key is available in the pool, false otherwise
|
|
89
|
+
*/
|
|
90
|
+
RecycleKeyManagerImpl.prototype.hasKeyInPool = function (key) {
|
|
91
|
+
return !this.keyMap.has(key);
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Clears all recycled keys from the pool, effectively resetting the recycling system.
|
|
95
|
+
* This operation does not affect currently active keys.
|
|
96
|
+
*/
|
|
97
|
+
RecycleKeyManagerImpl.prototype.clearPool = function () {
|
|
98
|
+
this.keyPools.clear();
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Generates a unique sequential key using an internal counter.
|
|
102
|
+
* @returns A unique key as a string
|
|
103
|
+
*/
|
|
104
|
+
RecycleKeyManagerImpl.prototype.generateKey = function () {
|
|
105
|
+
return (this.keyCounter++).toString();
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Ensures the total number of active keys doesn't exceed the maximum limit.
|
|
109
|
+
* If the limit is exceeded, recycles the oldest keys until within bounds.
|
|
110
|
+
* Note: This operation may impact performance when dealing with large lists.
|
|
111
|
+
* TODO: Check performance impact of this
|
|
112
|
+
*/
|
|
113
|
+
RecycleKeyManagerImpl.prototype.ensurePoolSize = function () {
|
|
114
|
+
var e_1, _a;
|
|
115
|
+
if (this.keyMap.size <= this.maxItems)
|
|
116
|
+
return;
|
|
117
|
+
var keysToRecycle = Array.from(this.keyMap.keys()).slice(0, this.keyMap.size - this.maxItems);
|
|
118
|
+
try {
|
|
119
|
+
for (var keysToRecycle_1 = tslib_1.__values(keysToRecycle), keysToRecycle_1_1 = keysToRecycle_1.next(); !keysToRecycle_1_1.done; keysToRecycle_1_1 = keysToRecycle_1.next()) {
|
|
120
|
+
var key = keysToRecycle_1_1.value;
|
|
121
|
+
this.recycleKey(key);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
125
|
+
finally {
|
|
126
|
+
try {
|
|
127
|
+
if (keysToRecycle_1_1 && !keysToRecycle_1_1.done && (_a = keysToRecycle_1.return)) _a.call(keysToRecycle_1);
|
|
128
|
+
}
|
|
129
|
+
finally { if (e_1) throw e_1.error; }
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
return RecycleKeyManagerImpl;
|
|
133
|
+
}());
|
|
134
|
+
exports.RecycleKeyManagerImpl = RecycleKeyManagerImpl;
|
|
135
|
+
//# sourceMappingURL=RecycleKeyManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecycleKeyManager.js","sourceRoot":"","sources":["../../src/recyclerview/RecycleKeyManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RecyclerView is a high-performance list component that efficiently renders and recycles list items.
|
|
3
|
+
* It's designed to handle large lists with optimal memory usage and smooth scrolling.
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { RecyclerViewProps } from "./RecyclerViewProps";
|
|
7
|
+
declare type RecyclerViewType = <T>(props: RecyclerViewProps<T> & {
|
|
8
|
+
ref?: React.Ref<any>;
|
|
9
|
+
}) => React.JSX.Element;
|
|
10
|
+
declare const RecyclerView: RecyclerViewType;
|
|
11
|
+
export { RecyclerView };
|
|
12
|
+
//# sourceMappingURL=RecyclerView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecyclerView.d.ts","sourceRoot":"","sources":["../../src/recyclerview/RecyclerView.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KASN,MAAM,OAAO,CAAC;AAqBf,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAwcxD,aAAK,gBAAgB,GAAG,CAAC,CAAC,EACxB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CAAE,KACnD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAGvB,QAAA,MAAM,YAAY,kBAEG,CAAC;AAEtB,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RecyclerView = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* RecyclerView is a high-performance list component that efficiently renders and recycles list items.
|
|
7
|
+
* It's designed to handle large lists with optimal memory usage and smooth scrolling.
|
|
8
|
+
*/
|
|
9
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
10
|
+
var react_native_1 = require("react-native");
|
|
11
|
+
var measureLayout_1 = require("./utils/measureLayout");
|
|
12
|
+
var RecyclerViewContextProvider_1 = require("./RecyclerViewContextProvider");
|
|
13
|
+
var useLayoutState_1 = require("./hooks/useLayoutState");
|
|
14
|
+
var useRecyclerViewManager_1 = require("./hooks/useRecyclerViewManager");
|
|
15
|
+
var useOnLoad_1 = require("./hooks/useOnLoad");
|
|
16
|
+
var ViewHolderCollection_1 = require("./ViewHolderCollection");
|
|
17
|
+
var CompatView_1 = require("./components/CompatView");
|
|
18
|
+
var useBoundDetection_1 = require("./hooks/useBoundDetection");
|
|
19
|
+
var adjustOffsetForRTL_1 = require("./utils/adjustOffsetForRTL");
|
|
20
|
+
var useSecondaryProps_1 = require("./hooks/useSecondaryProps");
|
|
21
|
+
var StickyHeaders_1 = require("./components/StickyHeaders");
|
|
22
|
+
var ScrollAnchor_1 = require("./components/ScrollAnchor");
|
|
23
|
+
var useRecyclerViewController_1 = require("./hooks/useRecyclerViewController");
|
|
24
|
+
/**
|
|
25
|
+
* Main RecyclerView component that handles list rendering, scrolling, and item recycling.
|
|
26
|
+
* @template T - The type of items in the list
|
|
27
|
+
*/
|
|
28
|
+
var RecyclerViewComponent = function (props, ref) {
|
|
29
|
+
var _a;
|
|
30
|
+
// Destructure props and initialize refs
|
|
31
|
+
var horizontal = props.horizontal, renderItem = props.renderItem, data = props.data, extraData = props.extraData, onLoad = props.onLoad, CellRendererComponent = props.CellRendererComponent, overrideProps = props.overrideProps, refreshing = props.refreshing, onRefresh = props.onRefresh, progressViewOffset = props.progressViewOffset, ListEmptyComponent = props.ListEmptyComponent, ListHeaderComponent = props.ListHeaderComponent, ListHeaderComponentStyle = props.ListHeaderComponentStyle, ListFooterComponent = props.ListFooterComponent, ListFooterComponentStyle = props.ListFooterComponentStyle, ItemSeparatorComponent = props.ItemSeparatorComponent, renderScrollComponent = props.renderScrollComponent, onScroll = props.onScroll, disableRecycling = props.disableRecycling, style = props.style, stickyHeaderIndices = props.stickyHeaderIndices, maintainVisibleContentPosition = props.maintainVisibleContentPosition, onCommitLayoutEffect = props.onCommitLayoutEffect, rest = tslib_1.__rest(props, ["horizontal", "renderItem", "data", "extraData", "onLoad", "CellRendererComponent", "overrideProps", "refreshing", "onRefresh", "progressViewOffset", "ListEmptyComponent", "ListHeaderComponent", "ListHeaderComponentStyle", "ListFooterComponent", "ListFooterComponentStyle", "ItemSeparatorComponent", "renderScrollComponent", "onScroll", "disableRecycling", "style", "stickyHeaderIndices", "maintainVisibleContentPosition", "onCommitLayoutEffect"]);
|
|
32
|
+
// Core refs for managing scroll view, internal view, and child container
|
|
33
|
+
var scrollViewRef = (0, react_1.useRef)(null);
|
|
34
|
+
var internalViewRef = (0, react_1.useRef)(null);
|
|
35
|
+
var childContainerViewRef = (0, react_1.useRef)(null);
|
|
36
|
+
var containerViewSizeRef = (0, react_1.useRef)(undefined);
|
|
37
|
+
var pendingChildIds = (0, react_1.useRef)(new Set()).current;
|
|
38
|
+
// Track scroll position
|
|
39
|
+
var scrollY = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
|
|
40
|
+
// Refs for sticky headers and scroll anchoring
|
|
41
|
+
var stickyHeaderRef = (0, react_1.useRef)(null);
|
|
42
|
+
var scrollAnchorRef = (0, react_1.useRef)(null);
|
|
43
|
+
// State for managing layout and render updates
|
|
44
|
+
var _b = tslib_1.__read((0, useLayoutState_1.useLayoutState)(0), 2), _ = _b[0], setLayoutTreeId = _b[1];
|
|
45
|
+
var _c = tslib_1.__read((0, react_1.useState)(0), 2), __ = _c[0], setRenderId = _c[1];
|
|
46
|
+
// Map to store refs for each item in the list
|
|
47
|
+
var refHolder = (0, react_1.useMemo)(function () { return new Map(); }, []);
|
|
48
|
+
// Initialize core RecyclerView manager and content offset management
|
|
49
|
+
var recyclerViewManager = (0, useRecyclerViewManager_1.useRecyclerViewManager)(props).recyclerViewManager;
|
|
50
|
+
var _d = (0, useRecyclerViewController_1.useRecyclerViewController)(recyclerViewManager, ref, scrollViewRef, scrollAnchorRef, props), applyContentOffset = _d.applyContentOffset, applyInitialScrollIndex = _d.applyInitialScrollIndex;
|
|
51
|
+
// Initialize view holder collection ref
|
|
52
|
+
var viewHolderCollectionRef = (0, react_1.useRef)(null);
|
|
53
|
+
// Hook to handle list loading
|
|
54
|
+
(0, useOnLoad_1.useOnListLoad)(recyclerViewManager, onLoad);
|
|
55
|
+
// Hook to detect when scrolling reaches list bounds
|
|
56
|
+
var checkBounds = (0, useBoundDetection_1.useBoundDetection)(recyclerViewManager, props, scrollViewRef).checkBounds;
|
|
57
|
+
/**
|
|
58
|
+
* Initialize the RecyclerView by measuring and setting up the window size
|
|
59
|
+
* This effect runs when the component mounts or when layout changes
|
|
60
|
+
*/
|
|
61
|
+
(0, react_1.useLayoutEffect)(function () {
|
|
62
|
+
if (internalViewRef.current && childContainerViewRef.current) {
|
|
63
|
+
// Measure the outer and inner container layouts
|
|
64
|
+
var outerViewLayout = (0, measureLayout_1.measureLayout)(internalViewRef.current, undefined);
|
|
65
|
+
var childViewLayout = (0, measureLayout_1.measureLayoutRelative)(childContainerViewRef.current, internalViewRef.current, undefined);
|
|
66
|
+
containerViewSizeRef.current = outerViewLayout;
|
|
67
|
+
// Calculate offset of first item
|
|
68
|
+
var firstItemOffset = horizontal
|
|
69
|
+
? childViewLayout.x - outerViewLayout.x
|
|
70
|
+
: childViewLayout.y - outerViewLayout.y;
|
|
71
|
+
// Update the RecyclerView manager with window dimensions
|
|
72
|
+
recyclerViewManager.updateLayoutParams({
|
|
73
|
+
width: horizontal ? outerViewLayout.width : childViewLayout.width,
|
|
74
|
+
height: horizontal ? childViewLayout.height : outerViewLayout.height,
|
|
75
|
+
}, firstItemOffset);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
/**
|
|
79
|
+
* Effect to handle layout updates for list items
|
|
80
|
+
* This ensures proper positioning and recycling of items
|
|
81
|
+
*/
|
|
82
|
+
(0, react_1.useLayoutEffect)(function () {
|
|
83
|
+
var _a, _b;
|
|
84
|
+
if (pendingChildIds.size > 0) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
var layoutInfo = Array.from(refHolder, function (_a) {
|
|
88
|
+
var _b = tslib_1.__read(_a, 2), index = _b[0], viewHolderRef = _b[1];
|
|
89
|
+
var layout = (0, measureLayout_1.measureLayout)(viewHolderRef.current, recyclerViewManager.getLayout(index));
|
|
90
|
+
//comapre height with stored layout
|
|
91
|
+
//const storedLayout = recyclerViewManager.getLayout(index);
|
|
92
|
+
// if (
|
|
93
|
+
// storedLayout.height !== layout.height &&
|
|
94
|
+
// storedLayout.isHeightMeasured
|
|
95
|
+
// ) {
|
|
96
|
+
// console.log(
|
|
97
|
+
// "height changed",
|
|
98
|
+
// index,
|
|
99
|
+
// layout.height,
|
|
100
|
+
// storedLayout.height
|
|
101
|
+
// );
|
|
102
|
+
// }
|
|
103
|
+
return { index: index, dimensions: layout };
|
|
104
|
+
});
|
|
105
|
+
if (recyclerViewManager.modifyChildrenLayout(layoutInfo, (_a = data === null || data === void 0 ? void 0 : data.length) !== null && _a !== void 0 ? _a : 0)) {
|
|
106
|
+
// Trigger re-render if layout modifications were made
|
|
107
|
+
setRenderId(function (prev) { return prev + 1; });
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
//console.log("commitLayout");
|
|
111
|
+
// TODO: reduce perf impact of commitLayout
|
|
112
|
+
(_b = viewHolderCollectionRef.current) === null || _b === void 0 ? void 0 : _b.commitLayout();
|
|
113
|
+
applyContentOffset();
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
/**
|
|
117
|
+
* Scroll event handler that manages scroll position, velocity, and RTL support
|
|
118
|
+
*/
|
|
119
|
+
var onScrollHandler = (0, react_1.useCallback)(function (event) {
|
|
120
|
+
var _a;
|
|
121
|
+
var velocity = event.nativeEvent.velocity;
|
|
122
|
+
var scrollOffset = horizontal
|
|
123
|
+
? event.nativeEvent.contentOffset.x
|
|
124
|
+
: event.nativeEvent.contentOffset.y;
|
|
125
|
+
// Handle RTL (Right-to-Left) layout adjustments
|
|
126
|
+
if (react_native_1.I18nManager.isRTL && horizontal) {
|
|
127
|
+
scrollOffset = (0, adjustOffsetForRTL_1.adjustOffsetForRTL)(scrollOffset, event.nativeEvent.contentSize.width, event.nativeEvent.layoutMeasurement.width);
|
|
128
|
+
if (velocity) {
|
|
129
|
+
velocity = {
|
|
130
|
+
x: -velocity.x,
|
|
131
|
+
y: velocity.y,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Update scroll position and trigger re-render if needed
|
|
136
|
+
if (recyclerViewManager.updateScrollOffset(scrollOffset, velocity)) {
|
|
137
|
+
setRenderId(function (prev) { return prev + 1; });
|
|
138
|
+
}
|
|
139
|
+
// Update sticky headers and check bounds
|
|
140
|
+
(_a = stickyHeaderRef.current) === null || _a === void 0 ? void 0 : _a.reportScrollEvent(event.nativeEvent);
|
|
141
|
+
checkBounds();
|
|
142
|
+
// Record interaction and compute item visibility
|
|
143
|
+
recyclerViewManager.recordInteraction();
|
|
144
|
+
recyclerViewManager.computeItemViewability();
|
|
145
|
+
// Call user-provided onScroll handler
|
|
146
|
+
onScroll === null || onScroll === void 0 ? void 0 : onScroll(event);
|
|
147
|
+
}, [horizontal, recyclerViewManager]);
|
|
148
|
+
// Create context for child components
|
|
149
|
+
var recyclerViewContext = (0, react_1.useMemo)(function () {
|
|
150
|
+
return {
|
|
151
|
+
layout: function () {
|
|
152
|
+
setLayoutTreeId(function (prev) { return prev + 1; });
|
|
153
|
+
},
|
|
154
|
+
getRef: function () {
|
|
155
|
+
return ref;
|
|
156
|
+
},
|
|
157
|
+
getScrollViewRef: function () {
|
|
158
|
+
return scrollViewRef;
|
|
159
|
+
},
|
|
160
|
+
markChildLayoutAsPending: function (id) {
|
|
161
|
+
pendingChildIds.add(id);
|
|
162
|
+
},
|
|
163
|
+
unmarkChildLayoutAsPending: function (id) {
|
|
164
|
+
if (pendingChildIds.has(id)) {
|
|
165
|
+
pendingChildIds.delete(id);
|
|
166
|
+
recyclerViewContext.layout();
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}, [setLayoutTreeId]);
|
|
171
|
+
var parentRecyclerViewContext = (0, RecyclerViewContextProvider_1.useRecyclerViewContext)();
|
|
172
|
+
var recyclerViewId = (0, react_1.useId)();
|
|
173
|
+
/**
|
|
174
|
+
* Validates that item dimensions match the expected layout
|
|
175
|
+
*/
|
|
176
|
+
var validateItemSize = (0, react_1.useCallback)(function (index, size) {
|
|
177
|
+
var _a, _b, _c, _d;
|
|
178
|
+
var layout = recyclerViewManager.getLayout(index);
|
|
179
|
+
var width = Math.max(Math.min(layout.width, (_a = layout.maxWidth) !== null && _a !== void 0 ? _a : Infinity), (_b = layout.minWidth) !== null && _b !== void 0 ? _b : 0);
|
|
180
|
+
var height = Math.max(Math.min(layout.height, (_c = layout.maxHeight) !== null && _c !== void 0 ? _c : Infinity), (_d = layout.minHeight) !== null && _d !== void 0 ? _d : 0);
|
|
181
|
+
if ((0, measureLayout_1.areDimensionsNotEqual)(width, size.width) ||
|
|
182
|
+
(0, measureLayout_1.areDimensionsNotEqual)(height, size.height)) {
|
|
183
|
+
// console.log(
|
|
184
|
+
// "invalid size",
|
|
185
|
+
// index,
|
|
186
|
+
// width,
|
|
187
|
+
// size.width,
|
|
188
|
+
// height,
|
|
189
|
+
// size.height
|
|
190
|
+
// );
|
|
191
|
+
// TODO: Add a warning for missing useLayoutState
|
|
192
|
+
recyclerViewContext.layout();
|
|
193
|
+
}
|
|
194
|
+
}, [recyclerViewManager]);
|
|
195
|
+
// Get secondary props and components
|
|
196
|
+
var _e = (0, useSecondaryProps_1.useSecondaryProps)(props), refreshControl = _e.refreshControl, renderHeader = _e.renderHeader, renderFooter = _e.renderFooter, renderEmpty = _e.renderEmpty, CompatScrollView = _e.CompatScrollView;
|
|
197
|
+
if (!recyclerViewManager.getIsFirstLayoutComplete() &&
|
|
198
|
+
recyclerViewManager.getDataLength() > 0) {
|
|
199
|
+
parentRecyclerViewContext === null || parentRecyclerViewContext === void 0 ? void 0 : parentRecyclerViewContext.markChildLayoutAsPending(recyclerViewId);
|
|
200
|
+
}
|
|
201
|
+
// Render sticky headers if configured
|
|
202
|
+
var stickyHeaders = (0, react_1.useMemo)(function () {
|
|
203
|
+
if (data &&
|
|
204
|
+
data.length > 0 &&
|
|
205
|
+
stickyHeaderIndices &&
|
|
206
|
+
stickyHeaderIndices.length > 0) {
|
|
207
|
+
return (react_1.default.createElement(StickyHeaders_1.StickyHeaders, { stickyHeaderIndices: stickyHeaderIndices, data: data, renderItem: renderItem, scrollY: scrollY, stickyHeaderRef: stickyHeaderRef, recyclerViewManager: recyclerViewManager, extraData: extraData }));
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}, [data, stickyHeaderIndices, renderItem, extraData]);
|
|
211
|
+
// Set up scroll event handling with animation support for sticky headers
|
|
212
|
+
var animatedEvent = (0, react_1.useMemo)(function () {
|
|
213
|
+
if (stickyHeaders) {
|
|
214
|
+
return react_native_1.Animated.event([{ nativeEvent: { contentOffset: { y: scrollY } } }], { useNativeDriver: true, listener: onScrollHandler });
|
|
215
|
+
}
|
|
216
|
+
return onScrollHandler;
|
|
217
|
+
}, [onScrollHandler, stickyHeaders]);
|
|
218
|
+
var maintainVisibleContentPositionInternal = (0, react_1.useMemo)(function () {
|
|
219
|
+
if ((maintainVisibleContentPosition === null || maintainVisibleContentPosition === void 0 ? void 0 : maintainVisibleContentPosition.disabled) || horizontal) {
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
return tslib_1.__assign(tslib_1.__assign({}, maintainVisibleContentPosition), { minIndexForVisible: 0 });
|
|
224
|
+
}
|
|
225
|
+
}, [maintainVisibleContentPosition]);
|
|
226
|
+
var shouldRenderFromBottom = (_a = maintainVisibleContentPositionInternal === null || maintainVisibleContentPositionInternal === void 0 ? void 0 : maintainVisibleContentPositionInternal.startRenderingFromBottom) !== null && _a !== void 0 ? _a : false;
|
|
227
|
+
// Calculate minimum height adjustment for bottom rendering
|
|
228
|
+
var adjustmentMinHeight = recyclerViewManager.hasLayout()
|
|
229
|
+
? Math.max(0, recyclerViewManager.getWindowSize().height -
|
|
230
|
+
recyclerViewManager.getChildContainerDimensions().height -
|
|
231
|
+
recyclerViewManager.firstItemOffset)
|
|
232
|
+
: 0;
|
|
233
|
+
// Create view for measuring bounded size
|
|
234
|
+
var viewToMeasureBoundedSize = (0, react_1.useMemo)(function () {
|
|
235
|
+
return (react_1.default.createElement(CompatView_1.CompatView, { style: {
|
|
236
|
+
height: horizontal ? undefined : 0,
|
|
237
|
+
width: horizontal ? 0 : undefined,
|
|
238
|
+
minHeight: shouldRenderFromBottom ? adjustmentMinHeight : undefined,
|
|
239
|
+
}, ref: childContainerViewRef }));
|
|
240
|
+
}, [horizontal, shouldRenderFromBottom, adjustmentMinHeight]);
|
|
241
|
+
//console.log("render");
|
|
242
|
+
// Render the main RecyclerView structure
|
|
243
|
+
return (react_1.default.createElement(RecyclerViewContextProvider_1.RecyclerViewContextProvider, { value: recyclerViewContext },
|
|
244
|
+
react_1.default.createElement(CompatView_1.CompatView, { style: tslib_1.__assign({ flex: horizontal ? undefined : 1 }, style), ref: internalViewRef, collapsable: false, onLayout: function (event) {
|
|
245
|
+
var _a, _b, _c, _d;
|
|
246
|
+
if ((0, measureLayout_1.areDimensionsNotEqual)(event.nativeEvent.layout.width, (_b = (_a = containerViewSizeRef.current) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0) ||
|
|
247
|
+
(0, measureLayout_1.areDimensionsNotEqual)(event.nativeEvent.layout.height, (_d = (_c = containerViewSizeRef.current) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0)) {
|
|
248
|
+
// console.log(
|
|
249
|
+
// "onLayout",
|
|
250
|
+
// recyclerViewManager.getWindowSize(),
|
|
251
|
+
// event.nativeEvent.layout
|
|
252
|
+
// );
|
|
253
|
+
recyclerViewContext.layout();
|
|
254
|
+
}
|
|
255
|
+
} },
|
|
256
|
+
react_1.default.createElement(CompatScrollView, tslib_1.__assign({}, rest, { horizontal: horizontal, ref: scrollViewRef, onScroll: animatedEvent,
|
|
257
|
+
// TODO: evaluate perf
|
|
258
|
+
maintainVisibleContentPosition: maintainVisibleContentPositionInternal, refreshControl: refreshControl }, overrideProps),
|
|
259
|
+
maintainVisibleContentPositionInternal && (react_1.default.createElement(ScrollAnchor_1.ScrollAnchor, { scrollAnchorRef: scrollAnchorRef })),
|
|
260
|
+
renderHeader,
|
|
261
|
+
viewToMeasureBoundedSize,
|
|
262
|
+
react_1.default.createElement(ViewHolderCollection_1.ViewHolderCollection, { viewHolderCollectionRef: viewHolderCollectionRef, data: data, horizontal: horizontal, renderStack: recyclerViewManager.getRenderStack(), getLayout: function (index) { return recyclerViewManager.getLayout(index); }, refHolder: refHolder, onSizeChanged: validateItemSize, renderItem: renderItem, extraData: extraData, onCommitLayoutEffect: function () {
|
|
263
|
+
applyInitialScrollIndex();
|
|
264
|
+
parentRecyclerViewContext === null || parentRecyclerViewContext === void 0 ? void 0 : parentRecyclerViewContext.unmarkChildLayoutAsPending(recyclerViewId);
|
|
265
|
+
onCommitLayoutEffect === null || onCommitLayoutEffect === void 0 ? void 0 : onCommitLayoutEffect();
|
|
266
|
+
}, onCommitEffect: function () {
|
|
267
|
+
applyInitialScrollIndex();
|
|
268
|
+
checkBounds();
|
|
269
|
+
recyclerViewManager.computeItemViewability();
|
|
270
|
+
recyclerViewManager.disableRecycling = Boolean(disableRecycling);
|
|
271
|
+
}, CellRendererComponent: CellRendererComponent, ItemSeparatorComponent: ItemSeparatorComponent, getChildContainerLayout: function () {
|
|
272
|
+
return recyclerViewManager.hasLayout()
|
|
273
|
+
? recyclerViewManager.getChildContainerDimensions()
|
|
274
|
+
: undefined;
|
|
275
|
+
} }),
|
|
276
|
+
renderEmpty,
|
|
277
|
+
renderFooter),
|
|
278
|
+
stickyHeaders)));
|
|
279
|
+
};
|
|
280
|
+
// Create and export the memoized, forwarded ref component
|
|
281
|
+
var RecyclerView = react_1.default.memo((0, react_1.forwardRef)(RecyclerViewComponent));
|
|
282
|
+
exports.RecyclerView = RecyclerView;
|
|
283
|
+
//# sourceMappingURL=RecyclerView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecyclerView.js","sourceRoot":"","sources":["../../src/recyclerview/RecyclerView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { CompatScroller } from "./components/CompatScroller";
|
|
3
|
+
export interface RecyclerViewContext {
|
|
4
|
+
layout: () => void;
|
|
5
|
+
getRef: () => React.Ref<any>;
|
|
6
|
+
getScrollViewRef: () => React.RefObject<CompatScroller | null>;
|
|
7
|
+
markChildLayoutAsPending: (id: string) => void;
|
|
8
|
+
unmarkChildLayoutAsPending: (id: string) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const RecyclerViewContextProvider: import("react").Provider<RecyclerViewContext | undefined>;
|
|
11
|
+
export declare function useRecyclerViewContext(): RecyclerViewContext | undefined;
|
|
12
|
+
//# sourceMappingURL=RecyclerViewContextProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecyclerViewContextProvider.d.ts","sourceRoot":"","sources":["../../src/recyclerview/RecyclerViewContextProvider.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,gBAAgB,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/D,wBAAwB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,0BAA0B,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAMD,eAAO,MAAM,2BAA2B,2DAAuC,CAAC;AAChF,wBAAgB,sBAAsB,oCAErC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useRecyclerViewContext = exports.RecyclerViewContextProvider = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var RecyclerViewContextInstance = (0, react_1.createContext)(undefined);
|
|
6
|
+
exports.RecyclerViewContextProvider = RecyclerViewContextInstance.Provider;
|
|
7
|
+
function useRecyclerViewContext() {
|
|
8
|
+
return (0, react_1.useContext)(RecyclerViewContextInstance);
|
|
9
|
+
}
|
|
10
|
+
exports.useRecyclerViewContext = useRecyclerViewContext;
|
|
11
|
+
//# sourceMappingURL=RecyclerViewContextProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecyclerViewContextProvider.js","sourceRoot":"","sources":["../../src/recyclerview/RecyclerViewContextProvider.ts"],"names":[],"mappings":";;;AAAA,+BAAkD;AAWlD,IAAM,2BAA2B,GAAG,IAAA,qBAAa,EAE/C,SAAS,CAAC,CAAC;AAEA,QAAA,2BAA2B,GAAG,2BAA2B,CAAC,QAAQ,CAAC;AAChF,SAAgB,sBAAsB;IACpC,OAAO,IAAA,kBAAU,EAAC,2BAA2B,CAAC,CAAC;AACjD,CAAC;AAFD,wDAEC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ConsecutiveNumbers } from "./helpers/ConsecutiveNumbers";
|
|
2
|
+
import { RVDimension, RVLayoutInfo } from "./layout-managers/LayoutManager";
|
|
3
|
+
import { RecyclerViewProps } from "./RecyclerViewProps";
|
|
4
|
+
import { Velocity } from "./helpers/EngagedIndicesTracker";
|
|
5
|
+
export declare class RecyclerViewManager<T> {
|
|
6
|
+
private initialDrawBatchSize;
|
|
7
|
+
private engagedIndicesTracker;
|
|
8
|
+
private recycleKeyManager;
|
|
9
|
+
private layoutManager?;
|
|
10
|
+
private renderStack;
|
|
11
|
+
private isFirstLayoutComplete;
|
|
12
|
+
private hasRenderedProgressively;
|
|
13
|
+
private props;
|
|
14
|
+
private itemViewabilityManager;
|
|
15
|
+
disableRecycling: boolean;
|
|
16
|
+
firstItemOffset: number;
|
|
17
|
+
constructor(props: RecyclerViewProps<T>);
|
|
18
|
+
private updateRenderStack;
|
|
19
|
+
updateProps(props: RecyclerViewProps<T>): void;
|
|
20
|
+
/**
|
|
21
|
+
* Updates the scroll offset and returns the engaged indices if any
|
|
22
|
+
* @param offset
|
|
23
|
+
* @param velocity
|
|
24
|
+
*/
|
|
25
|
+
updateScrollOffset(offset: number, velocity?: Velocity): ConsecutiveNumbers | undefined;
|
|
26
|
+
getIsFirstLayoutComplete(): boolean;
|
|
27
|
+
getLayout(index: number): import("./layout-managers/LayoutManager").RVLayout;
|
|
28
|
+
getChildContainerDimensions(): RVDimension;
|
|
29
|
+
getRenderStack(): Map<number, string>;
|
|
30
|
+
getWindowSize(): RVDimension;
|
|
31
|
+
getLastScrollOffset(): number;
|
|
32
|
+
getAbsoluteLastScrollOffset(): number;
|
|
33
|
+
updateLayoutParams(windowSize: RVDimension, firstItemOffset: number): void;
|
|
34
|
+
hasLayout(): boolean;
|
|
35
|
+
getVisibleIndices(): ConsecutiveNumbers;
|
|
36
|
+
getEngagedIndices(): ConsecutiveNumbers;
|
|
37
|
+
modifyChildrenLayout(layoutInfo: RVLayoutInfo[], dataLength: number): boolean;
|
|
38
|
+
computeItemViewability(): void;
|
|
39
|
+
recordInteraction(): void;
|
|
40
|
+
recomputeViewableItems(): void;
|
|
41
|
+
processDataUpdate(): void;
|
|
42
|
+
recomputeEngagedIndices(): ConsecutiveNumbers | undefined;
|
|
43
|
+
dispose(): void;
|
|
44
|
+
getInitialScrollIndex(): number | undefined;
|
|
45
|
+
getDataLength(): number;
|
|
46
|
+
private getLayoutManagerClass;
|
|
47
|
+
private applyInitialScrollAdjustment;
|
|
48
|
+
private renderProgressively;
|
|
49
|
+
private getItemType;
|
|
50
|
+
private getStableId;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=RecyclerViewManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecyclerViewManager.d.ts","sourceRoot":"","sources":["../../src/recyclerview/RecyclerViewManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EACL,WAAW,EACX,YAAY,EAEb,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAGL,QAAQ,EACT,MAAM,iCAAiC,CAAC;AAIzC,qBAAa,mBAAmB,CAAC,CAAC;IAChC,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,qBAAqB,CAA0B;IACvD,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,aAAa,CAAC,CAAkB;IAExC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,sBAAsB,CAAwB;IAE/C,gBAAgB,UAAS;IACzB,eAAe,SAAK;gBAEf,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IASvC,OAAO,CAAC,iBAAiB,CAgCvB;IAEF,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAWvC;;;;OAIG;IACH,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,QAAQ,GAClB,kBAAkB,GAAG,SAAS;IAgBjC,wBAAwB;IAIxB,SAAS,CAAC,KAAK,EAAE,MAAM;IAUvB,2BAA2B;IAS3B,cAAc;IAId,aAAa;IAUb,mBAAmB;IAKnB,2BAA2B;IAI3B,kBAAkB,CAAC,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM;IA2CnE,SAAS;IAIT,iBAAiB;IASjB,iBAAiB;IAIjB,oBAAoB,CAClB,UAAU,EAAE,YAAY,EAAE,EAC1B,UAAU,EAAE,MAAM,GACjB,OAAO;IAkBV,sBAAsB;IAUtB,iBAAiB;IAIjB,sBAAsB;IAItB,iBAAiB;IAWjB,uBAAuB,IAAI,kBAAkB,GAAG,SAAS;IAIzD,OAAO;IAIP,qBAAqB;IASrB,aAAa;IAIb,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,4BAA4B;IA8BpC,OAAO,CAAC,mBAAmB;IAgC3B,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;CAMpB"}
|