virtual-scroller 1.10.1 → 1.11.0
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/CHANGELOG.md +16 -0
- package/README.md +48 -24
- package/bundle/virtual-scroller-dom.js +1 -1
- package/bundle/virtual-scroller-dom.js.map +1 -1
- package/bundle/virtual-scroller-react.js +1 -1
- package/bundle/virtual-scroller-react.js.map +1 -1
- package/bundle/virtual-scroller.js +1 -1
- package/bundle/virtual-scroller.js.map +1 -1
- package/commonjs/DOM/VirtualScroller.js +5 -0
- package/commonjs/DOM/VirtualScroller.js.map +1 -1
- package/commonjs/ItemHeights.js +1 -1
- package/commonjs/ItemHeights.js.map +1 -1
- package/commonjs/Layout.js +2 -2
- package/commonjs/Layout.js.map +1 -1
- package/commonjs/VirtualScroller.constructor.js +6 -4
- package/commonjs/VirtualScroller.constructor.js.map +1 -1
- package/commonjs/VirtualScroller.items.js +11 -10
- package/commonjs/VirtualScroller.items.js.map +1 -1
- package/commonjs/VirtualScroller.js +10 -3
- package/commonjs/VirtualScroller.js.map +1 -1
- package/commonjs/VirtualScroller.layout.js +2 -2
- package/commonjs/VirtualScroller.layout.js.map +1 -1
- package/commonjs/VirtualScroller.state.js +27 -17
- package/commonjs/VirtualScroller.state.js.map +1 -1
- package/commonjs/react/VirtualScroller.js +26 -11
- package/commonjs/react/VirtualScroller.js.map +1 -1
- package/commonjs/react/{useOnItemStateChange.js → useSetItemState.js} +7 -7
- package/commonjs/react/useSetItemState.js.map +1 -0
- package/commonjs/react/useVirtualScroller.js +2 -1
- package/commonjs/react/useVirtualScroller.js.map +1 -1
- package/commonjs/utility/fillArray.js +18 -0
- package/commonjs/utility/fillArray.js.map +1 -0
- package/dom/index.d.ts +7 -6
- package/index.d.ts +16 -15
- package/modules/DOM/VirtualScroller.js +5 -0
- package/modules/DOM/VirtualScroller.js.map +1 -1
- package/modules/ItemHeights.js +1 -1
- package/modules/ItemHeights.js.map +1 -1
- package/modules/Layout.js +2 -2
- package/modules/Layout.js.map +1 -1
- package/modules/VirtualScroller.constructor.js +6 -4
- package/modules/VirtualScroller.constructor.js.map +1 -1
- package/modules/VirtualScroller.items.js +10 -10
- package/modules/VirtualScroller.items.js.map +1 -1
- package/modules/VirtualScroller.js +10 -3
- package/modules/VirtualScroller.js.map +1 -1
- package/modules/VirtualScroller.layout.js +2 -2
- package/modules/VirtualScroller.layout.js.map +1 -1
- package/modules/VirtualScroller.state.js +24 -15
- package/modules/VirtualScroller.state.js.map +1 -1
- package/modules/react/VirtualScroller.js +26 -11
- package/modules/react/VirtualScroller.js.map +1 -1
- package/modules/react/{useOnItemStateChange.js → useSetItemState.js} +6 -6
- package/modules/react/useSetItemState.js.map +1 -0
- package/modules/react/useVirtualScroller.js +2 -1
- package/modules/react/useVirtualScroller.js.map +1 -1
- package/modules/utility/fillArray.js +11 -0
- package/modules/utility/fillArray.js.map +1 -0
- package/package.json +1 -1
- package/react/index.d.ts +14 -8
- package/source/DOM/VirtualScroller.js +4 -0
- package/source/ItemHeights.js +1 -1
- package/source/Layout.js +3 -3
- package/source/VirtualScroller.constructor.js +5 -3
- package/source/VirtualScroller.items.js +16 -8
- package/source/VirtualScroller.js +8 -2
- package/source/VirtualScroller.layout.js +2 -2
- package/source/VirtualScroller.state.js +20 -12
- package/source/react/VirtualScroller.js +25 -10
- package/source/react/{useOnItemStateChange.js → useSetItemState.js} +5 -5
- package/source/react/useVirtualScroller.js +2 -0
- package/source/utility/fillArray.js +8 -0
- package/commonjs/react/useOnItemStateChange.js.map +0 -1
- package/modules/react/useOnItemStateChange.js.map +0 -1
|
@@ -7,18 +7,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = createStateHelpers;
|
|
9
9
|
|
|
10
|
+
var _fillArray = _interopRequireDefault(require("./utility/fillArray.js"));
|
|
11
|
+
|
|
10
12
|
var _debug = _interopRequireWildcard(require("./utility/debug.js"));
|
|
11
13
|
|
|
12
14
|
var _BeforeResize = require("./BeforeResize.js");
|
|
13
15
|
|
|
14
16
|
var _getStateSnapshot = _interopRequireDefault(require("./utility/getStateSnapshot.js"));
|
|
15
17
|
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
17
|
-
|
|
18
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
19
|
|
|
20
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
21
|
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
23
|
+
|
|
22
24
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
23
25
|
|
|
24
26
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -49,14 +51,16 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
49
51
|
function createStateHelpers(_ref) {
|
|
50
52
|
var _this = this;
|
|
51
53
|
|
|
52
|
-
var
|
|
54
|
+
var initialState = _ref.state,
|
|
55
|
+
getInitialItemState = _ref.getInitialItemState,
|
|
53
56
|
onStateChange = _ref.onStateChange,
|
|
54
57
|
render = _ref.render,
|
|
55
58
|
initialItems = _ref.items;
|
|
56
59
|
this.onStateChange = onStateChange;
|
|
57
60
|
this._render = render;
|
|
61
|
+
this.getInitialItemState = getInitialItemState;
|
|
58
62
|
|
|
59
|
-
this.
|
|
63
|
+
this._setItemState = function (i, newItemState) {
|
|
60
64
|
if ((0, _debug.isDebug)()) {
|
|
61
65
|
(0, _debug["default"])('~ Item state changed ~');
|
|
62
66
|
(0, _debug["default"])('Item', i); // Uses `JSON.stringify()` here instead of just outputting the JSON objects as is
|
|
@@ -106,11 +110,13 @@ function createStateHelpers(_ref) {
|
|
|
106
110
|
};
|
|
107
111
|
|
|
108
112
|
this.getInitialState = function () {
|
|
109
|
-
if (
|
|
110
|
-
return getRestoredState.call(_this,
|
|
113
|
+
if (initialState) {
|
|
114
|
+
return getRestoredState.call(_this, initialState);
|
|
111
115
|
}
|
|
112
116
|
|
|
113
|
-
return getInitialStateFromScratch.call(_this
|
|
117
|
+
return getInitialStateFromScratch.call(_this, {
|
|
118
|
+
getInitialItemState: getInitialItemState
|
|
119
|
+
});
|
|
114
120
|
};
|
|
115
121
|
|
|
116
122
|
this.useState = function (_ref2) {
|
|
@@ -175,18 +181,22 @@ function createStateHelpers(_ref) {
|
|
|
175
181
|
/**
|
|
176
182
|
* Returns the initial state of the `VirtualScroller` "from scratch".
|
|
177
183
|
* (i.e. not from a previously saved one).
|
|
184
|
+
* @param {function} [options.getInitialItemState] — Gets initial item state.
|
|
178
185
|
* @return {object}
|
|
179
186
|
*/
|
|
180
187
|
|
|
181
188
|
|
|
182
|
-
function getInitialStateFromScratch() {
|
|
189
|
+
function getInitialStateFromScratch(_ref3) {
|
|
190
|
+
var getInitialItemState = _ref3.getInitialItemState;
|
|
183
191
|
var items = initialItems;
|
|
184
192
|
|
|
185
193
|
var state = _objectSpread(_objectSpread({}, getInitialLayoutState.call(this, items, {
|
|
186
|
-
|
|
194
|
+
beforeStart: true
|
|
187
195
|
})), {}, {
|
|
188
196
|
items: items,
|
|
189
|
-
itemStates: new Array(items.length)
|
|
197
|
+
itemStates: (0, _fillArray["default"])(new Array(items.length), function (i) {
|
|
198
|
+
return getInitialItemState(items[i]);
|
|
199
|
+
})
|
|
190
200
|
});
|
|
191
201
|
|
|
192
202
|
if ((0, _debug.isDebug)()) {
|
|
@@ -241,29 +251,29 @@ function createStateHelpers(_ref) {
|
|
|
241
251
|
})) {
|
|
242
252
|
(0, _debug.warn)('Reset Layout');
|
|
243
253
|
state = _objectSpread(_objectSpread({}, state), getInitialLayoutState.call(this, state.items, {
|
|
244
|
-
|
|
254
|
+
beforeStart: false
|
|
245
255
|
}));
|
|
246
256
|
}
|
|
247
257
|
|
|
248
258
|
return state;
|
|
249
259
|
}
|
|
250
260
|
|
|
251
|
-
function getInitialLayoutState(items,
|
|
261
|
+
function getInitialLayoutState(items, _ref4) {
|
|
252
262
|
var _this2 = this;
|
|
253
263
|
|
|
254
|
-
var
|
|
264
|
+
var beforeStart = _ref4.beforeStart;
|
|
255
265
|
var itemsCount = items.length;
|
|
256
266
|
|
|
257
267
|
var getColumnsCount = function getColumnsCount() {
|
|
258
268
|
return _this2.getActualColumnsCount();
|
|
259
269
|
};
|
|
260
270
|
|
|
261
|
-
var columnsCount =
|
|
271
|
+
var columnsCount = beforeStart ? this.layout.getInitialLayoutValueWithFallback('columnsCount', getColumnsCount, 1) : getColumnsCount();
|
|
262
272
|
|
|
263
273
|
var _this$layout$getIniti = this.layout.getInitialLayoutValues({
|
|
264
274
|
itemsCount: itemsCount,
|
|
265
275
|
columnsCount: this.getActualColumnsCount(),
|
|
266
|
-
|
|
276
|
+
beforeStart: beforeStart
|
|
267
277
|
}),
|
|
268
278
|
firstShownItemIndex = _this$layout$getIniti.firstShownItemIndex,
|
|
269
279
|
lastShownItemIndex = _this$layout$getIniti.lastShownItemIndex,
|
|
@@ -295,8 +305,8 @@ function createStateHelpers(_ref) {
|
|
|
295
305
|
//
|
|
296
306
|
|
|
297
307
|
|
|
298
|
-
function isStateColumnsCountMismatch(state,
|
|
299
|
-
var columnsCount =
|
|
308
|
+
function isStateColumnsCountMismatch(state, _ref5) {
|
|
309
|
+
var columnsCount = _ref5.columnsCount;
|
|
300
310
|
var stateColumnsCount = state.columnsCount || 1;
|
|
301
311
|
|
|
302
312
|
if (stateColumnsCount !== columnsCount) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualScroller.state.js","names":["createStateHelpers","state","onStateChange","render","initialItems","items","_render","_onItemStateChange","i","newItemState","isDebug","log","JSON","stringify","getState","itemStates","newItemsWillBeRendered","itemStatesThatChangedWhileNewItemsWereBeingRendered","String","_getState","updateState","stateUpdate","getStateSnapshot","_isSettingNewItems","reportError","undefined","previousState","_updateState","getInitialState","getRestoredState","call","getInitialStateFromScratch","useState","_isActive","Error","_usesCustomStateStorage","useDefaultStateStorage","defaultGetState","bind","defaultUpdateState","setInitialState","defaultSetInitialState","newState","onRender","getInitialLayoutState","initialLayout","Array","length","firstShownItemIndex","lastShownItemIndex","cleanUpBeforeResizeState","verticalSpacing","isStateColumnsCountMismatch","columnsCount","getActualColumnsCount","warn","itemsCount","getColumnsCount","layout","getInitialLayoutValueWithFallback","getInitialLayoutValues","beforeItemsHeight","afterItemsHeight","itemHeights","onBeforeShowItems","getActualColumnsCountForState","stateColumnsCount","Math","floor"],"sources":["../source/VirtualScroller.state.js"],"sourcesContent":["import log, { warn, isDebug, reportError } from './utility/debug.js'\r\nimport { cleanUpBeforeResizeState } from './BeforeResize.js'\r\nimport getStateSnapshot from './utility/getStateSnapshot.js'\r\n\r\n// There're three main places where state is updated:\r\n//\r\n// * On scroll.\r\n// * On window resize.\r\n// * On set new items.\r\n//\r\n// State updates may be \"asynchronous\" (like in React), in which case the\r\n// corresponding operation is \"pending\" until the state update is applied.\r\n//\r\n// If there's a \"pending\" window resize or a \"pending\" update of the set of items,\r\n// then \"on scroll\" updates aren't dispatched.\r\n//\r\n// If there's a \"pending\" on scroll update and the window is resize or a new set\r\n// of items is set, then that \"pending\" on scroll update gets overwritten.\r\n//\r\n// If there's a \"pending\" update of the set of items, then window resize handler\r\n// sees that \"pending\" update and dispatches its own state update so that the\r\n// \"pending\" state update originating from `setItems()` is not lost.\r\n//\r\n// If there's a \"pending\" window resize, and a new set of items is set,\r\n// then the state update of the window resize handler gets overwritten.\r\n\r\nexport default function createStateHelpers({\r\n\tstate,\r\n\tonStateChange,\r\n\trender,\r\n\titems: initialItems\r\n}) {\r\n\tthis.onStateChange = onStateChange\r\n\tthis._render = render\r\n\r\n\tthis._onItemStateChange = (i, newItemState) => {\r\n\t\tif (isDebug()) {\r\n\t\t\tlog('~ Item state changed ~')\r\n\t\t\tlog('Item', i)\r\n\t\t\t// Uses `JSON.stringify()` here instead of just outputting the JSON objects as is\r\n\t\t\t// because outputting JSON objects as is would show different results later when\r\n\t\t\t// the developer inspects those in the web browser console if those state objects\r\n\t\t\t// get modified in between they've been output to the console and the developer\r\n\t\t\t// decided to inspect them.\r\n\t\t\tlog('Previous state' + '\\n' + JSON.stringify(this.getState().itemStates[i], null, 2))\r\n\t\t\tlog('New state' + '\\n' + JSON.stringify(newItemState, null, 2))\r\n\t\t}\r\n\r\n\t\tthis.getState().itemStates[i] = newItemState\r\n\r\n\t\t// Schedule the item state update for after the new items have been rendered.\r\n\t\tif (this.newItemsWillBeRendered) {\r\n\t\t\tif (!this.itemStatesThatChangedWhileNewItemsWereBeingRendered) {\r\n\t\t\t\tthis.itemStatesThatChangedWhileNewItemsWereBeingRendered = {}\r\n\t\t\t}\r\n\t\t\tthis.itemStatesThatChangedWhileNewItemsWereBeingRendered[String(i)] = newItemState\r\n\t\t}\r\n\t}\r\n\r\n\tthis.getState = () => this._getState()\r\n\r\n\tthis.updateState = (stateUpdate) => {\r\n\t\tif (isDebug()) {\r\n\t\t\tlog('~ Set state ~')\r\n\t\t\tlog(getStateSnapshot(stateUpdate))\r\n\t\t}\r\n\r\n\t\t// Ensure that a non-initial `stateUpdate` can only contain an `items`\r\n\t\t// property when it comes from a `setItems()` call.\r\n\t\tif (stateUpdate.items) {\r\n\t\t\tif (!this._isSettingNewItems) {\r\n\t\t\t\treportError('A `stateUpdate` can only contain `items` property as a result of calling `.setItems()`')\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._isSettingNewItems = undefined\r\n\r\n\t\t// Update `state`.\r\n\t\tthis.previousState = this.getState()\r\n\t\tthis._updateState(stateUpdate)\r\n\t}\r\n\r\n\tthis.getInitialState = () => {\r\n\t\tif (state) {\r\n\t\t\treturn getRestoredState.call(this, state)\r\n\t\t}\r\n\t\treturn getInitialStateFromScratch.call(this)\r\n\t}\r\n\r\n\tthis.useState = ({\r\n\t\tgetState,\r\n\t\tupdateState\r\n\t}) => {\r\n\t\tif (this._isActive) {\r\n\t\t\tthrow new Error('[virtual-scroller] `VirtualScroller` has already been started')\r\n\t\t}\r\n\r\n\t\tif (this._getState) {\r\n\t\t\tthrow new Error('[virtual-scroller] Custom state storage has already been configured')\r\n\t\t}\r\n\r\n\t\tif (render) {\r\n\t\t\tthrow new Error('[virtual-scroller] Creating a `VirtualScroller` class instance with a `render()` parameter means using the default (internal) state storage')\r\n\t\t}\r\n\r\n\t\tif (!getState || !updateState) {\r\n\t\t\tthrow new Error('[virtual-scroller] When using a custom state storage, one must supply both `getState()` and `updateState()` functions')\r\n\t\t}\r\n\r\n\t\tthis._usesCustomStateStorage = true\r\n\r\n\t\tthis._getState = getState\r\n\t\tthis._updateState = updateState\r\n\t}\r\n\r\n\tthis.useDefaultStateStorage = () => {\r\n\t\tif (!render) {\r\n\t\t\tthrow new Error('[virtual-scroller] When using the default (internal) state management, one must supply a `render(state, prevState)` function parameter')\r\n\t\t}\r\n\r\n\t\t// Create default `getState()`/`updateState()` functions.\r\n\t\tthis._getState = defaultGetState.bind(this)\r\n\t\tthis._updateState = defaultUpdateState.bind(this)\r\n\r\n\t\t// When `state` is stored externally, a developer is responsible for\r\n\t\t// initializing it with the initial value.\r\n\t\t// Otherwise, if default state management is used, set the initial state now.\r\n\t\tconst setInitialState = defaultSetInitialState.bind(this)\r\n\t\tsetInitialState(this.getInitialState())\r\n\t}\r\n\r\n\tfunction defaultGetState() {\r\n\t\treturn this.state\r\n\t}\r\n\r\n\tfunction defaultSetInitialState(newState) {\r\n\t\tthis.state = newState\r\n\t}\r\n\r\n\tfunction defaultUpdateState(stateUpdate) {\r\n\t\t// Because this variant of `.updateState()` is \"synchronous\" (immediate),\r\n\t\t// it can be written like `...prevState`, and no state updates would be lost.\r\n\t\t// But if it was \"asynchronous\" (not immediate), then `...prevState`\r\n\t\t// wouldn't work in all cases, because it could be stale in cases\r\n\t\t// when more than a single `updateState()` call is made before\r\n\t\t// the state actually updates, making `prevState` stale.\r\n\t\tthis.state = {\r\n\t\t\t...this.state,\r\n\t\t\t...stateUpdate\r\n\t\t}\r\n\r\n\t\trender(this.state, this.previousState)\r\n\r\n\t\tthis.onRender()\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the initial state of the `VirtualScroller` \"from scratch\".\r\n\t * (i.e. not from a previously saved one).\r\n\t * @return {object}\r\n\t */\r\n\tfunction getInitialStateFromScratch() {\r\n\t\tconst items = initialItems\r\n\t\tconst state = {\r\n\t\t\t...getInitialLayoutState.call(this, items, { initialLayout: true }),\r\n\t\t\titems,\r\n\t\t\titemStates: new Array(items.length)\r\n\t\t}\r\n\t\tif (isDebug()) {\r\n\t\t\tlog('Initial state (autogenerated)', getStateSnapshot(state))\r\n\t\t}\r\n\t\tlog('First shown item index', state.firstShownItemIndex)\r\n\t\tlog('Last shown item index', state.lastShownItemIndex)\r\n\t\treturn state\r\n\t}\r\n\r\n\tfunction getRestoredState(state) {\r\n\t\tif (isDebug()) {\r\n\t\t\tlog('Restore state', getStateSnapshot(state))\r\n\t\t}\r\n\r\n\t\t// Possibly clean up \"before resize\" property in state.\r\n\t\t// \"Before resize\" state property is cleaned up when all \"before resize\" item heights\r\n\t\t// have been re-measured in an asynchronous `this.updateState({ beforeResize: undefined })` call.\r\n\t\t// If `VirtualScroller` state was snapshotted externally before that `this.updateState()` call\r\n\t\t// has been applied, then \"before resize\" property might have not been cleaned up properly.\r\n\t\tstate = cleanUpBeforeResizeState(state)\r\n\r\n\t\t// Reset `verticalSpacing` so that it re-measures it after the list\r\n\t\t// has been rendered initially. The rationale is that a previously captured\r\n\t\t// inter-item vertical spacing can't be \"trusted\" in a sense that the user\r\n\t\t// might have resized the window after the previous `state` has been snapshotted.\r\n\t\t// If the user has resized the window, then changing window width might have\r\n\t\t// activated different CSS `@media()` \"queries\" resulting in a potentially different\r\n\t\t// vertical spacing when the `VirtualScroller` is re-created with such previously\r\n\t\t// snapshotted state.\r\n\t\tstate = {\r\n\t\t\t...state,\r\n\t\t\tverticalSpacing: undefined\r\n\t\t}\r\n\r\n\t\t// `this.verticalSpacing` acts as a \"true\" source for vertical spacing value.\r\n\t\t// Vertical spacing is also stored in `state` but `state` updates could be\r\n\t\t// \"asynchronous\" (not applied immediately) and `this.onUpdateShownItemIndexes()`\r\n\t\t// requires vertical spacing to be correct at any time, without any delays.\r\n\t\t// So, vertical spacing is also duplicated in `state`, but the \"true\" source\r\n\t\t// is still `this.verticalSpacing`.\r\n\t\t//\r\n\t\t// `this.verticalSpacing` must be initialized before calling `this.getInitialStateFromScratch()`\r\n\t\t// because `this.getInitialStateFromScratch()` uses `this.verticalSpacing` in its calculations.\r\n\t\t//\r\n\t\t// With the code above, `state.verticalSpacing` is always gonna be `undefined`,\r\n\t\t// so commented out this code. It's safer to just re-measure vertical spacing\r\n\t\t// from scratch when `VirtualScroller` is mounted.\r\n\t\t//\r\n\t\t// this.verticalSpacing = state ? state.verticalSpacing : undefined\r\n\r\n\t\t// Check if the actual `columnsCount` on the screen matches the one from state.\r\n\t\tif (isStateColumnsCountMismatch(state, {\r\n\t\t\tcolumnsCount: this.getActualColumnsCount()\r\n\t\t})) {\r\n\t\t\twarn('Reset Layout')\r\n\t\t\tstate = {\r\n\t\t\t\t...state,\r\n\t\t\t\t...getInitialLayoutState.call(this, state.items, { initialLayout: false })\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn state\r\n\t}\r\n\r\n\tfunction getInitialLayoutState(items, { initialLayout }) {\r\n\t\tconst itemsCount = items.length\r\n\r\n\t\tconst getColumnsCount = () => this.getActualColumnsCount()\r\n\r\n\t\tconst columnsCount = initialLayout\r\n\t\t\t? this.layout.getInitialLayoutValueWithFallback(\r\n\t\t\t\t'columnsCount',\r\n\t\t\t\tgetColumnsCount,\r\n\t\t\t\t1\r\n\t\t\t)\r\n\t\t\t: getColumnsCount()\r\n\r\n\t\tconst {\r\n\t\t\tfirstShownItemIndex,\r\n\t\t\tlastShownItemIndex,\r\n\t\t\tbeforeItemsHeight,\r\n\t\t\tafterItemsHeight\r\n\t\t} = this.layout.getInitialLayoutValues({\r\n\t\t\titemsCount,\r\n\t\t\tcolumnsCount: this.getActualColumnsCount(),\r\n\t\t\tinitialLayout\r\n\t\t})\r\n\r\n\t\tconst itemHeights = new Array(itemsCount)\r\n\r\n\t\t// Optionally preload items to be rendered.\r\n\t\tthis.onBeforeShowItems(\r\n\t\t\titems,\r\n\t\t\titemHeights,\r\n\t\t\tfirstShownItemIndex,\r\n\t\t\tlastShownItemIndex\r\n\t\t)\r\n\r\n\t\treturn {\r\n\t\t\titemHeights,\r\n\t\t\tcolumnsCount: this.getActualColumnsCountForState(),\r\n\t\t\tverticalSpacing: this.verticalSpacing,\r\n\t\t\tfirstShownItemIndex,\r\n\t\t\tlastShownItemIndex,\r\n\t\t\tbeforeItemsHeight,\r\n\t\t\tafterItemsHeight\r\n\t\t}\r\n\t}\r\n\r\n\t// Checks if the actual `columnsCount` on the screen matches the one from state.\r\n\t//\r\n\t// For example, a developer might snapshot `VirtualScroller` state\r\n\t// when the user navigates from the page containing the list\r\n\t// in order to later restore the list's state when the user goes \"Back\".\r\n\t// But, the user might have also resized the window while being on that\r\n\t// \"other\" page, and when they come \"Back\", their snapshotted state\r\n\t// no longer qualifies. Well, it does qualify, but only partially.\r\n\t// For example, `itemStates` are still valid, but first and last shown\r\n\t// item indexes aren't.\r\n\t//\r\n\tfunction isStateColumnsCountMismatch(state, { columnsCount }) {\r\n\t\tconst stateColumnsCount = state.columnsCount || 1\r\n\t\tif (stateColumnsCount !== columnsCount) {\r\n\t\t\twarn('~ Columns Count changed from', stateColumnsCount, 'to', columnsCount, '~')\r\n\t\t\treturn true\r\n\t\t}\r\n\t\tconst firstShownItemIndex = Math.floor(state.firstShownItemIndex / columnsCount) * columnsCount\r\n\t\tif (firstShownItemIndex !== state.firstShownItemIndex) {\r\n\t\t\twarn('~ First Shown Item Index', state.firstShownItemIndex, 'is not divisible by Columns Count', columnsCount, '~')\r\n\t\t\treturn true\r\n\t\t}\r\n\t}\r\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VirtualScroller.state.js","names":["createStateHelpers","initialState","state","getInitialItemState","onStateChange","render","initialItems","items","_render","_setItemState","i","newItemState","isDebug","log","JSON","stringify","getState","itemStates","newItemsWillBeRendered","itemStatesThatChangedWhileNewItemsWereBeingRendered","String","_getState","updateState","stateUpdate","getStateSnapshot","_isSettingNewItems","reportError","undefined","previousState","_updateState","getInitialState","getRestoredState","call","getInitialStateFromScratch","useState","_isActive","Error","_usesCustomStateStorage","useDefaultStateStorage","defaultGetState","bind","defaultUpdateState","setInitialState","defaultSetInitialState","newState","onRender","getInitialLayoutState","beforeStart","fillArray","Array","length","firstShownItemIndex","lastShownItemIndex","cleanUpBeforeResizeState","verticalSpacing","isStateColumnsCountMismatch","columnsCount","getActualColumnsCount","warn","itemsCount","getColumnsCount","layout","getInitialLayoutValueWithFallback","getInitialLayoutValues","beforeItemsHeight","afterItemsHeight","itemHeights","onBeforeShowItems","getActualColumnsCountForState","stateColumnsCount","Math","floor"],"sources":["../source/VirtualScroller.state.js"],"sourcesContent":["import fillArray from './utility/fillArray.js'\r\nimport log, { warn, isDebug, reportError } from './utility/debug.js'\r\nimport { cleanUpBeforeResizeState } from './BeforeResize.js'\r\nimport getStateSnapshot from './utility/getStateSnapshot.js'\r\n\r\n// There're three main places where state is updated:\r\n//\r\n// * On scroll.\r\n// * On window resize.\r\n// * On set new items.\r\n//\r\n// State updates may be \"asynchronous\" (like in React), in which case the\r\n// corresponding operation is \"pending\" until the state update is applied.\r\n//\r\n// If there's a \"pending\" window resize or a \"pending\" update of the set of items,\r\n// then \"on scroll\" updates aren't dispatched.\r\n//\r\n// If there's a \"pending\" on scroll update and the window is resize or a new set\r\n// of items is set, then that \"pending\" on scroll update gets overwritten.\r\n//\r\n// If there's a \"pending\" update of the set of items, then window resize handler\r\n// sees that \"pending\" update and dispatches its own state update so that the\r\n// \"pending\" state update originating from `setItems()` is not lost.\r\n//\r\n// If there's a \"pending\" window resize, and a new set of items is set,\r\n// then the state update of the window resize handler gets overwritten.\r\n\r\nexport default function createStateHelpers({\r\n\tstate: initialState,\r\n\tgetInitialItemState,\r\n\tonStateChange,\r\n\trender,\r\n\titems: initialItems\r\n}) {\r\n\tthis.onStateChange = onStateChange\r\n\tthis._render = render\r\n\r\n\tthis.getInitialItemState = getInitialItemState\r\n\r\n\tthis._setItemState = (i, newItemState) => {\r\n\t\tif (isDebug()) {\r\n\t\t\tlog('~ Item state changed ~')\r\n\t\t\tlog('Item', i)\r\n\t\t\t// Uses `JSON.stringify()` here instead of just outputting the JSON objects as is\r\n\t\t\t// because outputting JSON objects as is would show different results later when\r\n\t\t\t// the developer inspects those in the web browser console if those state objects\r\n\t\t\t// get modified in between they've been output to the console and the developer\r\n\t\t\t// decided to inspect them.\r\n\t\t\tlog('Previous state' + '\\n' + JSON.stringify(this.getState().itemStates[i], null, 2))\r\n\t\t\tlog('New state' + '\\n' + JSON.stringify(newItemState, null, 2))\r\n\t\t}\r\n\r\n\t\tthis.getState().itemStates[i] = newItemState\r\n\r\n\t\t// Schedule the item state update for after the new items have been rendered.\r\n\t\tif (this.newItemsWillBeRendered) {\r\n\t\t\tif (!this.itemStatesThatChangedWhileNewItemsWereBeingRendered) {\r\n\t\t\t\tthis.itemStatesThatChangedWhileNewItemsWereBeingRendered = {}\r\n\t\t\t}\r\n\t\t\tthis.itemStatesThatChangedWhileNewItemsWereBeingRendered[String(i)] = newItemState\r\n\t\t}\r\n\t}\r\n\r\n\tthis.getState = () => this._getState()\r\n\r\n\tthis.updateState = (stateUpdate) => {\r\n\t\tif (isDebug()) {\r\n\t\t\tlog('~ Set state ~')\r\n\t\t\tlog(getStateSnapshot(stateUpdate))\r\n\t\t}\r\n\r\n\t\t// Ensure that a non-initial `stateUpdate` can only contain an `items`\r\n\t\t// property when it comes from a `setItems()` call.\r\n\t\tif (stateUpdate.items) {\r\n\t\t\tif (!this._isSettingNewItems) {\r\n\t\t\t\treportError('A `stateUpdate` can only contain `items` property as a result of calling `.setItems()`')\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._isSettingNewItems = undefined\r\n\r\n\t\t// Update `state`.\r\n\t\tthis.previousState = this.getState()\r\n\t\tthis._updateState(stateUpdate)\r\n\t}\r\n\r\n\tthis.getInitialState = () => {\r\n\t\tif (initialState) {\r\n\t\t\treturn getRestoredState.call(this, initialState)\r\n\t\t}\r\n\t\treturn getInitialStateFromScratch.call(this, { getInitialItemState })\r\n\t}\r\n\r\n\tthis.useState = ({\r\n\t\tgetState,\r\n\t\tupdateState\r\n\t}) => {\r\n\t\tif (this._isActive) {\r\n\t\t\tthrow new Error('[virtual-scroller] `VirtualScroller` has already been started')\r\n\t\t}\r\n\r\n\t\tif (this._getState) {\r\n\t\t\tthrow new Error('[virtual-scroller] Custom state storage has already been configured')\r\n\t\t}\r\n\r\n\t\tif (render) {\r\n\t\t\tthrow new Error('[virtual-scroller] Creating a `VirtualScroller` class instance with a `render()` parameter means using the default (internal) state storage')\r\n\t\t}\r\n\r\n\t\tif (!getState || !updateState) {\r\n\t\t\tthrow new Error('[virtual-scroller] When using a custom state storage, one must supply both `getState()` and `updateState()` functions')\r\n\t\t}\r\n\r\n\t\tthis._usesCustomStateStorage = true\r\n\r\n\t\tthis._getState = getState\r\n\t\tthis._updateState = updateState\r\n\t}\r\n\r\n\tthis.useDefaultStateStorage = () => {\r\n\t\tif (!render) {\r\n\t\t\tthrow new Error('[virtual-scroller] When using the default (internal) state management, one must supply a `render(state, prevState)` function parameter')\r\n\t\t}\r\n\r\n\t\t// Create default `getState()`/`updateState()` functions.\r\n\t\tthis._getState = defaultGetState.bind(this)\r\n\t\tthis._updateState = defaultUpdateState.bind(this)\r\n\r\n\t\t// When `state` is stored externally, a developer is responsible for\r\n\t\t// initializing it with the initial value.\r\n\t\t// Otherwise, if default state management is used, set the initial state now.\r\n\t\tconst setInitialState = defaultSetInitialState.bind(this)\r\n\t\tsetInitialState(this.getInitialState())\r\n\t}\r\n\r\n\tfunction defaultGetState() {\r\n\t\treturn this.state\r\n\t}\r\n\r\n\tfunction defaultSetInitialState(newState) {\r\n\t\tthis.state = newState\r\n\t}\r\n\r\n\tfunction defaultUpdateState(stateUpdate) {\r\n\t\t// Because this variant of `.updateState()` is \"synchronous\" (immediate),\r\n\t\t// it can be written like `...prevState`, and no state updates would be lost.\r\n\t\t// But if it was \"asynchronous\" (not immediate), then `...prevState`\r\n\t\t// wouldn't work in all cases, because it could be stale in cases\r\n\t\t// when more than a single `updateState()` call is made before\r\n\t\t// the state actually updates, making `prevState` stale.\r\n\t\tthis.state = {\r\n\t\t\t...this.state,\r\n\t\t\t...stateUpdate\r\n\t\t}\r\n\r\n\t\trender(this.state, this.previousState)\r\n\r\n\t\tthis.onRender()\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the initial state of the `VirtualScroller` \"from scratch\".\r\n\t * (i.e. not from a previously saved one).\r\n\t * @param {function} [options.getInitialItemState] — Gets initial item state.\r\n\t * @return {object}\r\n\t */\r\n\tfunction getInitialStateFromScratch({ getInitialItemState }) {\r\n\t\tconst items = initialItems\r\n\r\n\t\tconst state = {\r\n\t\t\t...getInitialLayoutState.call(this, items, { beforeStart: true }),\r\n\t\t\titems,\r\n\t\t\titemStates: fillArray(new Array(items.length), (i) => getInitialItemState(items[i]))\r\n\t\t}\r\n\r\n\t\tif (isDebug()) {\r\n\t\t\tlog('Initial state (autogenerated)', getStateSnapshot(state))\r\n\t\t}\r\n\t\tlog('First shown item index', state.firstShownItemIndex)\r\n\t\tlog('Last shown item index', state.lastShownItemIndex)\r\n\r\n\t\treturn state\r\n\t}\r\n\r\n\tfunction getRestoredState(state) {\r\n\t\tif (isDebug()) {\r\n\t\t\tlog('Restore state', getStateSnapshot(state))\r\n\t\t}\r\n\r\n\t\t// Possibly clean up \"before resize\" property in state.\r\n\t\t// \"Before resize\" state property is cleaned up when all \"before resize\" item heights\r\n\t\t// have been re-measured in an asynchronous `this.updateState({ beforeResize: undefined })` call.\r\n\t\t// If `VirtualScroller` state was snapshotted externally before that `this.updateState()` call\r\n\t\t// has been applied, then \"before resize\" property might have not been cleaned up properly.\r\n\t\tstate = cleanUpBeforeResizeState(state)\r\n\r\n\t\t// Reset `verticalSpacing` so that it re-measures it after the list\r\n\t\t// has been rendered initially. The rationale is that a previously captured\r\n\t\t// inter-item vertical spacing can't be \"trusted\" in a sense that the user\r\n\t\t// might have resized the window after the previous `state` has been snapshotted.\r\n\t\t// If the user has resized the window, then changing window width might have\r\n\t\t// activated different CSS `@media()` \"queries\" resulting in a potentially different\r\n\t\t// vertical spacing when the `VirtualScroller` is re-created with such previously\r\n\t\t// snapshotted state.\r\n\t\tstate = {\r\n\t\t\t...state,\r\n\t\t\tverticalSpacing: undefined\r\n\t\t}\r\n\r\n\t\t// `this.verticalSpacing` acts as a \"true\" source for vertical spacing value.\r\n\t\t// Vertical spacing is also stored in `state` but `state` updates could be\r\n\t\t// \"asynchronous\" (not applied immediately) and `this.onUpdateShownItemIndexes()`\r\n\t\t// requires vertical spacing to be correct at any time, without any delays.\r\n\t\t// So, vertical spacing is also duplicated in `state`, but the \"true\" source\r\n\t\t// is still `this.verticalSpacing`.\r\n\t\t//\r\n\t\t// `this.verticalSpacing` must be initialized before calling `this.getInitialStateFromScratch()`\r\n\t\t// because `this.getInitialStateFromScratch()` uses `this.verticalSpacing` in its calculations.\r\n\t\t//\r\n\t\t// With the code above, `state.verticalSpacing` is always gonna be `undefined`,\r\n\t\t// so commented out this code. It's safer to just re-measure vertical spacing\r\n\t\t// from scratch when `VirtualScroller` is mounted.\r\n\t\t//\r\n\t\t// this.verticalSpacing = state ? state.verticalSpacing : undefined\r\n\r\n\t\t// Check if the actual `columnsCount` on the screen matches the one from state.\r\n\t\tif (isStateColumnsCountMismatch(state, {\r\n\t\t\tcolumnsCount: this.getActualColumnsCount()\r\n\t\t})) {\r\n\t\t\twarn('Reset Layout')\r\n\t\t\tstate = {\r\n\t\t\t\t...state,\r\n\t\t\t\t...getInitialLayoutState.call(this, state.items, { beforeStart: false })\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn state\r\n\t}\r\n\r\n\tfunction getInitialLayoutState(items, { beforeStart }) {\r\n\t\tconst itemsCount = items.length\r\n\r\n\t\tconst getColumnsCount = () => this.getActualColumnsCount()\r\n\r\n\t\tconst columnsCount = beforeStart\r\n\t\t\t? this.layout.getInitialLayoutValueWithFallback(\r\n\t\t\t\t'columnsCount',\r\n\t\t\t\tgetColumnsCount,\r\n\t\t\t\t1\r\n\t\t\t)\r\n\t\t\t: getColumnsCount()\r\n\r\n\t\tconst {\r\n\t\t\tfirstShownItemIndex,\r\n\t\t\tlastShownItemIndex,\r\n\t\t\tbeforeItemsHeight,\r\n\t\t\tafterItemsHeight\r\n\t\t} = this.layout.getInitialLayoutValues({\r\n\t\t\titemsCount,\r\n\t\t\tcolumnsCount: this.getActualColumnsCount(),\r\n\t\t\tbeforeStart\r\n\t\t})\r\n\r\n\t\tconst itemHeights = new Array(itemsCount)\r\n\r\n\t\t// Optionally preload items to be rendered.\r\n\t\tthis.onBeforeShowItems(\r\n\t\t\titems,\r\n\t\t\titemHeights,\r\n\t\t\tfirstShownItemIndex,\r\n\t\t\tlastShownItemIndex\r\n\t\t)\r\n\r\n\t\treturn {\r\n\t\t\titemHeights,\r\n\t\t\tcolumnsCount: this.getActualColumnsCountForState(),\r\n\t\t\tverticalSpacing: this.verticalSpacing,\r\n\t\t\tfirstShownItemIndex,\r\n\t\t\tlastShownItemIndex,\r\n\t\t\tbeforeItemsHeight,\r\n\t\t\tafterItemsHeight\r\n\t\t}\r\n\t}\r\n\r\n\t// Checks if the actual `columnsCount` on the screen matches the one from state.\r\n\t//\r\n\t// For example, a developer might snapshot `VirtualScroller` state\r\n\t// when the user navigates from the page containing the list\r\n\t// in order to later restore the list's state when the user goes \"Back\".\r\n\t// But, the user might have also resized the window while being on that\r\n\t// \"other\" page, and when they come \"Back\", their snapshotted state\r\n\t// no longer qualifies. Well, it does qualify, but only partially.\r\n\t// For example, `itemStates` are still valid, but first and last shown\r\n\t// item indexes aren't.\r\n\t//\r\n\tfunction isStateColumnsCountMismatch(state, { columnsCount }) {\r\n\t\tconst stateColumnsCount = state.columnsCount || 1\r\n\t\tif (stateColumnsCount !== columnsCount) {\r\n\t\t\twarn('~ Columns Count changed from', stateColumnsCount, 'to', columnsCount, '~')\r\n\t\t\treturn true\r\n\t\t}\r\n\t\tconst firstShownItemIndex = Math.floor(state.firstShownItemIndex / columnsCount) * columnsCount\r\n\t\tif (firstShownItemIndex !== state.firstShownItemIndex) {\r\n\t\t\twarn('~ First Shown Item Index', state.firstShownItemIndex, 'is not divisible by Columns Count', columnsCount, '~')\r\n\t\t\treturn true\r\n\t\t}\r\n\t}\r\n}"],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ var _useInstanceMethods = _interopRequireDefault(require("./useInstanceMethods.j
|
|
|
21
21
|
|
|
22
22
|
var _useItemKeys2 = _interopRequireDefault(require("./useItemKeys.js"));
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var _useSetItemState = _interopRequireDefault(require("./useSetItemState.js"));
|
|
25
25
|
|
|
26
26
|
var _useOnItemHeightChange = _interopRequireDefault(require("./useOnItemHeightChange.js"));
|
|
27
27
|
|
|
@@ -31,7 +31,7 @@ var _useClassName = _interopRequireDefault(require("./useClassName.js"));
|
|
|
31
31
|
|
|
32
32
|
var _useStyle = _interopRequireDefault(require("./useStyle.js"));
|
|
33
33
|
|
|
34
|
-
var _excluded = ["as", "items", "itemComponent", "itemComponentProps", "estimatedItemHeight", "getEstimatedItemHeight", "getEstimatedVisibleItemRowsCount", "bypass", "tbody", "preserveScrollPosition", "preserveScrollPositionOnPrependItems", "measureItemsBatchSize", "scrollableContainer", "getScrollableContainer", "getColumnsCount", "getItemId", "className", "onMount", "onItemFirstRender", "onItemInitialRender", "initialScrollPosition", "onScrollPositionChange", "onStateChange", "initialState"];
|
|
34
|
+
var _excluded = ["as", "items", "itemComponent", "itemComponentProps", "estimatedItemHeight", "getEstimatedItemHeight", "getEstimatedVisibleItemRowsCount", "bypass", "tbody", "preserveScrollPosition", "preserveScrollPositionOnPrependItems", "measureItemsBatchSize", "scrollableContainer", "getScrollableContainer", "getColumnsCount", "getItemId", "className", "onMount", "onItemFirstRender", "onItemInitialRender", "initialScrollPosition", "onScrollPositionChange", "onStateChange", "initialState", "getInitialItemState"];
|
|
35
35
|
|
|
36
36
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
37
37
|
|
|
@@ -70,6 +70,7 @@ function VirtualScroller(_ref, ref) {
|
|
|
70
70
|
onScrollPositionChange = _ref.onScrollPositionChange,
|
|
71
71
|
onStateChange = _ref.onStateChange,
|
|
72
72
|
initialState = _ref.initialState,
|
|
73
|
+
getInitialItemState = _ref.getInitialItemState,
|
|
73
74
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
74
75
|
|
|
75
76
|
// List items "container" DOM Element reference.
|
|
@@ -99,6 +100,7 @@ function VirtualScroller(_ref, ref) {
|
|
|
99
100
|
getItemId: getItemId,
|
|
100
101
|
AsComponent: AsComponent,
|
|
101
102
|
initialState: initialState,
|
|
103
|
+
getInitialItemState: getInitialItemState,
|
|
102
104
|
onStateChange: onStateChange
|
|
103
105
|
}, {
|
|
104
106
|
container: container
|
|
@@ -134,11 +136,11 @@ function VirtualScroller(_ref, ref) {
|
|
|
134
136
|
getItemId: getItemId
|
|
135
137
|
}),
|
|
136
138
|
getItemKey = _useItemKeys.getItemKey,
|
|
137
|
-
updateItemKeysForNewItems = _useItemKeys.updateItemKeysForNewItems; // Cache per-item `
|
|
139
|
+
updateItemKeysForNewItems = _useItemKeys.updateItemKeysForNewItems; // Cache per-item `setItemState` functions' "references"
|
|
138
140
|
// so that item components don't get re-rendered needlessly.
|
|
139
141
|
|
|
140
142
|
|
|
141
|
-
var
|
|
143
|
+
var getSetItemState = (0, _useSetItemState["default"])({
|
|
142
144
|
items: items,
|
|
143
145
|
virtualScroller: virtualScroller
|
|
144
146
|
}); // Cache per-item `onItemHeightChange` functions' "references"
|
|
@@ -203,17 +205,29 @@ function VirtualScroller(_ref, ref) {
|
|
|
203
205
|
style: style
|
|
204
206
|
}), renderedItems.map(function (item, i) {
|
|
205
207
|
if (i >= firstShownItemIndex && i <= lastShownItemIndex) {
|
|
206
|
-
// Passing `item` as `children` property is legacy and is deprecated.
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
//
|
|
208
|
+
// * Passing `item` as `children` property is legacy and is deprecated.
|
|
209
|
+
// If version `2.x` is published in some hypothetical future,
|
|
210
|
+
// the `item` and `itemIndex` properties should be moved below
|
|
211
|
+
// `{...itemComponentProps}`.
|
|
212
|
+
//
|
|
213
|
+
// * Passing `itemIndex` property is legacy and is deprecated.
|
|
214
|
+
// The rationale is that setting new `items` on a React component
|
|
215
|
+
// is an asynchronous operation, so when a user obtains `itemIndex`,
|
|
216
|
+
// they don't know which `items` list does that index correspond to,
|
|
217
|
+
// therefore making it useless, or even buggy if used incorreclty.
|
|
218
|
+
//
|
|
219
|
+
// * Passing `onStateChange` property for legacy reasons.
|
|
220
|
+
// The new property name is `setState`.
|
|
221
|
+
// The old property name `onStateChange` is deprecated.
|
|
222
|
+
//
|
|
210
223
|
return /*#__PURE__*/_react["default"].createElement(Component, _extends({
|
|
211
224
|
item: item,
|
|
212
225
|
itemIndex: i
|
|
213
226
|
}, itemComponentProps, {
|
|
214
227
|
key: getItemKey(item, i),
|
|
215
228
|
state: itemStates && itemStates[i],
|
|
216
|
-
|
|
229
|
+
setState: getSetItemState(i),
|
|
230
|
+
onStateChange: getSetItemState(i),
|
|
217
231
|
onHeightChange: getOnItemHeightChange(i)
|
|
218
232
|
}), item);
|
|
219
233
|
}
|
|
@@ -264,7 +278,7 @@ VirtualScroller.propTypes = {
|
|
|
264
278
|
onStateChange: _propTypes["default"].func,
|
|
265
279
|
initialState: _propTypes["default"].shape({
|
|
266
280
|
items: _propTypes["default"].arrayOf(_propTypes["default"].object).isRequired,
|
|
267
|
-
itemStates: _propTypes["default"].arrayOf(_propTypes["default"].any),
|
|
281
|
+
itemStates: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
|
|
268
282
|
firstShownItemIndex: _propTypes["default"].number.isRequired,
|
|
269
283
|
lastShownItemIndex: _propTypes["default"].number.isRequired,
|
|
270
284
|
beforeItemsHeight: _propTypes["default"].number.isRequired,
|
|
@@ -272,7 +286,8 @@ VirtualScroller.propTypes = {
|
|
|
272
286
|
itemHeights: _propTypes["default"].arrayOf(_propTypes["default"].number).isRequired,
|
|
273
287
|
columnsCount: _propTypes["default"].number,
|
|
274
288
|
verticalSpacing: _propTypes["default"].number
|
|
275
|
-
})
|
|
289
|
+
}),
|
|
290
|
+
getInitialItemState: _propTypes["default"].func
|
|
276
291
|
};
|
|
277
292
|
VirtualScroller.defaultProps = {
|
|
278
293
|
as: 'div'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualScroller.js","names":["VirtualScroller","ref","AsComponent","as","items","Component","itemComponent","itemComponentProps","estimatedItemHeight","getEstimatedItemHeight","getEstimatedVisibleItemRowsCount","bypass","tbody","preserveScrollPosition","preserveScrollPositionOnPrependItems","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","className","onMount","onItemFirstRender","onItemInitialRender","initialScrollPosition","onScrollPositionChange","onStateChange","initialState","rest","container","useRef","virtualScroller","useVirtualScroller","_initialState","useMemo","getInitialState","useState","onRender","getState","updateState","useVirtualScrollerStartStop","useItemKeys","getItemKey","updateItemKeysForNewItems","getOnItemStateChange","useOnItemStateChange","getOnItemHeightChange","useOnItemHeightChange","useHandleItemsChange","useInstanceMethods","useLayoutEffect","useClassName","style","useStyle","renderedItems","itemStates","firstShownItemIndex","lastShownItemIndex","map","item","i","React","forwardRef","elementType","PropTypes","oneOfType","string","func","object","propTypes","arrayOf","any","isRequired","number","bool","shape","beforeItemsHeight","afterItemsHeight","itemHeights","columnsCount","verticalSpacing","defaultProps"],"sources":["../../source/react/VirtualScroller.js"],"sourcesContent":["import React, { useRef, useMemo, useLayoutEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport useState from './useState.js'\r\nimport useVirtualScroller from './useVirtualScroller.js'\r\nimport useVirtualScrollerStartStop from './useVirtualScrollerStartStop.js'\r\nimport useInstanceMethods from './useInstanceMethods.js'\r\nimport useItemKeys from './useItemKeys.js'\r\nimport useOnItemStateChange from './useOnItemStateChange.js'\r\nimport useOnItemHeightChange from './useOnItemHeightChange.js'\r\nimport useHandleItemsChange from './useHandleItemsChange.js'\r\nimport useClassName from './useClassName.js'\r\nimport useStyle from './useStyle.js'\r\n\r\nfunction VirtualScroller({\r\n\tas: AsComponent,\r\n\titems,\r\n\titemComponent: Component,\r\n\titemComponentProps,\r\n\t// `estimatedItemHeight` property name is deprecated,\r\n\t// use `getEstimatedItemHeight` property instead.\r\n\testimatedItemHeight,\r\n\tgetEstimatedItemHeight,\r\n\tgetEstimatedVisibleItemRowsCount,\r\n\tbypass,\r\n\ttbody,\r\n\t// `preserveScrollPosition` property name is deprecated,\r\n\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\tpreserveScrollPosition,\r\n\tpreserveScrollPositionOnPrependItems,\r\n\tmeasureItemsBatchSize,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer,\r\n\tgetScrollableContainer,\r\n\tgetColumnsCount,\r\n\tgetItemId,\r\n\tclassName,\r\n\tonMount,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender,\r\n\tonItemInitialRender,\r\n\tinitialScrollPosition,\r\n\tonScrollPositionChange,\r\n\tonStateChange,\r\n\tinitialState,\r\n\t...rest\r\n}, ref) {\r\n\t// List items \"container\" DOM Element reference.\r\n\tconst container = useRef()\r\n\r\n\t// Create a `VirtualScroller` instance.\r\n\tconst virtualScroller = useVirtualScroller({\r\n\t\titems,\r\n\t\t// `estimatedItemHeight` property name is deprecated,\r\n\t\t// use `getEstimatedItemHeight` property instead.\r\n\t\testimatedItemHeight,\r\n\t\tgetEstimatedItemHeight,\r\n\t\tgetEstimatedVisibleItemRowsCount,\r\n\t\tbypass,\r\n\t\t// bypassBatchSize,\r\n\t\ttbody,\r\n\t\tonItemInitialRender,\r\n\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\tonItemFirstRender,\r\n\t\tinitialScrollPosition,\r\n\t\tonScrollPositionChange,\r\n\t\tmeasureItemsBatchSize,\r\n\t\t// `scrollableContainer` property is deprecated.\r\n\t\t// Use `getScrollableContainer()` property instead.\r\n\t\tscrollableContainer,\r\n\t\tgetScrollableContainer,\r\n\t\tgetColumnsCount,\r\n\t\tgetItemId,\r\n\t\tAsComponent,\r\n\t\tinitialState,\r\n\t\tonStateChange\r\n\t}, {\r\n\t\tcontainer\r\n\t})\r\n\r\n\t// Only compute the initial state once.\r\n\tconst _initialState = useMemo(() => {\r\n\t\treturn virtualScroller.getInitialState()\r\n\t}, [])\r\n\r\n\t// Use React's `useState()` hook for managing `VirtualScroller`'s state lifecycle.\r\n\t// This way, React will re-render the component on every state update.\r\n\tconst {\r\n\t\tgetState,\r\n\t\tupdateState\r\n\t} = useState({\r\n\t\tinitialState: _initialState,\r\n\t\tonRender: virtualScroller.onRender,\r\n\t\titems\r\n\t})\r\n\r\n\t// Use custom (external) state storage in the `VirtualScroller`.\r\n\tuseMemo(() => {\r\n\t\tvirtualScroller.useState({\r\n\t\t\tgetState,\r\n\t\t\tupdateState\r\n\t\t})\r\n\t}, [])\r\n\r\n\t// Start `VirtualScroller` on mount.\r\n\t// Stop `VirtualScroller` on unmount.\r\n\tuseVirtualScrollerStartStop(virtualScroller)\r\n\r\n\t// List items are rendered with `key`s so that React doesn't\r\n\t// \"reuse\" `itemComponent`s in cases when `items` are changed.\r\n\tconst {\r\n\t\tgetItemKey,\r\n\t\tupdateItemKeysForNewItems\r\n\t} = useItemKeys({\r\n\t\tgetItemId\r\n\t})\r\n\r\n\t// Cache per-item `onItemStateChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemStateChange = useOnItemStateChange({\r\n\t\titems,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Cache per-item `onItemHeightChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemHeightChange = useOnItemHeightChange({\r\n\t\titems,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Detect if `items` have changed.\r\n\tuseHandleItemsChange(items, {\r\n\t\tvirtualScroller,\r\n\t\t// `preserveScrollPosition` property name is deprecated,\r\n\t\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\t\tpreserveScrollPosition,\r\n\t\tpreserveScrollPositionOnPrependItems,\r\n\t\tupdateItemKeysForNewItems\r\n\t})\r\n\r\n\t// Add instance methods to the React component.\r\n\tuseInstanceMethods(ref, {\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\t// (deprecated)\r\n\t\t// `onMount()` option is deprecated due to no longer being used.\r\n\t\t// If someone thinks there's a valid use case for it, create an issue.\r\n\t\tif (onMount) {\r\n\t\t\tonMount()\r\n\t\t}\r\n\t}, [])\r\n\r\n\t// `willRender()` function is no longer used.\r\n\t//\r\n\t// // `getSnapshotBeforeUpdate()` is called right before `componentDidUpdate()`.\r\n\t// // A hook equivalent/workaround for `getSnapshotBeforeUpdate()`:\r\n\t// // https://github.com/facebook/react/issues/15221#issuecomment-583448887\r\n\t// //\r\n\t// getSnapshotBeforeUpdate(prevProps, prevState) {\r\n\t// \tif (this.state !== prevState) {\r\n\t// \t\tthis.willRender(this.state, prevState)\r\n\t// \t}\r\n\t// \t// Returns `null` to avoid React warning:\r\n\t// \t// \"A snapshot value (or null) must be returned. You have returned undefined\".\r\n\t// \treturn null\r\n\t// }\r\n\r\n\tclassName = useClassName(className, {\r\n\t\ttbody\r\n\t})\r\n\r\n\tconst style = useStyle({\r\n\t\ttbody,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\tconst {\r\n\t\titems: renderedItems,\r\n\t\titemStates,\r\n\t\tfirstShownItemIndex,\r\n\t\tlastShownItemIndex\r\n\t} = virtualScroller.getState()\r\n\r\n\treturn (\r\n\t\t<AsComponent\r\n\t\t\t{...rest}\r\n\t\t\tref={container}\r\n\t\t\tclassName={className}\r\n\t\t\tstyle={style}>\r\n\t\t\t{renderedItems.map((item, i) => {\r\n\t\t\t\tif (i >= firstShownItemIndex && i <= lastShownItemIndex) {\r\n\t\t\t\t\t// Passing `item` as `children` property is legacy and is deprecated.\r\n\t\t\t\t\t// If version `2.x` is published in some hypothetical future,\r\n\t\t\t\t\t// the `item` and `itemIndex` properties should be moved below\r\n\t\t\t\t\t// `{...itemComponentProps}`.\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<Component\r\n\t\t\t\t\t\t\titem={item}\r\n\t\t\t\t\t\t\titemIndex={i}\r\n\t\t\t\t\t\t\t{...itemComponentProps}\r\n\t\t\t\t\t\t\tkey={getItemKey(item, i)}\r\n\t\t\t\t\t\t\tstate={itemStates && itemStates[i]}\r\n\t\t\t\t\t\t\tonStateChange={getOnItemStateChange(i)}\r\n\t\t\t\t\t\t\tonHeightChange={getOnItemHeightChange(i)}>\r\n\t\t\t\t\t\t\t{item}\r\n\t\t\t\t\t\t</Component>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\treturn null\r\n\t\t\t})}\r\n\t\t</AsComponent>\r\n\t)\r\n}\r\n\r\nVirtualScroller = React.forwardRef(VirtualScroller)\r\n\r\nexport default VirtualScroller\r\n\r\n// `PropTypes.elementType` is available in some version of `prop-types`.\r\n// https://github.com/facebook/prop-types/issues/200\r\nconst elementType = PropTypes.elementType || PropTypes.oneOfType([\r\n\tPropTypes.string,\r\n\tPropTypes.func,\r\n\tPropTypes.object\r\n])\r\n\r\nVirtualScroller.propTypes = {\r\n\tas: elementType,\r\n\titems: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n\titemComponent: elementType.isRequired,\r\n\titemComponentProps: PropTypes.object,\r\n\t// `estimatedItemHeight` property name is deprecated,\r\n\t// use `getEstimatedItemHeight` property instead.\r\n\testimatedItemHeight: PropTypes.number,\r\n\tgetEstimatedItemHeight: PropTypes.func,\r\n\tgetEstimatedVisibleItemRowsCount: PropTypes.func,\r\n\tbypass: PropTypes.bool,\r\n\t// bypassBatchSize: PropTypes.number,\r\n\ttbody: PropTypes.bool,\r\n\tpreserveScrollPositionOnPrependItems: PropTypes.bool,\r\n\t// `preserveScrollPosition` property name is deprecated,\r\n\t// use `preserveScrollPositionOnPrependItems` instead.\r\n\tpreserveScrollPosition: PropTypes.bool,\r\n\tmeasureItemsBatchSize: PropTypes.number,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer: PropTypes.any,\r\n\tgetScrollableContainer: PropTypes.func,\r\n\tgetColumnsCount: PropTypes.func,\r\n\tgetItemId: PropTypes.func,\r\n\tclassName: PropTypes.string,\r\n\tonMount: PropTypes.func,\r\n\tonItemInitialRender: PropTypes.func,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender: PropTypes.func,\r\n\tinitialScrollPosition: PropTypes.number,\r\n\tonScrollPositionChange: PropTypes.func,\r\n\tonStateChange: PropTypes.func,\r\n\tinitialState: PropTypes.shape({\r\n\t\titems: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n\t\titemStates: PropTypes.arrayOf(PropTypes.any),\r\n\t\tfirstShownItemIndex: PropTypes.number.isRequired,\r\n\t\tlastShownItemIndex: PropTypes.number.isRequired,\r\n\t\tbeforeItemsHeight: PropTypes.number.isRequired,\r\n\t\tafterItemsHeight: PropTypes.number.isRequired,\r\n\t\titemHeights: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n\t\tcolumnsCount: PropTypes.number,\r\n\t\tverticalSpacing: PropTypes.number\r\n\t})\r\n}\r\n\r\nVirtualScroller.defaultProps = {\r\n\tas: 'div'\r\n}\r\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;AAEA,SAASA,eAAT,OAiCGC,GAjCH,EAiCQ;EAAA,IAhCHC,WAgCG,QAhCPC,EAgCO;EAAA,IA/BPC,KA+BO,QA/BPA,KA+BO;EAAA,IA9BQC,SA8BR,QA9BPC,aA8BO;EAAA,IA7BPC,kBA6BO,QA7BPA,kBA6BO;EAAA,IA1BPC,mBA0BO,QA1BPA,mBA0BO;EAAA,IAzBPC,sBAyBO,QAzBPA,sBAyBO;EAAA,IAxBPC,gCAwBO,QAxBPA,gCAwBO;EAAA,IAvBPC,MAuBO,QAvBPA,MAuBO;EAAA,IAtBPC,KAsBO,QAtBPA,KAsBO;EAAA,IAnBPC,sBAmBO,QAnBPA,sBAmBO;EAAA,IAlBPC,oCAkBO,QAlBPA,oCAkBO;EAAA,IAjBPC,qBAiBO,QAjBPA,qBAiBO;EAAA,IAdPC,mBAcO,QAdPA,mBAcO;EAAA,IAbPC,sBAaO,QAbPA,sBAaO;EAAA,IAZPC,eAYO,QAZPA,eAYO;EAAA,IAXPC,SAWO,QAXPA,SAWO;EAAA,IAVPC,SAUO,QAVPA,SAUO;EAAA,IATPC,OASO,QATPA,OASO;EAAA,IAPPC,iBAOO,QAPPA,iBAOO;EAAA,IANPC,mBAMO,QANPA,mBAMO;EAAA,IALPC,qBAKO,QALPA,qBAKO;EAAA,IAJPC,sBAIO,QAJPA,sBAIO;EAAA,IAHPC,aAGO,QAHPA,aAGO;EAAA,IAFPC,YAEO,QAFPA,YAEO;EAAA,IADJC,IACI;;EACP;EACA,IAAMC,SAAS,GAAG,IAAAC,aAAA,GAAlB,CAFO,CAIP;;EACA,IAAMC,eAAe,GAAG,IAAAC,8BAAA,EAAmB;IAC1C5B,KAAK,EAALA,KAD0C;IAE1C;IACA;IACAI,mBAAmB,EAAnBA,mBAJ0C;IAK1CC,sBAAsB,EAAtBA,sBAL0C;IAM1CC,gCAAgC,EAAhCA,gCAN0C;IAO1CC,MAAM,EAANA,MAP0C;IAQ1C;IACAC,KAAK,EAALA,KAT0C;IAU1CW,mBAAmB,EAAnBA,mBAV0C;IAW1C;IACAD,iBAAiB,EAAjBA,iBAZ0C;IAa1CE,qBAAqB,EAArBA,qBAb0C;IAc1CC,sBAAsB,EAAtBA,sBAd0C;IAe1CV,qBAAqB,EAArBA,qBAf0C;IAgB1C;IACA;IACAC,mBAAmB,EAAnBA,mBAlB0C;IAmB1CC,sBAAsB,EAAtBA,sBAnB0C;IAoB1CC,eAAe,EAAfA,eApB0C;IAqB1CC,SAAS,EAATA,SArB0C;IAsB1CjB,WAAW,EAAXA,WAtB0C;IAuB1CyB,YAAY,EAAZA,YAvB0C;IAwB1CD,aAAa,EAAbA;EAxB0C,CAAnB,EAyBrB;IACFG,SAAS,EAATA;EADE,CAzBqB,CAAxB,CALO,CAkCP;;EACA,IAAMI,aAAa,GAAG,IAAAC,cAAA,EAAQ,YAAM;IACnC,OAAOH,eAAe,CAACI,eAAhB,EAAP;EACA,CAFqB,EAEnB,EAFmB,CAAtB,CAnCO,CAuCP;EACA;;;EACA,gBAGI,IAAAC,qBAAA,EAAS;IACZT,YAAY,EAAEM,aADF;IAEZI,QAAQ,EAAEN,eAAe,CAACM,QAFd;IAGZjC,KAAK,EAALA;EAHY,CAAT,CAHJ;EAAA,IACCkC,QADD,aACCA,QADD;EAAA,IAECC,WAFD,aAECA,WAFD,CAzCO,CAkDP;;;EACA,IAAAL,cAAA,EAAQ,YAAM;IACbH,eAAe,CAACK,QAAhB,CAAyB;MACxBE,QAAQ,EAARA,QADwB;MAExBC,WAAW,EAAXA;IAFwB,CAAzB;EAIA,CALD,EAKG,EALH,EAnDO,CA0DP;EACA;;EACA,IAAAC,uCAAA,EAA4BT,eAA5B,EA5DO,CA8DP;EACA;;EACA,mBAGI,IAAAU,wBAAA,EAAY;IACftB,SAAS,EAATA;EADe,CAAZ,CAHJ;EAAA,IACCuB,UADD,gBACCA,UADD;EAAA,IAECC,yBAFD,gBAECA,yBAFD,CAhEO,CAuEP;EACA;;;EACA,IAAMC,oBAAoB,GAAG,IAAAC,gCAAA,EAAqB;IACjDzC,KAAK,EAALA,KADiD;IAEjD2B,eAAe,EAAfA;EAFiD,CAArB,CAA7B,CAzEO,CA8EP;EACA;;EACA,IAAMe,qBAAqB,GAAG,IAAAC,iCAAA,EAAsB;IACnD3C,KAAK,EAALA,KADmD;IAEnD2B,eAAe,EAAfA;EAFmD,CAAtB,CAA9B,CAhFO,CAqFP;;EACA,IAAAiB,gCAAA,EAAqB5C,KAArB,EAA4B;IAC3B2B,eAAe,EAAfA,eAD2B;IAE3B;IACA;IACAlB,sBAAsB,EAAtBA,sBAJ2B;IAK3BC,oCAAoC,EAApCA,oCAL2B;IAM3B6B,yBAAyB,EAAzBA;EAN2B,CAA5B,EAtFO,CA+FP;;EACA,IAAAM,8BAAA,EAAmBhD,GAAnB,EAAwB;IACvB8B,eAAe,EAAfA;EADuB,CAAxB;EAIA,IAAAmB,sBAAA,EAAgB,YAAM;IACrB;IACA;IACA;IACA,IAAI7B,OAAJ,EAAa;MACZA,OAAO;IACP;EACD,CAPD,EAOG,EAPH,EApGO,CA6GP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEAD,SAAS,GAAG,IAAA+B,wBAAA,EAAa/B,SAAb,EAAwB;IACnCR,KAAK,EAALA;EADmC,CAAxB,CAAZ;EAIA,IAAMwC,KAAK,GAAG,IAAAC,oBAAA,EAAS;IACtBzC,KAAK,EAALA,KADsB;IAEtBmB,eAAe,EAAfA;EAFsB,CAAT,CAAd;;EAKA,4BAKIA,eAAe,CAACO,QAAhB,EALJ;EAAA,IACQgB,aADR,yBACClD,KADD;EAAA,IAECmD,UAFD,yBAECA,UAFD;EAAA,IAGCC,mBAHD,yBAGCA,mBAHD;EAAA,IAICC,kBAJD,yBAICA,kBAJD;;EAOA,oBACC,gCAAC,WAAD,eACK7B,IADL;IAEC,GAAG,EAAEC,SAFN;IAGC,SAAS,EAAET,SAHZ;IAIC,KAAK,EAAEgC;EAJR,IAKEE,aAAa,CAACI,GAAd,CAAkB,UAACC,IAAD,EAAOC,CAAP,EAAa;IAC/B,IAAIA,CAAC,IAAIJ,mBAAL,IAA4BI,CAAC,IAAIH,kBAArC,EAAyD;MACxD;MACA;MACA;MACA;MACA,oBACC,gCAAC,SAAD;QACC,IAAI,EAAEE,IADP;QAEC,SAAS,EAAEC;MAFZ,GAGKrD,kBAHL;QAIC,GAAG,EAAEmC,UAAU,CAACiB,IAAD,EAAOC,CAAP,CAJhB;QAKC,KAAK,EAAEL,UAAU,IAAIA,UAAU,CAACK,CAAD,CALhC;QAMC,aAAa,EAAEhB,oBAAoB,CAACgB,CAAD,CANpC;QAOC,cAAc,EAAEd,qBAAqB,CAACc,CAAD;MAPtC,IAQED,IARF,CADD;IAYA;;IACD,OAAO,IAAP;EACA,CApBA,CALF,CADD;AA6BA;;AAED3D,eAAe,gBAAG6D,iBAAA,CAAMC,UAAN,CAAiB9D,eAAjB,CAAlB;eAEeA,e,EAEf;AACA;;;;AACA,IAAM+D,WAAW,GAAGC,qBAAA,CAAUD,WAAV,IAAyBC,qBAAA,CAAUC,SAAV,CAAoB,CAChED,qBAAA,CAAUE,MADsD,EAEhEF,qBAAA,CAAUG,IAFsD,EAGhEH,qBAAA,CAAUI,MAHsD,CAApB,CAA7C;;AAMApE,eAAe,CAACqE,SAAhB,GAA4B;EAC3BlE,EAAE,EAAE4D,WADuB;EAE3B3D,KAAK,EAAE4D,qBAAA,CAAUM,OAAV,CAAkBN,qBAAA,CAAUO,GAA5B,EAAiCC,UAFb;EAG3BlE,aAAa,EAAEyD,WAAW,CAACS,UAHA;EAI3BjE,kBAAkB,EAAEyD,qBAAA,CAAUI,MAJH;EAK3B;EACA;EACA5D,mBAAmB,EAAEwD,qBAAA,CAAUS,MAPJ;EAQ3BhE,sBAAsB,EAAEuD,qBAAA,CAAUG,IARP;EAS3BzD,gCAAgC,EAAEsD,qBAAA,CAAUG,IATjB;EAU3BxD,MAAM,EAAEqD,qBAAA,CAAUU,IAVS;EAW3B;EACA9D,KAAK,EAAEoD,qBAAA,CAAUU,IAZU;EAa3B5D,oCAAoC,EAAEkD,qBAAA,CAAUU,IAbrB;EAc3B;EACA;EACA7D,sBAAsB,EAAEmD,qBAAA,CAAUU,IAhBP;EAiB3B3D,qBAAqB,EAAEiD,qBAAA,CAAUS,MAjBN;EAkB3B;EACA;EACAzD,mBAAmB,EAAEgD,qBAAA,CAAUO,GApBJ;EAqB3BtD,sBAAsB,EAAE+C,qBAAA,CAAUG,IArBP;EAsB3BjD,eAAe,EAAE8C,qBAAA,CAAUG,IAtBA;EAuB3BhD,SAAS,EAAE6C,qBAAA,CAAUG,IAvBM;EAwB3B/C,SAAS,EAAE4C,qBAAA,CAAUE,MAxBM;EAyB3B7C,OAAO,EAAE2C,qBAAA,CAAUG,IAzBQ;EA0B3B5C,mBAAmB,EAAEyC,qBAAA,CAAUG,IA1BJ;EA2B3B;EACA7C,iBAAiB,EAAE0C,qBAAA,CAAUG,IA5BF;EA6B3B3C,qBAAqB,EAAEwC,qBAAA,CAAUS,MA7BN;EA8B3BhD,sBAAsB,EAAEuC,qBAAA,CAAUG,IA9BP;EA+B3BzC,aAAa,EAAEsC,qBAAA,CAAUG,IA/BE;EAgC3BxC,YAAY,EAAEqC,qBAAA,CAAUW,KAAV,CAAgB;IAC7BvE,KAAK,EAAE4D,qBAAA,CAAUM,OAAV,CAAkBN,qBAAA,CAAUI,MAA5B,EAAoCI,UADd;IAE7BjB,UAAU,EAAES,qBAAA,CAAUM,OAAV,CAAkBN,qBAAA,CAAUO,GAA5B,CAFiB;IAG7Bf,mBAAmB,EAAEQ,qBAAA,CAAUS,MAAV,CAAiBD,UAHT;IAI7Bf,kBAAkB,EAAEO,qBAAA,CAAUS,MAAV,CAAiBD,UAJR;IAK7BI,iBAAiB,EAAEZ,qBAAA,CAAUS,MAAV,CAAiBD,UALP;IAM7BK,gBAAgB,EAAEb,qBAAA,CAAUS,MAAV,CAAiBD,UANN;IAO7BM,WAAW,EAAEd,qBAAA,CAAUM,OAAV,CAAkBN,qBAAA,CAAUS,MAA5B,EAAoCD,UAPpB;IAQ7BO,YAAY,EAAEf,qBAAA,CAAUS,MARK;IAS7BO,eAAe,EAAEhB,qBAAA,CAAUS;EATE,CAAhB;AAhCa,CAA5B;AA6CAzE,eAAe,CAACiF,YAAhB,GAA+B;EAC9B9E,EAAE,EAAE;AAD0B,CAA/B"}
|
|
1
|
+
{"version":3,"file":"VirtualScroller.js","names":["VirtualScroller","ref","AsComponent","as","items","Component","itemComponent","itemComponentProps","estimatedItemHeight","getEstimatedItemHeight","getEstimatedVisibleItemRowsCount","bypass","tbody","preserveScrollPosition","preserveScrollPositionOnPrependItems","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","className","onMount","onItemFirstRender","onItemInitialRender","initialScrollPosition","onScrollPositionChange","onStateChange","initialState","getInitialItemState","rest","container","useRef","virtualScroller","useVirtualScroller","_initialState","useMemo","getInitialState","useState","onRender","getState","updateState","useVirtualScrollerStartStop","useItemKeys","getItemKey","updateItemKeysForNewItems","getSetItemState","useSetItemState","getOnItemHeightChange","useOnItemHeightChange","useHandleItemsChange","useInstanceMethods","useLayoutEffect","useClassName","style","useStyle","renderedItems","itemStates","firstShownItemIndex","lastShownItemIndex","map","item","i","React","forwardRef","elementType","PropTypes","oneOfType","string","func","object","propTypes","arrayOf","any","isRequired","number","bool","shape","beforeItemsHeight","afterItemsHeight","itemHeights","columnsCount","verticalSpacing","defaultProps"],"sources":["../../source/react/VirtualScroller.js"],"sourcesContent":["import React, { useRef, useMemo, useLayoutEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport useState from './useState.js'\r\nimport useVirtualScroller from './useVirtualScroller.js'\r\nimport useVirtualScrollerStartStop from './useVirtualScrollerStartStop.js'\r\nimport useInstanceMethods from './useInstanceMethods.js'\r\nimport useItemKeys from './useItemKeys.js'\r\nimport useSetItemState from './useSetItemState.js'\r\nimport useOnItemHeightChange from './useOnItemHeightChange.js'\r\nimport useHandleItemsChange from './useHandleItemsChange.js'\r\nimport useClassName from './useClassName.js'\r\nimport useStyle from './useStyle.js'\r\n\r\nfunction VirtualScroller({\r\n\tas: AsComponent,\r\n\titems,\r\n\titemComponent: Component,\r\n\titemComponentProps,\r\n\t// `estimatedItemHeight` property name is deprecated,\r\n\t// use `getEstimatedItemHeight` property instead.\r\n\testimatedItemHeight,\r\n\tgetEstimatedItemHeight,\r\n\tgetEstimatedVisibleItemRowsCount,\r\n\tbypass,\r\n\ttbody,\r\n\t// `preserveScrollPosition` property name is deprecated,\r\n\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\tpreserveScrollPosition,\r\n\tpreserveScrollPositionOnPrependItems,\r\n\tmeasureItemsBatchSize,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer,\r\n\tgetScrollableContainer,\r\n\tgetColumnsCount,\r\n\tgetItemId,\r\n\tclassName,\r\n\tonMount,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender,\r\n\tonItemInitialRender,\r\n\tinitialScrollPosition,\r\n\tonScrollPositionChange,\r\n\tonStateChange,\r\n\tinitialState,\r\n\tgetInitialItemState,\r\n\t...rest\r\n}, ref) {\r\n\t// List items \"container\" DOM Element reference.\r\n\tconst container = useRef()\r\n\r\n\t// Create a `VirtualScroller` instance.\r\n\tconst virtualScroller = useVirtualScroller({\r\n\t\titems,\r\n\t\t// `estimatedItemHeight` property name is deprecated,\r\n\t\t// use `getEstimatedItemHeight` property instead.\r\n\t\testimatedItemHeight,\r\n\t\tgetEstimatedItemHeight,\r\n\t\tgetEstimatedVisibleItemRowsCount,\r\n\t\tbypass,\r\n\t\t// bypassBatchSize,\r\n\t\ttbody,\r\n\t\tonItemInitialRender,\r\n\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\tonItemFirstRender,\r\n\t\tinitialScrollPosition,\r\n\t\tonScrollPositionChange,\r\n\t\tmeasureItemsBatchSize,\r\n\t\t// `scrollableContainer` property is deprecated.\r\n\t\t// Use `getScrollableContainer()` property instead.\r\n\t\tscrollableContainer,\r\n\t\tgetScrollableContainer,\r\n\t\tgetColumnsCount,\r\n\t\tgetItemId,\r\n\t\tAsComponent,\r\n\t\tinitialState,\r\n\t\tgetInitialItemState,\r\n\t\tonStateChange\r\n\t}, {\r\n\t\tcontainer\r\n\t})\r\n\r\n\t// Only compute the initial state once.\r\n\tconst _initialState = useMemo(() => {\r\n\t\treturn virtualScroller.getInitialState()\r\n\t}, [])\r\n\r\n\t// Use React's `useState()` hook for managing `VirtualScroller`'s state lifecycle.\r\n\t// This way, React will re-render the component on every state update.\r\n\tconst {\r\n\t\tgetState,\r\n\t\tupdateState\r\n\t} = useState({\r\n\t\tinitialState: _initialState,\r\n\t\tonRender: virtualScroller.onRender,\r\n\t\titems\r\n\t})\r\n\r\n\t// Use custom (external) state storage in the `VirtualScroller`.\r\n\tuseMemo(() => {\r\n\t\tvirtualScroller.useState({\r\n\t\t\tgetState,\r\n\t\t\tupdateState\r\n\t\t})\r\n\t}, [])\r\n\r\n\t// Start `VirtualScroller` on mount.\r\n\t// Stop `VirtualScroller` on unmount.\r\n\tuseVirtualScrollerStartStop(virtualScroller)\r\n\r\n\t// List items are rendered with `key`s so that React doesn't\r\n\t// \"reuse\" `itemComponent`s in cases when `items` are changed.\r\n\tconst {\r\n\t\tgetItemKey,\r\n\t\tupdateItemKeysForNewItems\r\n\t} = useItemKeys({\r\n\t\tgetItemId\r\n\t})\r\n\r\n\t// Cache per-item `setItemState` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getSetItemState = useSetItemState({\r\n\t\titems,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Cache per-item `onItemHeightChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemHeightChange = useOnItemHeightChange({\r\n\t\titems,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Detect if `items` have changed.\r\n\tuseHandleItemsChange(items, {\r\n\t\tvirtualScroller,\r\n\t\t// `preserveScrollPosition` property name is deprecated,\r\n\t\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\t\tpreserveScrollPosition,\r\n\t\tpreserveScrollPositionOnPrependItems,\r\n\t\tupdateItemKeysForNewItems\r\n\t})\r\n\r\n\t// Add instance methods to the React component.\r\n\tuseInstanceMethods(ref, {\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\t// (deprecated)\r\n\t\t// `onMount()` option is deprecated due to no longer being used.\r\n\t\t// If someone thinks there's a valid use case for it, create an issue.\r\n\t\tif (onMount) {\r\n\t\t\tonMount()\r\n\t\t}\r\n\t}, [])\r\n\r\n\t// `willRender()` function is no longer used.\r\n\t//\r\n\t// // `getSnapshotBeforeUpdate()` is called right before `componentDidUpdate()`.\r\n\t// // A hook equivalent/workaround for `getSnapshotBeforeUpdate()`:\r\n\t// // https://github.com/facebook/react/issues/15221#issuecomment-583448887\r\n\t// //\r\n\t// getSnapshotBeforeUpdate(prevProps, prevState) {\r\n\t// \tif (this.state !== prevState) {\r\n\t// \t\tthis.willRender(this.state, prevState)\r\n\t// \t}\r\n\t// \t// Returns `null` to avoid React warning:\r\n\t// \t// \"A snapshot value (or null) must be returned. You have returned undefined\".\r\n\t// \treturn null\r\n\t// }\r\n\r\n\tclassName = useClassName(className, {\r\n\t\ttbody\r\n\t})\r\n\r\n\tconst style = useStyle({\r\n\t\ttbody,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\tconst {\r\n\t\titems: renderedItems,\r\n\t\titemStates,\r\n\t\tfirstShownItemIndex,\r\n\t\tlastShownItemIndex\r\n\t} = virtualScroller.getState()\r\n\r\n\treturn (\r\n\t\t<AsComponent\r\n\t\t\t{...rest}\r\n\t\t\tref={container}\r\n\t\t\tclassName={className}\r\n\t\t\tstyle={style}>\r\n\t\t\t{renderedItems.map((item, i) => {\r\n\t\t\t\tif (i >= firstShownItemIndex && i <= lastShownItemIndex) {\r\n\t\t\t\t\t// * Passing `item` as `children` property is legacy and is deprecated.\r\n\t\t\t\t\t// If version `2.x` is published in some hypothetical future,\r\n\t\t\t\t\t// the `item` and `itemIndex` properties should be moved below\r\n\t\t\t\t\t// `{...itemComponentProps}`.\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// * Passing `itemIndex` property is legacy and is deprecated.\r\n\t\t\t\t\t// The rationale is that setting new `items` on a React component\r\n\t\t\t\t\t// is an asynchronous operation, so when a user obtains `itemIndex`,\r\n\t\t\t\t\t// they don't know which `items` list does that index correspond to,\r\n\t\t\t\t\t// therefore making it useless, or even buggy if used incorreclty.\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// * Passing `onStateChange` property for legacy reasons.\r\n\t\t\t\t\t// The new property name is `setState`.\r\n\t\t\t\t\t// The old property name `onStateChange` is deprecated.\r\n\t\t\t\t\t//\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<Component\r\n\t\t\t\t\t\t\titem={item}\r\n\t\t\t\t\t\t\titemIndex={i}\r\n\t\t\t\t\t\t\t{...itemComponentProps}\r\n\t\t\t\t\t\t\tkey={getItemKey(item, i)}\r\n\t\t\t\t\t\t\tstate={itemStates && itemStates[i]}\r\n\t\t\t\t\t\t\tsetState={getSetItemState(i)}\r\n\t\t\t\t\t\t\tonStateChange={getSetItemState(i)}\r\n\t\t\t\t\t\t\tonHeightChange={getOnItemHeightChange(i)}>\r\n\t\t\t\t\t\t\t{item}\r\n\t\t\t\t\t\t</Component>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\treturn null\r\n\t\t\t})}\r\n\t\t</AsComponent>\r\n\t)\r\n}\r\n\r\nVirtualScroller = React.forwardRef(VirtualScroller)\r\n\r\nexport default VirtualScroller\r\n\r\n// `PropTypes.elementType` is available in some version of `prop-types`.\r\n// https://github.com/facebook/prop-types/issues/200\r\nconst elementType = PropTypes.elementType || PropTypes.oneOfType([\r\n\tPropTypes.string,\r\n\tPropTypes.func,\r\n\tPropTypes.object\r\n])\r\n\r\nVirtualScroller.propTypes = {\r\n\tas: elementType,\r\n\titems: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n\titemComponent: elementType.isRequired,\r\n\titemComponentProps: PropTypes.object,\r\n\t// `estimatedItemHeight` property name is deprecated,\r\n\t// use `getEstimatedItemHeight` property instead.\r\n\testimatedItemHeight: PropTypes.number,\r\n\tgetEstimatedItemHeight: PropTypes.func,\r\n\tgetEstimatedVisibleItemRowsCount: PropTypes.func,\r\n\tbypass: PropTypes.bool,\r\n\t// bypassBatchSize: PropTypes.number,\r\n\ttbody: PropTypes.bool,\r\n\tpreserveScrollPositionOnPrependItems: PropTypes.bool,\r\n\t// `preserveScrollPosition` property name is deprecated,\r\n\t// use `preserveScrollPositionOnPrependItems` instead.\r\n\tpreserveScrollPosition: PropTypes.bool,\r\n\tmeasureItemsBatchSize: PropTypes.number,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer: PropTypes.any,\r\n\tgetScrollableContainer: PropTypes.func,\r\n\tgetColumnsCount: PropTypes.func,\r\n\tgetItemId: PropTypes.func,\r\n\tclassName: PropTypes.string,\r\n\tonMount: PropTypes.func,\r\n\tonItemInitialRender: PropTypes.func,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender: PropTypes.func,\r\n\tinitialScrollPosition: PropTypes.number,\r\n\tonScrollPositionChange: PropTypes.func,\r\n\tonStateChange: PropTypes.func,\r\n\tinitialState: PropTypes.shape({\r\n\t\titems: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n\t\titemStates: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n\t\tfirstShownItemIndex: PropTypes.number.isRequired,\r\n\t\tlastShownItemIndex: PropTypes.number.isRequired,\r\n\t\tbeforeItemsHeight: PropTypes.number.isRequired,\r\n\t\tafterItemsHeight: PropTypes.number.isRequired,\r\n\t\titemHeights: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n\t\tcolumnsCount: PropTypes.number,\r\n\t\tverticalSpacing: PropTypes.number\r\n\t}),\r\n\tgetInitialItemState: PropTypes.func\r\n}\r\n\r\nVirtualScroller.defaultProps = {\r\n\tas: 'div'\r\n}\r\n"],"mappings":"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"}
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports["default"] =
|
|
6
|
+
exports["default"] = useSetItemState;
|
|
7
7
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
|
|
10
|
-
function
|
|
10
|
+
function useSetItemState(_ref) {
|
|
11
11
|
var items = _ref.items,
|
|
12
12
|
virtualScroller = _ref.virtualScroller;
|
|
13
13
|
// Only compute the initial cache value once.
|
|
@@ -15,18 +15,18 @@ function useOnItemStateChange(_ref) {
|
|
|
15
15
|
return new Array(items.length);
|
|
16
16
|
}, []); // Handler functions cache.
|
|
17
17
|
|
|
18
|
-
var cache = (0, _react.useRef)(initialCacheValue); // Caches per-item `
|
|
18
|
+
var cache = (0, _react.useRef)(initialCacheValue); // Caches per-item `setItemState` functions' "references"
|
|
19
19
|
// so that item components don't get re-rendered needlessly.
|
|
20
20
|
|
|
21
|
-
var
|
|
21
|
+
var getSetItemState = (0, _react.useCallback)(function (i) {
|
|
22
22
|
if (!cache.current[i]) {
|
|
23
23
|
cache.current[i] = function (itemState) {
|
|
24
|
-
return virtualScroller.
|
|
24
|
+
return virtualScroller.setItemState(i, itemState);
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
return cache.current[i];
|
|
29
29
|
}, [virtualScroller, cache]);
|
|
30
|
-
return
|
|
30
|
+
return getSetItemState;
|
|
31
31
|
}
|
|
32
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=useSetItemState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSetItemState.js","names":["useSetItemState","items","virtualScroller","initialCacheValue","useMemo","Array","length","cache","useRef","getSetItemState","useCallback","i","current","itemState","setItemState"],"sources":["../../source/react/useSetItemState.js"],"sourcesContent":["import { useMemo, useRef, useCallback } from 'react'\r\n\r\nexport default function useSetItemState({\r\n\titems,\r\n\tvirtualScroller\r\n}) {\r\n\t// Only compute the initial cache value once.\r\n\tconst initialCacheValue = useMemo(() => {\r\n\t\treturn new Array(items.length)\r\n\t}, [])\r\n\r\n\t// Handler functions cache.\r\n\tconst cache = useRef(initialCacheValue)\r\n\r\n\t// Caches per-item `setItemState` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getSetItemState = useCallback((i) => {\r\n\t\tif (!cache.current[i]) {\r\n\t\t\tcache.current[i] = (itemState) => virtualScroller.setItemState(i, itemState)\r\n\t\t}\r\n\t\treturn cache.current[i]\r\n\t}, [\r\n\t\tvirtualScroller,\r\n\t\tcache\r\n\t])\r\n\r\n\treturn getSetItemState\r\n}"],"mappings":";;;;;;;AAAA;;AAEe,SAASA,eAAT,OAGZ;EAAA,IAFFC,KAEE,QAFFA,KAEE;EAAA,IADFC,eACE,QADFA,eACE;EACF;EACA,IAAMC,iBAAiB,GAAG,IAAAC,cAAA,EAAQ,YAAM;IACvC,OAAO,IAAIC,KAAJ,CAAUJ,KAAK,CAACK,MAAhB,CAAP;EACA,CAFyB,EAEvB,EAFuB,CAA1B,CAFE,CAMF;;EACA,IAAMC,KAAK,GAAG,IAAAC,aAAA,EAAOL,iBAAP,CAAd,CAPE,CASF;EACA;;EACA,IAAMM,eAAe,GAAG,IAAAC,kBAAA,EAAY,UAACC,CAAD,EAAO;IAC1C,IAAI,CAACJ,KAAK,CAACK,OAAN,CAAcD,CAAd,CAAL,EAAuB;MACtBJ,KAAK,CAACK,OAAN,CAAcD,CAAd,IAAmB,UAACE,SAAD;QAAA,OAAeX,eAAe,CAACY,YAAhB,CAA6BH,CAA7B,EAAgCE,SAAhC,CAAf;MAAA,CAAnB;IACA;;IACD,OAAON,KAAK,CAACK,OAAN,CAAcD,CAAd,CAAP;EACA,CALuB,EAKrB,CACFT,eADE,EAEFK,KAFE,CALqB,CAAxB;EAUA,OAAOE,eAAP;AACA"}
|
|
@@ -32,6 +32,7 @@ function useVirtualScroller(_ref, _ref2) {
|
|
|
32
32
|
getItemId = _ref.getItemId,
|
|
33
33
|
AsComponent = _ref.AsComponent,
|
|
34
34
|
initialState = _ref.initialState,
|
|
35
|
+
getInitialItemState = _ref.getInitialItemState,
|
|
35
36
|
onStateChange = _ref.onStateChange;
|
|
36
37
|
var container = _ref2.container;
|
|
37
38
|
return (0, _react.useMemo)(function () {
|
|
@@ -61,7 +62,7 @@ function useVirtualScroller(_ref, _ref2) {
|
|
|
61
62
|
getScrollableContainer: getScrollableContainer,
|
|
62
63
|
getColumnsCount: getColumnsCount,
|
|
63
64
|
getItemId: getItemId
|
|
64
|
-
}, _defineProperty(_VirtualScroller, "tbody", AsComponent === 'tbody'), _defineProperty(_VirtualScroller, "state", initialState), _defineProperty(_VirtualScroller, "onStateChange", onStateChange), _VirtualScroller));
|
|
65
|
+
}, _defineProperty(_VirtualScroller, "tbody", AsComponent === 'tbody'), _defineProperty(_VirtualScroller, "state", initialState), _defineProperty(_VirtualScroller, "getInitialItemState", getInitialItemState), _defineProperty(_VirtualScroller, "onStateChange", onStateChange), _VirtualScroller));
|
|
65
66
|
}, []);
|
|
66
67
|
}
|
|
67
68
|
//# sourceMappingURL=useVirtualScroller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVirtualScroller.js","names":["useVirtualScroller","items","estimatedItemHeight","getEstimatedItemHeight","getEstimatedVisibleItemRowsCount","bypass","tbody","onItemInitialRender","onItemFirstRender","initialScrollPosition","onScrollPositionChange","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","AsComponent","initialState","onStateChange","container","useMemo","VirtualScroller","current","_useTimeoutInRenderLoop"],"sources":["../../source/react/useVirtualScroller.js"],"sourcesContent":["import { useMemo } from 'react'\r\n\r\nimport VirtualScroller from '../VirtualScroller.js'\r\n\r\n// Creates a `VirtualScroller` instance.\r\nexport default function useVirtualScroller({\r\n\titems,\r\n\t// `estimatedItemHeight` is deprecated, use `getEstimatedItemHeight()` instead.\r\n\testimatedItemHeight,\r\n\tgetEstimatedItemHeight,\r\n\tgetEstimatedVisibleItemRowsCount,\r\n\tbypass,\r\n\t// bypassBatchSize,\r\n\ttbody,\r\n\tonItemInitialRender,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender,\r\n\tinitialScrollPosition,\r\n\tonScrollPositionChange,\r\n\tmeasureItemsBatchSize,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer,\r\n\tgetScrollableContainer,\r\n\tgetColumnsCount,\r\n\tgetItemId,\r\n\tAsComponent,\r\n\tinitialState,\r\n\tonStateChange\r\n}, {\r\n\tcontainer\r\n}) {\r\n\treturn useMemo(() => {\r\n\t\t// Create `virtual-scroller` instance.\r\n\t\treturn new VirtualScroller(\r\n\t\t\t() => container.current,\r\n\t\t\titems,\r\n\t\t\t{\r\n\t\t\t\t_useTimeoutInRenderLoop: true,\r\n\t\t\t\t// `estimatedItemHeight` is deprecated, use `getEstimatedItemHeight()` instead.\r\n\t\t\t\testimatedItemHeight,\r\n\t\t\t\tgetEstimatedItemHeight,\r\n\t\t\t\tgetEstimatedVisibleItemRowsCount,\r\n\t\t\t\tbypass,\r\n\t\t\t\t// bypassBatchSize,\r\n\t\t\t\ttbody,\r\n\t\t\t\tonItemInitialRender,\r\n\t\t\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\t\t\tonItemFirstRender,\r\n\t\t\t\tinitialScrollPosition,\r\n\t\t\t\tonScrollPositionChange,\r\n\t\t\t\tmeasureItemsBatchSize,\r\n\t\t\t\t// `scrollableContainer` property is deprecated.\r\n\t\t\t\t// Use `getScrollableContainer()` property instead.\r\n\t\t\t\tscrollableContainer,\r\n\t\t\t\tgetScrollableContainer,\r\n\t\t\t\tgetColumnsCount,\r\n\t\t\t\tgetItemId,\r\n\t\t\t\ttbody: AsComponent === 'tbody',\r\n\t\t\t\tstate: initialState,\r\n\t\t\t\tonStateChange\r\n\t\t\t}\r\n\t\t)\r\n\t}, [])\r\n}"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;AAEA;AACe,SAASA,kBAAT,
|
|
1
|
+
{"version":3,"file":"useVirtualScroller.js","names":["useVirtualScroller","items","estimatedItemHeight","getEstimatedItemHeight","getEstimatedVisibleItemRowsCount","bypass","tbody","onItemInitialRender","onItemFirstRender","initialScrollPosition","onScrollPositionChange","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","AsComponent","initialState","getInitialItemState","onStateChange","container","useMemo","VirtualScroller","current","_useTimeoutInRenderLoop"],"sources":["../../source/react/useVirtualScroller.js"],"sourcesContent":["import { useMemo } from 'react'\r\n\r\nimport VirtualScroller from '../VirtualScroller.js'\r\n\r\n// Creates a `VirtualScroller` instance.\r\nexport default function useVirtualScroller({\r\n\titems,\r\n\t// `estimatedItemHeight` is deprecated, use `getEstimatedItemHeight()` instead.\r\n\testimatedItemHeight,\r\n\tgetEstimatedItemHeight,\r\n\tgetEstimatedVisibleItemRowsCount,\r\n\tbypass,\r\n\t// bypassBatchSize,\r\n\ttbody,\r\n\tonItemInitialRender,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender,\r\n\tinitialScrollPosition,\r\n\tonScrollPositionChange,\r\n\tmeasureItemsBatchSize,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer,\r\n\tgetScrollableContainer,\r\n\tgetColumnsCount,\r\n\tgetItemId,\r\n\tAsComponent,\r\n\tinitialState,\r\n\tgetInitialItemState,\r\n\tonStateChange\r\n}, {\r\n\tcontainer\r\n}) {\r\n\treturn useMemo(() => {\r\n\t\t// Create `virtual-scroller` instance.\r\n\t\treturn new VirtualScroller(\r\n\t\t\t() => container.current,\r\n\t\t\titems,\r\n\t\t\t{\r\n\t\t\t\t_useTimeoutInRenderLoop: true,\r\n\t\t\t\t// `estimatedItemHeight` is deprecated, use `getEstimatedItemHeight()` instead.\r\n\t\t\t\testimatedItemHeight,\r\n\t\t\t\tgetEstimatedItemHeight,\r\n\t\t\t\tgetEstimatedVisibleItemRowsCount,\r\n\t\t\t\tbypass,\r\n\t\t\t\t// bypassBatchSize,\r\n\t\t\t\ttbody,\r\n\t\t\t\tonItemInitialRender,\r\n\t\t\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\t\t\tonItemFirstRender,\r\n\t\t\t\tinitialScrollPosition,\r\n\t\t\t\tonScrollPositionChange,\r\n\t\t\t\tmeasureItemsBatchSize,\r\n\t\t\t\t// `scrollableContainer` property is deprecated.\r\n\t\t\t\t// Use `getScrollableContainer()` property instead.\r\n\t\t\t\tscrollableContainer,\r\n\t\t\t\tgetScrollableContainer,\r\n\t\t\t\tgetColumnsCount,\r\n\t\t\t\tgetItemId,\r\n\t\t\t\ttbody: AsComponent === 'tbody',\r\n\t\t\t\tstate: initialState,\r\n\t\t\t\tgetInitialItemState,\r\n\t\t\t\tonStateChange\r\n\t\t\t}\r\n\t\t)\r\n\t}, [])\r\n}"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;AAEA;AACe,SAASA,kBAAT,cA2BZ;EAAA,IA1BFC,KA0BE,QA1BFA,KA0BE;EAAA,IAxBFC,mBAwBE,QAxBFA,mBAwBE;EAAA,IAvBFC,sBAuBE,QAvBFA,sBAuBE;EAAA,IAtBFC,gCAsBE,QAtBFA,gCAsBE;EAAA,IArBFC,MAqBE,QArBFA,MAqBE;EAAA,IAnBFC,KAmBE,QAnBFA,KAmBE;EAAA,IAlBFC,mBAkBE,QAlBFA,mBAkBE;EAAA,IAhBFC,iBAgBE,QAhBFA,iBAgBE;EAAA,IAfFC,qBAeE,QAfFA,qBAeE;EAAA,IAdFC,sBAcE,QAdFA,sBAcE;EAAA,IAbFC,qBAaE,QAbFA,qBAaE;EAAA,IAVFC,mBAUE,QAVFA,mBAUE;EAAA,IATFC,sBASE,QATFA,sBASE;EAAA,IARFC,eAQE,QARFA,eAQE;EAAA,IAPFC,SAOE,QAPFA,SAOE;EAAA,IANFC,WAME,QANFA,WAME;EAAA,IALFC,YAKE,QALFA,YAKE;EAAA,IAJFC,mBAIE,QAJFA,mBAIE;EAAA,IAHFC,aAGE,QAHFA,aAGE;EAAA,IADFC,SACE,SADFA,SACE;EACF,OAAO,IAAAC,cAAA,EAAQ,YAAM;IAAA;;IACpB;IACA,OAAO,IAAIC,4BAAJ,CACN;MAAA,OAAMF,SAAS,CAACG,OAAhB;IAAA,CADM,EAENtB,KAFM;MAILuB,uBAAuB,EAAE,IAJpB;MAKL;MACAtB,mBAAmB,EAAnBA,mBANK;MAOLC,sBAAsB,EAAtBA,sBAPK;MAQLC,gCAAgC,EAAhCA,gCARK;MASLC,MAAM,EAANA,MATK;MAUL;MACAC,KAAK,EAALA,KAXK;MAYLC,mBAAmB,EAAnBA,mBAZK;MAaL;MACAC,iBAAiB,EAAjBA,iBAdK;MAeLC,qBAAqB,EAArBA,qBAfK;MAgBLC,sBAAsB,EAAtBA,sBAhBK;MAiBLC,qBAAqB,EAArBA,qBAjBK;MAkBL;MACA;MACAC,mBAAmB,EAAnBA,mBApBK;MAqBLC,sBAAsB,EAAtBA,sBArBK;MAsBLC,eAAe,EAAfA,eAtBK;MAuBLC,SAAS,EAATA;IAvBK,8CAwBEC,WAAW,KAAK,OAxBlB,8CAyBEC,YAzBF,4DA0BLC,mBA1BK,sDA2BLC,aA3BK,qBAAP;EA8BA,CAhCM,EAgCJ,EAhCI,CAAP;AAiCA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = fillArray;
|
|
7
|
+
|
|
8
|
+
function fillArray(array, getItem) {
|
|
9
|
+
var i = 0;
|
|
10
|
+
|
|
11
|
+
while (i < array.length) {
|
|
12
|
+
array[i] = getItem(i);
|
|
13
|
+
i++;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return array;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=fillArray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fillArray.js","names":["fillArray","array","getItem","i","length"],"sources":["../../source/utility/fillArray.js"],"sourcesContent":["export default function fillArray(array, getItem) {\r\n\tlet i = 0\r\n\twhile (i < array.length) {\r\n\t\tarray[i] = getItem(i)\r\n\t\ti++\r\n\t}\r\n\treturn array\r\n}"],"mappings":";;;;;;;AAAe,SAASA,SAAT,CAAmBC,KAAnB,EAA0BC,OAA1B,EAAmC;EACjD,IAAIC,CAAC,GAAG,CAAR;;EACA,OAAOA,CAAC,GAAGF,KAAK,CAACG,MAAjB,EAAyB;IACxBH,KAAK,CAACE,CAAD,CAAL,GAAWD,OAAO,CAACC,CAAD,CAAlB;IACAA,CAAC;EACD;;EACD,OAAOF,KAAP;AACA"}
|
package/dom/index.d.ts
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
|
-
import { State, VirtualScrollerCommonOptions, SetItemsOptions } from '../index.d.ts';
|
|
1
|
+
import { State, NoItemState, VirtualScrollerCommonOptions, SetItemsOptions } from '../index.d.ts';
|
|
2
2
|
|
|
3
|
-
export { State
|
|
3
|
+
export { State } from '../index.d.ts';
|
|
4
4
|
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
|
|
7
|
-
interface Options<Item> extends VirtualScrollerCommonOptions<Item> {
|
|
8
|
-
state?: State<Item>;
|
|
7
|
+
interface Options<Item, ItemState> extends VirtualScrollerCommonOptions<Item, ItemState> {
|
|
8
|
+
state?: State<Item, ItemState>;
|
|
9
9
|
scrollableContainer?: HTMLElement;
|
|
10
10
|
onItemUnmount?(): void;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export default class VirtualScroller<Item> {
|
|
13
|
+
export default class VirtualScroller<Item, ItemState = NoItemState> {
|
|
14
14
|
constructor(
|
|
15
15
|
itemsContainerElement: HTMLElement,
|
|
16
16
|
items: Item[],
|
|
17
17
|
renderItem: (item: Item) => HTMLElement,
|
|
18
|
-
options?: Options<Item>
|
|
18
|
+
options?: Options<Item, ItemState>
|
|
19
19
|
);
|
|
20
20
|
|
|
21
21
|
// start(): void;
|
|
22
22
|
stop(): void;
|
|
23
23
|
setItems(newItems: Item[], options?: SetItemsOptions): void;
|
|
24
24
|
onItemHeightChange(i: number): void;
|
|
25
|
+
setItemState(i: number, newState: ItemState): void;
|
|
25
26
|
}
|