react-virtuoso 2.2.6-beta.2 → 2.2.6

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.
Files changed (102) hide show
  1. package/package.json +1 -1
  2. package/dist/__examples.cc6a8f9f.js +0 -162195
  3. package/dist/__examples.cc6a8f9f.js.map +0 -1
  4. package/dist/__examples.html +0 -27
  5. package/dist/__examples.js +0 -392
  6. package/dist/__examples.js.map +0 -1
  7. package/dist/align-to-bottom.7fcd2087.js +0 -196
  8. package/dist/align-to-bottom.7fcd2087.js.map +0 -1
  9. package/dist/auto-prepend-items.bd7e9b90.js +0 -263
  10. package/dist/auto-prepend-items.bd7e9b90.js.map +0 -1
  11. package/dist/benchmark.66d31485.js +0 -161
  12. package/dist/benchmark.66d31485.js.map +0 -1
  13. package/dist/chat.d4f93b8b.js +0 -365
  14. package/dist/chat.d4f93b8b.js.map +0 -1
  15. package/dist/custom-components.5aeaa7ef.js +0 -202
  16. package/dist/custom-components.5aeaa7ef.js.map +0 -1
  17. package/dist/custom-scroller.b0240d14.js +0 -180
  18. package/dist/custom-scroller.b0240d14.js.map +0 -1
  19. package/dist/data.26707046.js +0 -186
  20. package/dist/data.26707046.js.map +0 -1
  21. package/dist/decrease-items.e2211e50.js +0 -180
  22. package/dist/decrease-items.e2211e50.js.map +0 -1
  23. package/dist/default-item-height.b77ada36.js +0 -155
  24. package/dist/default-item-height.b77ada36.js.map +0 -1
  25. package/dist/empty-placeholder.00607a6e.js +0 -185
  26. package/dist/empty-placeholder.00607a6e.js.map +0 -1
  27. package/dist/end-reached.8531e5b1.js +0 -199
  28. package/dist/end-reached.8531e5b1.js.map +0 -1
  29. package/dist/endless-scrolling.bc4101f0.js +0 -205
  30. package/dist/endless-scrolling.bc4101f0.js.map +0 -1
  31. package/dist/expandable-cards.5439f51b.js +0 -222
  32. package/dist/expandable-cards.5439f51b.js.map +0 -1
  33. package/dist/follow-output.4e36fca8.js +0 -225
  34. package/dist/follow-output.4e36fca8.js.map +0 -1
  35. package/dist/grid-optimize-rendering.b49e36f5.js +0 -247
  36. package/dist/grid-optimize-rendering.b49e36f5.js.map +0 -1
  37. package/dist/grid.d5d77b6a.js +0 -244
  38. package/dist/grid.d5d77b6a.js.map +0 -1
  39. package/dist/grouped-endless-scrolling.24985a0f.js +0 -301
  40. package/dist/grouped-endless-scrolling.24985a0f.js.map +0 -1
  41. package/dist/grouped-load-more.bce8f6e4.js +0 -300
  42. package/dist/grouped-load-more.bce8f6e4.js.map +0 -1
  43. package/dist/grouped-topmost-item.34960f5e.js +0 -161
  44. package/dist/grouped-topmost-item.34960f5e.js.map +0 -1
  45. package/dist/grouped.a2908632.js +0 -160
  46. package/dist/grouped.a2908632.js.map +0 -1
  47. package/dist/header-footer.49733d45.js +0 -171
  48. package/dist/header-footer.49733d45.js.map +0 -1
  49. package/dist/hello.54765c26.js +0 -155
  50. package/dist/hello.54765c26.js.map +0 -1
  51. package/dist/initial-from-zero.22ad1626.js +0 -195
  52. package/dist/initial-from-zero.22ad1626.js.map +0 -1
  53. package/dist/initial-scroll-top.90db1920.js +0 -156
  54. package/dist/initial-scroll-top.90db1920.js.map +0 -1
  55. package/dist/initial-topmost-item-default-height.43a95247.js +0 -157
  56. package/dist/initial-topmost-item-default-height.43a95247.js.map +0 -1
  57. package/dist/initial-topmost-item.61c0e169.js +0 -158
  58. package/dist/initial-topmost-item.61c0e169.js.map +0 -1
  59. package/dist/long-last-item.b56ff89c.js +0 -157
  60. package/dist/long-last-item.b56ff89c.js.map +0 -1
  61. package/dist/prepend-items.f2bda34b.js +0 -188
  62. package/dist/prepend-items.f2bda34b.js.map +0 -1
  63. package/dist/prepend-last-tall-item.168a9e65.js +0 -175
  64. package/dist/prepend-last-tall-item.168a9e65.js.map +0 -1
  65. package/dist/react-beautiful-dnd-window-scroller.0a227511.js +0 -280
  66. package/dist/react-beautiful-dnd-window-scroller.0a227511.js.map +0 -1
  67. package/dist/react-beautiful-dnd.817e9251.js +0 -277
  68. package/dist/react-beautiful-dnd.817e9251.js.map +0 -1
  69. package/dist/rerender.ddd61b7c.js +0 -195
  70. package/dist/rerender.ddd61b7c.js.map +0 -1
  71. package/dist/resize-loop.309b1dac.js +0 -183
  72. package/dist/resize-loop.309b1dac.js.map +0 -1
  73. package/dist/resizing-items.c09b5e1b.js +0 -189
  74. package/dist/resizing-items.c09b5e1b.js.map +0 -1
  75. package/dist/scroll-into-view.39b77fe9.js +0 -203
  76. package/dist/scroll-into-view.39b77fe9.js.map +0 -1
  77. package/dist/scroll-seek-placeholder.69fb85c6.js +0 -179
  78. package/dist/scroll-seek-placeholder.69fb85c6.js.map +0 -1
  79. package/dist/scroll-to-index.e72249cf.js +0 -212
  80. package/dist/scroll-to-index.e72249cf.js.map +0 -1
  81. package/dist/ssr.8f31b042.js +0 -154
  82. package/dist/ssr.8f31b042.js.map +0 -1
  83. package/dist/start-reached.2990ece7.js +0 -219
  84. package/dist/start-reached.2990ece7.js.map +0 -1
  85. package/dist/tall-item-reverse-scrolling.58bcd140.js +0 -158
  86. package/dist/tall-item-reverse-scrolling.58bcd140.js.map +0 -1
  87. package/dist/test-case-446.dce9595c.js +0 -223
  88. package/dist/test-case-446.dce9595c.js.map +0 -1
  89. package/dist/test-case-460.6d75ad1f.js +0 -246
  90. package/dist/test-case-460.6d75ad1f.js.map +0 -1
  91. package/dist/test-case-463.525f34ba.js +0 -170
  92. package/dist/test-case-463.525f34ba.js.map +0 -1
  93. package/dist/toggle-display-grouped.4f4ae058.js +0 -184
  94. package/dist/toggle-display-grouped.4f4ae058.js.map +0 -1
  95. package/dist/top-items.f724bf61.js +0 -153
  96. package/dist/top-items.f724bf61.js.map +0 -1
  97. package/dist/upward-scroll.d49e0815.js +0 -157
  98. package/dist/upward-scroll.d49e0815.js.map +0 -1
  99. package/dist/window-grid.b22094fd.js +0 -234
  100. package/dist/window-grid.b22094fd.js.map +0 -1
  101. package/dist/window-scroller.a979c6d6.js +0 -163
  102. package/dist/window-scroller.a979c6d6.js.map +0 -1
@@ -1,301 +0,0 @@
1
- // modules are defined as an array
2
- // [ module function, map of requires ]
3
- //
4
- // map of requires is short require name -> numeric require
5
- //
6
- // anything defined in a previous bundle is accessed via the
7
- // orig method which is the require for previous bundles
8
- parcelRequire = (function (modules, cache, entry, globalName) {
9
- // Save the require from previous bundle to this closure if any
10
- var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
11
- var nodeRequire = typeof require === 'function' && require;
12
-
13
- function newRequire(name, jumped) {
14
- if (!cache[name]) {
15
- if (!modules[name]) {
16
- // if we cannot find the module within our internal map or
17
- // cache jump to the current global require ie. the last bundle
18
- // that was added to the page.
19
- var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
20
- if (!jumped && currentRequire) {
21
- return currentRequire(name, true);
22
- }
23
-
24
- // If there are other bundles on this page the require from the
25
- // previous one is saved to 'previousRequire'. Repeat this as
26
- // many times as there are bundles until the module is found or
27
- // we exhaust the require chain.
28
- if (previousRequire) {
29
- return previousRequire(name, true);
30
- }
31
-
32
- // Try the node require function if it exists.
33
- if (nodeRequire && typeof name === 'string') {
34
- return nodeRequire(name);
35
- }
36
-
37
- var err = new Error('Cannot find module \'' + name + '\'');
38
- err.code = 'MODULE_NOT_FOUND';
39
- throw err;
40
- }
41
-
42
- localRequire.resolve = resolve;
43
- localRequire.cache = {};
44
-
45
- var module = cache[name] = new newRequire.Module(name);
46
-
47
- modules[name][0].call(module.exports, localRequire, module, module.exports, this);
48
- }
49
-
50
- return cache[name].exports;
51
-
52
- function localRequire(x){
53
- return newRequire(localRequire.resolve(x));
54
- }
55
-
56
- function resolve(x){
57
- return modules[name][1][x] || x;
58
- }
59
- }
60
-
61
- function Module(moduleName) {
62
- this.id = moduleName;
63
- this.bundle = newRequire;
64
- this.exports = {};
65
- }
66
-
67
- newRequire.isParcelRequire = true;
68
- newRequire.Module = Module;
69
- newRequire.modules = modules;
70
- newRequire.cache = cache;
71
- newRequire.parent = previousRequire;
72
- newRequire.register = function (id, exports) {
73
- modules[id] = [function (require, module) {
74
- module.exports = exports;
75
- }, {}];
76
- };
77
-
78
- var error;
79
- for (var i = 0; i < entry.length; i++) {
80
- try {
81
- newRequire(entry[i]);
82
- } catch (e) {
83
- // Save first error but execute all entries
84
- if (!error) {
85
- error = e;
86
- }
87
- }
88
- }
89
-
90
- if (entry.length) {
91
- // Expose entry point to Node, AMD or browser globals
92
- // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
93
- var mainExports = newRequire(entry[entry.length - 1]);
94
-
95
- // CommonJS
96
- if (typeof exports === "object" && typeof module !== "undefined") {
97
- module.exports = mainExports;
98
-
99
- // RequireJS
100
- } else if (typeof define === "function" && define.amd) {
101
- define(function () {
102
- return mainExports;
103
- });
104
-
105
- // <script>
106
- } else if (globalName) {
107
- this[globalName] = mainExports;
108
- }
109
- }
110
-
111
- // Override the current require with this new one
112
- parcelRequire = newRequire;
113
-
114
- if (error) {
115
- // throw error from earlier, _after updating parcelRequire_
116
- throw error;
117
- }
118
-
119
- return newRequire;
120
- })({"grouped-endless-scrolling.tsx":[function(require,module,exports) {
121
- "use strict";
122
-
123
- Object.defineProperty(exports, "__esModule", {
124
- value: true
125
- });
126
- exports.default = App;
127
-
128
- var React = _interopRequireWildcard(require("react"));
129
-
130
- var _src = require("../src");
131
-
132
- var _faker = _interopRequireDefault(require("faker"));
133
-
134
- var _lodash = require("lodash");
135
-
136
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
137
-
138
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
139
-
140
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
141
-
142
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
143
-
144
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
145
-
146
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
147
-
148
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
149
-
150
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
151
-
152
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
153
-
154
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
155
-
156
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
157
-
158
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
159
-
160
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
161
-
162
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
163
-
164
- var getUser = function getUser() {
165
- var firstName = _faker.default.name.firstName();
166
-
167
- var lastName = _faker.default.name.lastName();
168
-
169
- return {
170
- name: "".concat(firstName, " ").concat(lastName),
171
- initials: "".concat(firstName.substr(0, 1)).concat(lastName.substr(0, 1)),
172
- description: _faker.default.company.catchPhrase(),
173
- avatar: _faker.default.internet.avatar()
174
- };
175
- };
176
-
177
- var sortUser = function sortUser(a, b) {
178
- if (a.name < b.name) {
179
- return -1;
180
- }
181
-
182
- if (a.name > b.name) {
183
- return 1;
184
- }
185
-
186
- return 0;
187
- };
188
-
189
- var useGroupedUsers = function useGroupedUsers(count) {
190
- var allUsers = (0, React.useMemo)(function () {
191
- return Array.from({
192
- length: count
193
- }, getUser).sort(sortUser);
194
- }, [count]);
195
- var loadedCount = (0, React.useRef)(0);
196
- var loadedUsers = (0, React.useRef)([]);
197
- var groups = (0, React.useRef)([]);
198
-
199
- var _useState = (0, React.useState)(false),
200
- _useState2 = _slicedToArray(_useState, 2),
201
- endReached = _useState2[0],
202
- setEndReached = _useState2[1];
203
-
204
- var _useState3 = (0, React.useState)([]),
205
- _useState4 = _slicedToArray(_useState3, 2),
206
- groupCounts = _useState4[0],
207
- setGroupCounts = _useState4[1];
208
-
209
- var loadMore = (0, React.useCallback)(function () {
210
- if (!endReached) {
211
- setTimeout(function () {
212
- loadedCount.current += 50; // in a real world scenario, you would fetch the next
213
- // slice and append it to the existing records
214
-
215
- loadedUsers.current = allUsers.slice(0, loadedCount.current); // the code below calculates the group counts
216
- // for the users loaded so far;
217
- // this should be performed on the server too
218
-
219
- var groupedUsers = (0, _lodash.groupBy)(loadedUsers.current, function (user) {
220
- return user.name[0];
221
- });
222
- groups.current = Object.keys(groupedUsers);
223
- setGroupCounts(Object.values(groupedUsers).map(function (users) {
224
- return users.length;
225
- }));
226
-
227
- if (loadedCount.current === count) {
228
- setEndReached(true);
229
- }
230
- }, 30);
231
- }
232
- }, [allUsers, endReached, count]);
233
- return {
234
- loadMore: loadMore,
235
- endReached: endReached,
236
- groupCounts: groupCounts,
237
- users: loadedUsers.current,
238
- groups: groups.current
239
- };
240
- };
241
-
242
- var components = {
243
- Footer: function Footer() {
244
- return React.createElement("div", null, "Footer");
245
- },
246
- List: React.forwardRef(function (_ref, listRef) {
247
- var style = _ref.style,
248
- children = _ref.children;
249
- return React.createElement("div", {
250
- ref: listRef,
251
- style: style
252
- }, children);
253
- }),
254
- Item: function Item(_ref2) {
255
- var children = _ref2.children,
256
- props = _objectWithoutProperties(_ref2, ["children"]);
257
-
258
- return React.createElement("div", _objectSpread(_objectSpread({}, props), {}, {
259
- style: {
260
- margin: 0
261
- }
262
- }), children);
263
- },
264
- Group: function Group(_ref3) {
265
- var children = _ref3.children,
266
- props = _objectWithoutProperties(_ref3, ["children"]);
267
-
268
- return React.createElement("div", _objectSpread({}, props), children);
269
- }
270
- };
271
- var Style = {
272
- height: '350px',
273
- width: '300px'
274
- };
275
-
276
- function App() {
277
- var _useGroupedUsers = useGroupedUsers(12500),
278
- loadMore = _useGroupedUsers.loadMore,
279
- groupCounts = _useGroupedUsers.groupCounts,
280
- users = _useGroupedUsers.users,
281
- groups = _useGroupedUsers.groups;
282
-
283
- console.log(groupCounts);
284
- (0, React.useEffect)(loadMore, [loadMore]);
285
- return React.createElement(_src.GroupedVirtuoso, {
286
- components: components,
287
- style: Style,
288
- groupCounts: groupCounts,
289
- groupContent: function groupContent(index) {
290
- return React.createElement("div", null, "Group ", groups[index]);
291
- },
292
- overscan: 400,
293
- endReached: function endReached(_) {
294
- loadMore();
295
- },
296
- itemContent: function itemContent(index) {
297
- return React.createElement("div", null, React.createElement("div", null, React.createElement("strong", null, users[index].name)), React.createElement("div", null, users[index].description, users[index].description));
298
- }
299
- });
300
- }
301
- },{"react":"../node_modules/react/index.js","../src":"../src/index.tsx","faker":"../node_modules/faker/index.js","lodash":"../node_modules/lodash/lodash.js"}]},{},[], null)
@@ -1 +0,0 @@
1
- {"version":3,"sources":["grouped-endless-scrolling.tsx"],"names":[],"mappings":"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","file":"grouped-endless-scrolling.24985a0f.js","sourceRoot":"../e2e","sourcesContent":["import * as React from 'react'\nimport { Components, GroupedVirtuoso } from '../src'\nimport { useMemo, useRef, useState, useEffect, useCallback } from 'react'\nimport faker from 'faker'\nimport { groupBy } from 'lodash'\n\nconst getUser = () => {\n const firstName = faker.name.firstName()\n const lastName = faker.name.lastName()\n return {\n name: `${firstName} ${lastName}`,\n initials: `${firstName.substr(0, 1)}${lastName.substr(0, 1)}`,\n description: faker.company.catchPhrase(),\n avatar: faker.internet.avatar(),\n }\n}\n\ntype User = ReturnType<typeof getUser>\n\nconst sortUser = (a: User, b: User) => {\n if (a.name < b.name) {\n return -1\n }\n if (a.name > b.name) {\n return 1\n }\n return 0\n}\n\nconst useGroupedUsers = (count: number) => {\n const allUsers = useMemo(() => Array.from({ length: count }, getUser).sort(sortUser), [count])\n\n const loadedCount = useRef(0)\n const loadedUsers = useRef<User[]>([])\n const groups = useRef<string[]>([])\n const [endReached, setEndReached] = useState(false)\n const [groupCounts, setGroupCounts] = useState<number[]>([])\n\n const loadMore = useCallback(() => {\n if (!endReached) {\n setTimeout(() => {\n loadedCount.current += 50\n\n // in a real world scenario, you would fetch the next\n // slice and append it to the existing records\n loadedUsers.current = allUsers.slice(0, loadedCount.current)\n\n // the code below calculates the group counts\n // for the users loaded so far;\n // this should be performed on the server too\n const groupedUsers = groupBy(loadedUsers.current, (user) => user.name[0])\n groups.current = Object.keys(groupedUsers)\n setGroupCounts(Object.values(groupedUsers).map((users) => users.length))\n\n if (loadedCount.current === count) {\n setEndReached(true)\n }\n }, 30)\n }\n }, [allUsers, endReached, count])\n\n return {\n loadMore,\n endReached,\n groupCounts,\n users: loadedUsers.current,\n groups: groups.current,\n }\n}\n\nconst components: Partial<Components> = {\n Footer: () => <div>Footer</div>,\n\n List: React.forwardRef(({ style, children }, listRef) => {\n return (\n <div ref={listRef} style={style}>\n {children}\n </div>\n )\n }),\n\n Item: ({ children, ...props }) => {\n return (\n <div {...props} style={{ margin: 0 }}>\n {children}\n </div>\n )\n },\n\n Group: ({ children, ...props }) => {\n return <div {...props}>{children}</div>\n },\n}\nconst Style = { height: '350px', width: '300px' }\n\nexport default function App() {\n const { loadMore, groupCounts, users, groups } = useGroupedUsers(12500)\n console.log(groupCounts)\n\n useEffect(loadMore, [loadMore])\n\n return (\n <GroupedVirtuoso\n components={components}\n style={Style}\n groupCounts={groupCounts}\n groupContent={(index) => <div>Group {groups[index]}</div>}\n overscan={400}\n endReached={(_) => {\n loadMore()\n }}\n itemContent={(index) => (\n <div>\n <div>\n <strong>{users[index].name}</strong>\n </div>\n <div>\n {users[index].description}\n {users[index].description}\n </div>\n </div>\n )}\n />\n )\n}\n"]}
@@ -1,300 +0,0 @@
1
- // modules are defined as an array
2
- // [ module function, map of requires ]
3
- //
4
- // map of requires is short require name -> numeric require
5
- //
6
- // anything defined in a previous bundle is accessed via the
7
- // orig method which is the require for previous bundles
8
- parcelRequire = (function (modules, cache, entry, globalName) {
9
- // Save the require from previous bundle to this closure if any
10
- var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
11
- var nodeRequire = typeof require === 'function' && require;
12
-
13
- function newRequire(name, jumped) {
14
- if (!cache[name]) {
15
- if (!modules[name]) {
16
- // if we cannot find the module within our internal map or
17
- // cache jump to the current global require ie. the last bundle
18
- // that was added to the page.
19
- var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
20
- if (!jumped && currentRequire) {
21
- return currentRequire(name, true);
22
- }
23
-
24
- // If there are other bundles on this page the require from the
25
- // previous one is saved to 'previousRequire'. Repeat this as
26
- // many times as there are bundles until the module is found or
27
- // we exhaust the require chain.
28
- if (previousRequire) {
29
- return previousRequire(name, true);
30
- }
31
-
32
- // Try the node require function if it exists.
33
- if (nodeRequire && typeof name === 'string') {
34
- return nodeRequire(name);
35
- }
36
-
37
- var err = new Error('Cannot find module \'' + name + '\'');
38
- err.code = 'MODULE_NOT_FOUND';
39
- throw err;
40
- }
41
-
42
- localRequire.resolve = resolve;
43
- localRequire.cache = {};
44
-
45
- var module = cache[name] = new newRequire.Module(name);
46
-
47
- modules[name][0].call(module.exports, localRequire, module, module.exports, this);
48
- }
49
-
50
- return cache[name].exports;
51
-
52
- function localRequire(x){
53
- return newRequire(localRequire.resolve(x));
54
- }
55
-
56
- function resolve(x){
57
- return modules[name][1][x] || x;
58
- }
59
- }
60
-
61
- function Module(moduleName) {
62
- this.id = moduleName;
63
- this.bundle = newRequire;
64
- this.exports = {};
65
- }
66
-
67
- newRequire.isParcelRequire = true;
68
- newRequire.Module = Module;
69
- newRequire.modules = modules;
70
- newRequire.cache = cache;
71
- newRequire.parent = previousRequire;
72
- newRequire.register = function (id, exports) {
73
- modules[id] = [function (require, module) {
74
- module.exports = exports;
75
- }, {}];
76
- };
77
-
78
- var error;
79
- for (var i = 0; i < entry.length; i++) {
80
- try {
81
- newRequire(entry[i]);
82
- } catch (e) {
83
- // Save first error but execute all entries
84
- if (!error) {
85
- error = e;
86
- }
87
- }
88
- }
89
-
90
- if (entry.length) {
91
- // Expose entry point to Node, AMD or browser globals
92
- // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
93
- var mainExports = newRequire(entry[entry.length - 1]);
94
-
95
- // CommonJS
96
- if (typeof exports === "object" && typeof module !== "undefined") {
97
- module.exports = mainExports;
98
-
99
- // RequireJS
100
- } else if (typeof define === "function" && define.amd) {
101
- define(function () {
102
- return mainExports;
103
- });
104
-
105
- // <script>
106
- } else if (globalName) {
107
- this[globalName] = mainExports;
108
- }
109
- }
110
-
111
- // Override the current require with this new one
112
- parcelRequire = newRequire;
113
-
114
- if (error) {
115
- // throw error from earlier, _after updating parcelRequire_
116
- throw error;
117
- }
118
-
119
- return newRequire;
120
- })({"grouped-load-more.tsx":[function(require,module,exports) {
121
- "use strict";
122
-
123
- Object.defineProperty(exports, "__esModule", {
124
- value: true
125
- });
126
- exports.default = App;
127
-
128
- var React = _interopRequireWildcard(require("react"));
129
-
130
- var _src = require("../src");
131
-
132
- var _faker = _interopRequireDefault(require("faker"));
133
-
134
- var _lodash = require("lodash");
135
-
136
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
137
-
138
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
139
-
140
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
141
-
142
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
143
-
144
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
145
-
146
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
147
-
148
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
149
-
150
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
151
-
152
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
153
-
154
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
155
-
156
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
157
-
158
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
159
-
160
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
161
-
162
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
163
-
164
- var getUser = function getUser() {
165
- var firstName = _faker.default.name.firstName();
166
-
167
- var lastName = _faker.default.name.lastName();
168
-
169
- return {
170
- name: "".concat(firstName, " ").concat(lastName),
171
- initials: "".concat(firstName.substr(0, 1)).concat(lastName.substr(0, 1)),
172
- description: _faker.default.company.catchPhrase(),
173
- avatar: _faker.default.internet.avatar()
174
- };
175
- };
176
-
177
- var sortUser = function sortUser(a, b) {
178
- if (a.name < b.name) {
179
- return -1;
180
- }
181
-
182
- if (a.name > b.name) {
183
- return 1;
184
- }
185
-
186
- return 0;
187
- };
188
-
189
- var useGroupedUsers = function useGroupedUsers(count) {
190
- var allUsers = (0, React.useMemo)(function () {
191
- return new Array(count).fill(true).map(getUser).sort(sortUser);
192
- }, [count]);
193
- var loadedCount = (0, React.useRef)(0);
194
- var loadedUsers = (0, React.useRef)([]);
195
- var groups = (0, React.useRef)([]);
196
-
197
- var _useState = (0, React.useState)(false),
198
- _useState2 = _slicedToArray(_useState, 2),
199
- endReached = _useState2[0],
200
- setEndReached = _useState2[1];
201
-
202
- var _useState3 = (0, React.useState)([]),
203
- _useState4 = _slicedToArray(_useState3, 2),
204
- groupCounts = _useState4[0],
205
- setGroupCounts = _useState4[1];
206
-
207
- var loadMore = function loadMore() {
208
- if (!endReached) {
209
- setTimeout(function () {
210
- loadedCount.current += 50; // in a real world scenario, you would fetch the next
211
- // slice and append it to the existing records
212
-
213
- loadedUsers.current = allUsers.slice(0, loadedCount.current); // the code below calculates the group counts
214
- // for the users loaded so far;
215
- // this should be performed on the server too
216
-
217
- var groupedUsers = (0, _lodash.groupBy)(loadedUsers.current, function (user) {
218
- return user.name[0];
219
- });
220
- groups.current = Object.keys(groupedUsers);
221
- setGroupCounts(Object.values(groupedUsers).map(function (users) {
222
- return users.length;
223
- }));
224
-
225
- if (loadedCount.current === 500) {
226
- setEndReached(true);
227
- }
228
- }, 1500);
229
- }
230
- };
231
-
232
- return {
233
- loadMore: loadMore,
234
- endReached: endReached,
235
- groupCounts: groupCounts,
236
- users: loadedUsers.current,
237
- groups: groups.current
238
- };
239
- };
240
-
241
- var components = {
242
- Footer: function Footer() {
243
- return React.createElement("div", null, "Footer");
244
- },
245
- List: React.forwardRef(function (_ref, listRef) {
246
- var style = _ref.style,
247
- children = _ref.children;
248
- return React.createElement("div", {
249
- ref: listRef,
250
- style: style
251
- }, children);
252
- }),
253
- Item: function Item(_ref2) {
254
- var children = _ref2.children,
255
- props = _objectWithoutProperties(_ref2, ["children"]);
256
-
257
- return React.createElement("div", _objectSpread(_objectSpread({}, props), {}, {
258
- style: {
259
- margin: 0
260
- }
261
- }), children);
262
- },
263
- Group: function Group(_ref3) {
264
- var children = _ref3.children,
265
- props = _objectWithoutProperties(_ref3, ["children"]);
266
-
267
- return React.createElement("div", _objectSpread({}, props), children);
268
- }
269
- };
270
- var Style = {
271
- height: '350px',
272
- width: '400px'
273
- };
274
-
275
- function App() {
276
- var _useGroupedUsers = useGroupedUsers(500),
277
- loadMore = _useGroupedUsers.loadMore,
278
- groupCounts = _useGroupedUsers.groupCounts,
279
- users = _useGroupedUsers.users,
280
- groups = _useGroupedUsers.groups;
281
-
282
- (0, React.useEffect)(loadMore, [loadMore]);
283
- return React.createElement(_src.GroupedVirtuoso, {
284
- components: components,
285
- style: Style,
286
- groupCounts: groupCounts,
287
- groupContent: function groupContent(index) {
288
- return React.createElement("div", null, "Group ", groups[index]);
289
- },
290
- overscan: 400,
291
- endReached: function endReached(value) {
292
- console.log(value);
293
- loadMore();
294
- },
295
- itemContent: function itemContent(index) {
296
- return React.createElement("div", null, React.createElement("div", null, users[index].initials), React.createElement("div", null, React.createElement("strong", null, users[index].name)), React.createElement("div", null, users[index].description));
297
- }
298
- });
299
- }
300
- },{"react":"../node_modules/react/index.js","../src":"../src/index.tsx","faker":"../node_modules/faker/index.js","lodash":"../node_modules/lodash/lodash.js"}]},{},[], null)
@@ -1 +0,0 @@
1
- {"version":3,"sources":["grouped-load-more.tsx"],"names":[],"mappings":"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","file":"grouped-load-more.bce8f6e4.js","sourceRoot":"../e2e","sourcesContent":["import * as React from 'react'\nimport { Components, GroupedVirtuoso } from '../src'\nimport { useMemo, useRef, useState, useEffect } from 'react'\nimport faker from 'faker'\nimport { groupBy } from 'lodash'\n\nconst getUser = () => {\n const firstName = faker.name.firstName()\n const lastName = faker.name.lastName()\n return {\n name: `${firstName} ${lastName}`,\n initials: `${firstName.substr(0, 1)}${lastName.substr(0, 1)}`,\n description: faker.company.catchPhrase(),\n avatar: faker.internet.avatar(),\n }\n}\n\ntype User = ReturnType<typeof getUser>\n\nconst sortUser = (a: User, b: User) => {\n if (a.name < b.name) {\n return -1\n }\n if (a.name > b.name) {\n return 1\n }\n return 0\n}\n\nconst useGroupedUsers = (count: number) => {\n const allUsers = useMemo(() => new Array(count).fill(true).map(getUser).sort(sortUser), [count])\n\n const loadedCount = useRef(0)\n const loadedUsers = useRef<User[]>([])\n const groups = useRef<string[]>([])\n const [endReached, setEndReached] = useState(false)\n const [groupCounts, setGroupCounts] = useState<number[]>([])\n\n const loadMore = () => {\n if (!endReached) {\n setTimeout(() => {\n loadedCount.current += 50\n\n // in a real world scenario, you would fetch the next\n // slice and append it to the existing records\n loadedUsers.current = allUsers.slice(0, loadedCount.current)\n\n // the code below calculates the group counts\n // for the users loaded so far;\n // this should be performed on the server too\n const groupedUsers = groupBy(loadedUsers.current, (user) => user.name[0])\n groups.current = Object.keys(groupedUsers)\n setGroupCounts(Object.values(groupedUsers).map((users) => users.length))\n\n if (loadedCount.current === 500) {\n setEndReached(true)\n }\n }, 1500)\n }\n }\n\n return {\n loadMore,\n endReached,\n groupCounts,\n users: loadedUsers.current,\n groups: groups.current,\n }\n}\n\nconst components: Components = {\n Footer: () => <div>Footer</div>,\n\n List: React.forwardRef(({ style, children }, listRef) => {\n return (\n <div ref={listRef} style={style}>\n {children}\n </div>\n )\n }),\n\n Item: ({ children, ...props }) => {\n return (\n <div {...props} style={{ margin: 0 }}>\n {children}\n </div>\n )\n },\n\n Group: ({ children, ...props }) => {\n return <div {...props}>{children}</div>\n },\n}\nconst Style = { height: '350px', width: '400px' }\n\nexport default function App() {\n const { loadMore, groupCounts, users, groups } = useGroupedUsers(500)\n\n useEffect(loadMore, [loadMore])\n\n return (\n <GroupedVirtuoso\n components={components}\n style={Style}\n groupCounts={groupCounts}\n groupContent={(index) => <div>Group {groups[index]}</div>}\n overscan={400}\n endReached={(value) => {\n console.log(value)\n loadMore()\n }}\n itemContent={(index) => (\n <div>\n <div>{users[index].initials}</div>\n <div>\n <strong>{users[index].name}</strong>\n </div>\n <div>{users[index].description}</div>\n </div>\n )}\n />\n )\n}\n"]}