@react-stately/layout 3.13.10-nightly.4673 → 3.13.10-nightly.4681
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/dist/ListLayout.main.js +11 -87
- package/dist/ListLayout.main.js.map +1 -1
- package/dist/ListLayout.mjs +11 -87
- package/dist/ListLayout.module.js +11 -87
- package/dist/ListLayout.module.js.map +1 -1
- package/dist/TableLayout.main.js +59 -94
- package/dist/TableLayout.main.js.map +1 -1
- package/dist/TableLayout.mjs +59 -94
- package/dist/TableLayout.module.js +59 -94
- package/dist/TableLayout.module.js.map +1 -1
- package/dist/main.js.map +1 -1
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +27 -69
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/ListLayout.ts +31 -145
- package/src/TableLayout.ts +82 -125
- package/src/index.ts +2 -1
|
@@ -115,7 +115,7 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
115
115
|
skipped++;
|
|
116
116
|
continue;
|
|
117
117
|
}
|
|
118
|
-
let layoutNode = this.buildChild(node, 0, y);
|
|
118
|
+
let layoutNode = this.buildChild(node, 0, y, null);
|
|
119
119
|
y = layoutNode.layoutInfo.rect.maxY;
|
|
120
120
|
nodes.push(layoutNode);
|
|
121
121
|
if (node.type === 'item' && y > this.validRect.maxY) {
|
|
@@ -133,7 +133,7 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
133
133
|
});
|
|
134
134
|
y = loader.rect.maxY;
|
|
135
135
|
}
|
|
136
|
-
if (nodes.length === 0) {
|
|
136
|
+
if (nodes.length === 0 && this.enableEmptyState) {
|
|
137
137
|
var _this_placeholderHeight;
|
|
138
138
|
let rect = new (0, $img26$Rect)(0, y, this.virtualizer.visibleRect.width, (_this_placeholderHeight = this.placeholderHeight) !== null && _this_placeholderHeight !== void 0 ? _this_placeholderHeight : this.virtualizer.visibleRect.height);
|
|
139
139
|
let placeholder = new (0, $img26$LayoutInfo)('placeholder', 'placeholder', rect);
|
|
@@ -150,12 +150,11 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
150
150
|
let cached = this.layoutNodes.get(node.key);
|
|
151
151
|
return !this.invalidateEverything && cached && cached.node === node && y === (cached.header || cached.layoutInfo).rect.y && cached.layoutInfo.rect.intersects(this.lastValidRect) && cached.validRect.containsRect(cached.layoutInfo.rect.intersection(this.validRect));
|
|
152
152
|
}
|
|
153
|
-
buildChild(node, x, y) {
|
|
153
|
+
buildChild(node, x, y, parentKey) {
|
|
154
154
|
if (this.isValid(node, y)) return this.layoutNodes.get(node.key);
|
|
155
155
|
let layoutNode = this.buildNode(node, x, y);
|
|
156
156
|
layoutNode.node = node;
|
|
157
|
-
|
|
158
|
-
layoutNode.layoutInfo.parentKey = (_node_parentKey = node.parentKey) !== null && _node_parentKey !== void 0 ? _node_parentKey : null;
|
|
157
|
+
layoutNode.layoutInfo.parentKey = parentKey !== null && parentKey !== void 0 ? parentKey : null;
|
|
159
158
|
this.layoutInfos.set(layoutNode.layoutInfo.key, layoutNode.layoutInfo);
|
|
160
159
|
if (layoutNode.header) this.layoutInfos.set(layoutNode.header.key, layoutNode.header);
|
|
161
160
|
this.layoutNodes.set(node.key, layoutNode);
|
|
@@ -168,14 +167,14 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
168
167
|
case 'item':
|
|
169
168
|
return this.buildItem(node, x, y);
|
|
170
169
|
case 'header':
|
|
171
|
-
return this.
|
|
170
|
+
return this.buildSectionHeader(node, x, y);
|
|
172
171
|
}
|
|
173
172
|
}
|
|
174
173
|
buildSection(node, x, y) {
|
|
175
174
|
let width = this.virtualizer.visibleRect.width;
|
|
176
175
|
let header = null;
|
|
177
176
|
if (node.rendered || this.forceSectionHeaders) {
|
|
178
|
-
let headerNode = this.
|
|
177
|
+
let headerNode = this.buildSectionHeader(node, x, y);
|
|
179
178
|
header = headerNode.layoutInfo;
|
|
180
179
|
header.key += ':header';
|
|
181
180
|
header.parentKey = node.key;
|
|
@@ -195,7 +194,7 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
195
194
|
skipped++;
|
|
196
195
|
continue;
|
|
197
196
|
}
|
|
198
|
-
let layoutNode = this.buildChild(child, x, y);
|
|
197
|
+
let layoutNode = this.buildChild(child, x, y, layoutInfo.key);
|
|
199
198
|
y = layoutNode.layoutInfo.rect.maxY;
|
|
200
199
|
children.push(layoutNode);
|
|
201
200
|
if (y > this.validRect.maxY) {
|
|
@@ -214,14 +213,14 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
214
213
|
validRect: layoutInfo.rect.intersection(this.validRect)
|
|
215
214
|
};
|
|
216
215
|
}
|
|
217
|
-
|
|
216
|
+
buildSectionHeader(node, x, y) {
|
|
218
217
|
let width = this.virtualizer.visibleRect.width;
|
|
219
218
|
let rectHeight = this.headingHeight;
|
|
220
219
|
let isEstimated = false;
|
|
221
220
|
// If no explicit height is available, use an estimated height.
|
|
222
221
|
if (rectHeight == null) {
|
|
223
222
|
// If a previous version of this layout info exists, reuse its height.
|
|
224
|
-
// Mark as estimated if the size of the overall
|
|
223
|
+
// Mark as estimated if the size of the overall virtualizer changed,
|
|
225
224
|
// or the content of the item changed.
|
|
226
225
|
let previousLayoutNode = this.layoutNodes.get(node.key);
|
|
227
226
|
let previousLayoutInfo = (previousLayoutNode === null || previousLayoutNode === void 0 ? void 0 : previousLayoutNode.header) || (previousLayoutNode === null || previousLayoutNode === void 0 ? void 0 : previousLayoutNode.layoutInfo);
|
|
@@ -252,7 +251,7 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
252
251
|
// If no explicit height is available, use an estimated height.
|
|
253
252
|
if (rectHeight == null) {
|
|
254
253
|
// If a previous version of this layout info exists, reuse its height.
|
|
255
|
-
// Mark as estimated if the size of the overall
|
|
254
|
+
// Mark as estimated if the size of the overall virtualizer changed,
|
|
256
255
|
// or the content of the item changed.
|
|
257
256
|
let previousLayoutNode = this.layoutNodes.get(node.key);
|
|
258
257
|
if (previousLayoutNode) {
|
|
@@ -309,78 +308,6 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
309
308
|
getContentSize() {
|
|
310
309
|
return this.contentSize;
|
|
311
310
|
}
|
|
312
|
-
getKeyAbove(key) {
|
|
313
|
-
let collection = this.collection;
|
|
314
|
-
key = collection.getKeyBefore(key);
|
|
315
|
-
while(key != null){
|
|
316
|
-
let item = collection.getItem(key);
|
|
317
|
-
if (item.type === 'item' && (this.allowDisabledKeyFocus || !this.disabledKeys.has(item.key))) return key;
|
|
318
|
-
key = collection.getKeyBefore(key);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
getKeyBelow(key) {
|
|
322
|
-
let collection = this.collection;
|
|
323
|
-
key = collection.getKeyAfter(key);
|
|
324
|
-
while(key != null){
|
|
325
|
-
let item = collection.getItem(key);
|
|
326
|
-
if (item.type === 'item' && (this.allowDisabledKeyFocus || !this.disabledKeys.has(item.key))) return key;
|
|
327
|
-
key = collection.getKeyAfter(key);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
getKeyPageAbove(key) {
|
|
331
|
-
let layoutInfo = this.getLayoutInfo(key);
|
|
332
|
-
if (layoutInfo) {
|
|
333
|
-
let pageY = Math.max(0, layoutInfo.rect.y + layoutInfo.rect.height - this.virtualizer.visibleRect.height);
|
|
334
|
-
while(layoutInfo && layoutInfo.rect.y > pageY){
|
|
335
|
-
let keyAbove = this.getKeyAbove(layoutInfo.key);
|
|
336
|
-
layoutInfo = this.getLayoutInfo(keyAbove);
|
|
337
|
-
}
|
|
338
|
-
if (layoutInfo) return layoutInfo.key;
|
|
339
|
-
}
|
|
340
|
-
return this.getFirstKey();
|
|
341
|
-
}
|
|
342
|
-
getKeyPageBelow(key) {
|
|
343
|
-
let layoutInfo = this.getLayoutInfo(key != null ? key : this.getFirstKey());
|
|
344
|
-
if (layoutInfo) {
|
|
345
|
-
let pageY = Math.min(this.virtualizer.contentSize.height, layoutInfo.rect.y - layoutInfo.rect.height + this.virtualizer.visibleRect.height);
|
|
346
|
-
while(layoutInfo && layoutInfo.rect.y < pageY){
|
|
347
|
-
let keyBelow = this.getKeyBelow(layoutInfo.key);
|
|
348
|
-
layoutInfo = this.getLayoutInfo(keyBelow);
|
|
349
|
-
}
|
|
350
|
-
if (layoutInfo) return layoutInfo.key;
|
|
351
|
-
}
|
|
352
|
-
return this.getLastKey();
|
|
353
|
-
}
|
|
354
|
-
getFirstKey() {
|
|
355
|
-
let collection = this.collection;
|
|
356
|
-
let key = collection.getFirstKey();
|
|
357
|
-
while(key != null){
|
|
358
|
-
let item = collection.getItem(key);
|
|
359
|
-
if (item.type === 'item' && (this.allowDisabledKeyFocus || !this.disabledKeys.has(item.key))) return key;
|
|
360
|
-
key = collection.getKeyAfter(key);
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
getLastKey() {
|
|
364
|
-
let collection = this.collection;
|
|
365
|
-
let key = collection.getLastKey();
|
|
366
|
-
while(key != null){
|
|
367
|
-
let item = collection.getItem(key);
|
|
368
|
-
if (item.type === 'item' && (this.allowDisabledKeyFocus || !this.disabledKeys.has(item.key))) return key;
|
|
369
|
-
key = collection.getKeyBefore(key);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
getKeyForSearch(search, fromKey) {
|
|
373
|
-
if (!this.collator) return null;
|
|
374
|
-
let collection = this.collection;
|
|
375
|
-
let key = fromKey || this.getFirstKey();
|
|
376
|
-
while(key != null){
|
|
377
|
-
let item = collection.getItem(key);
|
|
378
|
-
let substring = item.textValue.slice(0, search.length);
|
|
379
|
-
if (item.textValue && this.collator.compare(substring, search) === 0) return key;
|
|
380
|
-
key = this.getKeyBelow(key);
|
|
381
|
-
}
|
|
382
|
-
return null;
|
|
383
|
-
}
|
|
384
311
|
getDropTargetFromPoint(x, y, isValidDropTarget) {
|
|
385
312
|
x += this.virtualizer.visibleRect.x;
|
|
386
313
|
y += this.virtualizer.visibleRect.y;
|
|
@@ -422,8 +349,6 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
422
349
|
* of the options that can be provided.
|
|
423
350
|
*/ constructor(options = {}){
|
|
424
351
|
super();
|
|
425
|
-
this.disabledKeys = new Set();
|
|
426
|
-
this.allowDisabledKeyFocus = false;
|
|
427
352
|
this.rowHeight = options.rowHeight;
|
|
428
353
|
this.estimatedRowHeight = options.estimatedRowHeight;
|
|
429
354
|
this.headingHeight = options.headingHeight;
|
|
@@ -431,15 +356,14 @@ class $61ef60fc9b1041f4$export$cacbb3924155d68e extends (0, $img26$Layout) {
|
|
|
431
356
|
this.forceSectionHeaders = options.forceSectionHeaders;
|
|
432
357
|
this.padding = options.padding || 0;
|
|
433
358
|
this.indentationForItem = options.indentationForItem;
|
|
434
|
-
this.collator = options.collator;
|
|
435
359
|
this.loaderHeight = options.loaderHeight;
|
|
436
360
|
this.placeholderHeight = options.placeholderHeight;
|
|
361
|
+
this.enableEmptyState = options.enableEmptyState || false;
|
|
437
362
|
this.layoutInfos = new Map();
|
|
438
363
|
this.layoutNodes = new Map();
|
|
439
364
|
this.rootNodes = [];
|
|
440
365
|
this.lastWidth = 0;
|
|
441
366
|
this.lastCollection = null;
|
|
442
|
-
this.allowDisabledKeyFocus = options.allowDisabledKeyFocus;
|
|
443
367
|
this.lastValidRect = new (0, $img26$Rect)();
|
|
444
368
|
this.validRect = new (0, $img26$Rect)();
|
|
445
369
|
this.contentSize = new (0, $img26$Size)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/@react-stately/layout/src/ListLayout.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, DropTarget, DropTargetDelegate, Key, KeyboardDelegate, Node} from '@react-types/shared';\nimport {getChildNodes} from '@react-stately/collections';\nimport {InvalidationContext, Layout, LayoutInfo, Point, Rect, Size} from '@react-stately/virtualizer';\n\nexport type ListLayoutOptions<T> = {\n /** The height of a row in px. */\n rowHeight?: number,\n estimatedRowHeight?: number,\n headingHeight?: number,\n estimatedHeadingHeight?: number,\n padding?: number,\n indentationForItem?: (collection: Collection<Node<T>>, key: Key) => number,\n collator?: Intl.Collator,\n loaderHeight?: number,\n placeholderHeight?: number,\n allowDisabledKeyFocus?: boolean,\n forceSectionHeaders?: boolean\n};\n\n// A wrapper around LayoutInfo that supports hierarchy\nexport interface LayoutNode {\n node?: Node<unknown>,\n layoutInfo: LayoutInfo,\n header?: LayoutInfo,\n children?: LayoutNode[],\n validRect: Rect,\n index?: number\n}\n\ninterface ListLayoutProps {\n isLoading?: boolean\n}\n\nconst DEFAULT_HEIGHT = 48;\n\n/**\n * The ListLayout class is an implementation of a collection view {@link Layout}\n * it is used for creating lists and lists with indented sub-lists.\n *\n * To configure a ListLayout, you can use the properties to define the\n * layouts and/or use the method for defining indentation.\n * The {@link ListKeyboardDelegate} extends the existing collection view\n * delegate with an additional method to do this (it uses the same delegate object as\n * the collection view itself).\n */\nexport class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements KeyboardDelegate, DropTargetDelegate {\n protected rowHeight: number;\n protected estimatedRowHeight: number;\n protected headingHeight: number;\n protected estimatedHeadingHeight: number;\n protected forceSectionHeaders: boolean;\n protected padding: number;\n protected indentationForItem?: (collection: Collection<Node<T>>, key: Key) => number;\n protected layoutInfos: Map<Key, LayoutInfo>;\n protected layoutNodes: Map<Key, LayoutNode>;\n protected contentSize: Size;\n collection: Collection<Node<T>>;\n disabledKeys: Set<Key> = new Set();\n allowDisabledKeyFocus: boolean = false;\n isLoading: boolean;\n protected lastWidth: number;\n protected lastCollection: Collection<Node<T>>;\n protected rootNodes: LayoutNode[];\n protected collator: Intl.Collator;\n protected invalidateEverything: boolean;\n protected loaderHeight: number;\n protected placeholderHeight: number;\n protected lastValidRect: Rect;\n protected validRect: Rect;\n\n /**\n * Creates a new ListLayout with options. See the list of properties below for a description\n * of the options that can be provided.\n */\n constructor(options: ListLayoutOptions<T> = {}) {\n super();\n this.rowHeight = options.rowHeight;\n this.estimatedRowHeight = options.estimatedRowHeight;\n this.headingHeight = options.headingHeight;\n this.estimatedHeadingHeight = options.estimatedHeadingHeight;\n this.forceSectionHeaders = options.forceSectionHeaders;\n this.padding = options.padding || 0;\n this.indentationForItem = options.indentationForItem;\n this.collator = options.collator;\n this.loaderHeight = options.loaderHeight;\n this.placeholderHeight = options.placeholderHeight;\n this.layoutInfos = new Map();\n this.layoutNodes = new Map();\n this.rootNodes = [];\n this.lastWidth = 0;\n this.lastCollection = null;\n this.allowDisabledKeyFocus = options.allowDisabledKeyFocus;\n this.lastValidRect = new Rect();\n this.validRect = new Rect();\n this.contentSize = new Size();\n }\n\n getLayoutInfo(key: Key) {\n this.ensureLayoutInfo(key);\n return this.layoutInfos.get(key)!;\n }\n\n getVisibleLayoutInfos(rect: Rect) {\n // Adjust rect to keep number of visible rows consistent.\n // (only if height > 1 for getDropTargetFromPoint)\n if (rect.height > 1) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight);\n rect.y = Math.floor(rect.y / rowHeight) * rowHeight;\n rect.height = Math.ceil(rect.height / rowHeight) * rowHeight;\n }\n\n // If layout hasn't yet been done for the requested rect, union the\n // new rect with the existing valid rect, and recompute.\n this.layoutIfNeeded(rect);\n\n let res: LayoutInfo[] = [];\n\n let addNodes = (nodes: LayoutNode[]) => {\n for (let node of nodes) {\n if (this.isVisible(node, rect)) {\n res.push(node.layoutInfo);\n if (node.header) {\n res.push(node.header);\n }\n\n if (node.children) {\n addNodes(node.children);\n }\n }\n }\n };\n\n addNodes(this.rootNodes);\n return res;\n }\n\n layoutIfNeeded(rect: Rect) {\n if (!this.lastCollection) {\n return;\n }\n\n if (!this.validRect.containsRect(rect)) {\n this.lastValidRect = this.validRect;\n this.validRect = this.validRect.union(rect);\n this.rootNodes = this.buildCollection();\n } else {\n // Ensure all of the persisted keys are available.\n for (let key of this.virtualizer.persistedKeys) {\n if (this.ensureLayoutInfo(key)) {\n break;\n }\n }\n }\n }\n\n ensureLayoutInfo(key: Key) {\n // If the layout info wasn't found, it might be outside the bounds of the area that we've\n // computed layout for so far. This can happen when accessing a random key, e.g pressing Home/End.\n // Compute the full layout and try again.\n if (!this.layoutInfos.has(key) && this.validRect.area < this.contentSize.area && this.lastCollection) {\n this.lastValidRect = this.validRect;\n this.validRect = new Rect(0, 0, Infinity, Infinity);\n this.rootNodes = this.buildCollection();\n this.validRect = new Rect(0, 0, this.contentSize.width, this.contentSize.height);\n return true;\n }\n\n return false;\n }\n\n isVisible(node: LayoutNode, rect: Rect) {\n return node.layoutInfo.rect.intersects(rect) || node.layoutInfo.isSticky || this.virtualizer.isPersistedKey(node.layoutInfo.key);\n }\n\n protected shouldInvalidateEverything(invalidationContext: InvalidationContext<ListLayoutProps>) {\n // Invalidate cache if the size of the collection changed.\n // In this case, we need to recalculate the entire layout.\n return invalidationContext.sizeChanged;\n }\n\n validate(invalidationContext: InvalidationContext<ListLayoutProps>) {\n this.collection = this.virtualizer.collection;\n this.isLoading = invalidationContext.layoutOptions?.isLoading || false;\n\n // Reset valid rect if we will have to invalidate everything.\n // Otherwise we can reuse cached layout infos outside the current visible rect.\n this.invalidateEverything = this.shouldInvalidateEverything(invalidationContext);\n if (this.invalidateEverything) {\n this.lastValidRect = this.validRect;\n this.validRect = this.virtualizer.visibleRect.copy();\n }\n\n this.rootNodes = this.buildCollection();\n\n // Remove deleted layout nodes\n if (this.lastCollection && this.collection !== this.lastCollection) {\n for (let key of this.lastCollection.getKeys()) {\n if (!this.collection.getItem(key)) {\n let layoutNode = this.layoutNodes.get(key);\n if (layoutNode) {\n this.layoutInfos.delete(layoutNode.layoutInfo.key);\n this.layoutInfos.delete(layoutNode.header?.key);\n this.layoutNodes.delete(key);\n }\n }\n }\n }\n\n this.lastWidth = this.virtualizer.visibleRect.width;\n this.lastCollection = this.collection;\n this.invalidateEverything = false;\n }\n\n buildCollection(): LayoutNode[] {\n let y = this.padding;\n let skipped = 0;\n let nodes = [];\n for (let node of this.collection) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight);\n\n // Skip rows before the valid rectangle unless they are already cached.\n if (node.type === 'item' && y + rowHeight < this.validRect.y && !this.isValid(node, y)) {\n y += rowHeight;\n skipped++;\n continue;\n }\n\n let layoutNode = this.buildChild(node, 0, y);\n y = layoutNode.layoutInfo.rect.maxY;\n nodes.push(layoutNode);\n\n if (node.type === 'item' && y > this.validRect.maxY) {\n y += (this.collection.size - (nodes.length + skipped)) * rowHeight;\n break;\n }\n }\n\n if (this.isLoading) {\n let rect = new Rect(0, y, this.virtualizer.visibleRect.width,\n this.loaderHeight ?? this.virtualizer.visibleRect.height);\n let loader = new LayoutInfo('loader', 'loader', rect);\n this.layoutInfos.set('loader', loader);\n nodes.push({layoutInfo: loader});\n y = loader.rect.maxY;\n }\n\n if (nodes.length === 0) {\n let rect = new Rect(0, y, this.virtualizer.visibleRect.width,\n this.placeholderHeight ?? this.virtualizer.visibleRect.height);\n let placeholder = new LayoutInfo('placeholder', 'placeholder', rect);\n this.layoutInfos.set('placeholder', placeholder);\n nodes.push({layoutInfo: placeholder});\n y = placeholder.rect.maxY;\n }\n\n this.contentSize = new Size(this.virtualizer.visibleRect.width, y + this.padding);\n return nodes;\n }\n\n isValid(node: Node<T>, y: number) {\n let cached = this.layoutNodes.get(node.key);\n return (\n !this.invalidateEverything &&\n cached &&\n cached.node === node &&\n y === (cached.header || cached.layoutInfo).rect.y &&\n cached.layoutInfo.rect.intersects(this.lastValidRect) &&\n cached.validRect.containsRect(cached.layoutInfo.rect.intersection(this.validRect))\n );\n }\n\n buildChild(node: Node<T>, x: number, y: number): LayoutNode {\n if (this.isValid(node, y)) {\n return this.layoutNodes.get(node.key);\n }\n\n let layoutNode = this.buildNode(node, x, y);\n layoutNode.node = node;\n\n layoutNode.layoutInfo.parentKey = node.parentKey ?? null;\n this.layoutInfos.set(layoutNode.layoutInfo.key, layoutNode.layoutInfo);\n if (layoutNode.header) {\n this.layoutInfos.set(layoutNode.header.key, layoutNode.header);\n }\n\n this.layoutNodes.set(node.key, layoutNode);\n return layoutNode;\n }\n\n buildNode(node: Node<T>, x: number, y: number): LayoutNode {\n switch (node.type) {\n case 'section':\n return this.buildSection(node, x, y);\n case 'item':\n return this.buildItem(node, x, y);\n case 'header':\n return this.buildHeader(node, x, y);\n }\n }\n\n buildSection(node: Node<T>, x: number, y: number): LayoutNode {\n let width = this.virtualizer.visibleRect.width;\n let header = null;\n if (node.rendered || this.forceSectionHeaders) {\n let headerNode = this.buildHeader(node, x, y);\n header = headerNode.layoutInfo;\n header.key += ':header';\n header.parentKey = node.key;\n y += header.rect.height;\n }\n\n let rect = new Rect(0, y, width, 0);\n let layoutInfo = new LayoutInfo(node.type, node.key, rect);\n\n let startY = y;\n let skipped = 0;\n let children = [];\n for (let child of getChildNodes(node, this.collection)) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight);\n\n // Skip rows before the valid rectangle unless they are already cached.\n if (y + rowHeight < this.validRect.y && !this.isValid(node, y)) {\n y += rowHeight;\n skipped++;\n continue;\n }\n\n let layoutNode = this.buildChild(child, x, y);\n y = layoutNode.layoutInfo.rect.maxY;\n children.push(layoutNode);\n\n if (y > this.validRect.maxY) {\n // Estimate the remaining height for rows that we don't need to layout right now.\n y += ([...getChildNodes(node, this.collection)].length - (children.length + skipped)) * rowHeight;\n break;\n }\n }\n\n rect.height = y - startY;\n\n return {\n header,\n layoutInfo,\n children,\n validRect: layoutInfo.rect.intersection(this.validRect)\n };\n }\n\n buildHeader(node: Node<T>, x: number, y: number): LayoutNode {\n let width = this.virtualizer.visibleRect.width;\n let rectHeight = this.headingHeight;\n let isEstimated = false;\n\n // If no explicit height is available, use an estimated height.\n if (rectHeight == null) {\n // If a previous version of this layout info exists, reuse its height.\n // Mark as estimated if the size of the overall collection view changed,\n // or the content of the item changed.\n let previousLayoutNode = this.layoutNodes.get(node.key);\n let previousLayoutInfo = previousLayoutNode?.header || previousLayoutNode?.layoutInfo;\n if (previousLayoutInfo) {\n let curNode = this.collection.getItem(node.key);\n let lastNode = this.lastCollection ? this.lastCollection.getItem(node.key) : null;\n rectHeight = previousLayoutInfo.rect.height;\n isEstimated = width !== this.lastWidth || curNode !== lastNode || previousLayoutInfo.estimatedSize;\n } else {\n rectHeight = (node.rendered ? this.estimatedHeadingHeight : 0);\n isEstimated = true;\n }\n }\n\n if (rectHeight == null) {\n rectHeight = DEFAULT_HEIGHT;\n }\n\n let headerRect = new Rect(0, y, width, rectHeight);\n let header = new LayoutInfo('header', node.key, headerRect);\n header.estimatedSize = isEstimated;\n return {\n layoutInfo: header,\n children: [],\n validRect: header.rect.intersection(this.validRect)\n };\n }\n\n buildItem(node: Node<T>, x: number, y: number): LayoutNode {\n let width = this.virtualizer.visibleRect.width;\n let rectHeight = this.rowHeight;\n let isEstimated = false;\n\n // If no explicit height is available, use an estimated height.\n if (rectHeight == null) {\n // If a previous version of this layout info exists, reuse its height.\n // Mark as estimated if the size of the overall collection view changed,\n // or the content of the item changed.\n let previousLayoutNode = this.layoutNodes.get(node.key);\n if (previousLayoutNode) {\n rectHeight = previousLayoutNode.layoutInfo.rect.height;\n isEstimated = width !== this.lastWidth || node !== previousLayoutNode.node || previousLayoutNode.layoutInfo.estimatedSize;\n } else {\n rectHeight = this.estimatedRowHeight;\n isEstimated = true;\n }\n }\n\n if (rectHeight == null) {\n rectHeight = DEFAULT_HEIGHT;\n }\n\n if (typeof this.indentationForItem === 'function') {\n x += this.indentationForItem(this.collection, node.key) || 0;\n }\n\n let rect = new Rect(x, y, width - x, rectHeight);\n let layoutInfo = new LayoutInfo(node.type, node.key, rect);\n // allow overflow so the focus ring/selection ring can extend outside to overlap with the adjacent items borders\n layoutInfo.allowOverflow = true;\n layoutInfo.estimatedSize = isEstimated;\n return {\n layoutInfo,\n validRect: layoutInfo.rect\n };\n }\n\n updateItemSize(key: Key, size: Size) {\n let layoutInfo = this.layoutInfos.get(key);\n // If no layoutInfo, item has been deleted/removed.\n if (!layoutInfo) {\n return false;\n }\n\n layoutInfo.estimatedSize = false;\n if (layoutInfo.rect.height !== size.height) {\n // Copy layout info rather than mutating so that later caches are invalidated.\n let newLayoutInfo = layoutInfo.copy();\n newLayoutInfo.rect.height = size.height;\n this.layoutInfos.set(key, newLayoutInfo);\n\n // Invalidate layout for this layout node and all parents\n this.updateLayoutNode(key, layoutInfo, newLayoutInfo);\n\n let node = this.collection.getItem(layoutInfo.parentKey);\n while (node) {\n this.updateLayoutNode(node.key, layoutInfo, newLayoutInfo);\n node = this.collection.getItem(node.parentKey);\n }\n\n return true;\n }\n\n return false;\n }\n\n updateLayoutNode(key: Key, oldLayoutInfo: LayoutInfo, newLayoutInfo: LayoutInfo) {\n let n = this.layoutNodes.get(key);\n if (n) {\n // Invalidate by reseting validRect.\n n.validRect = new Rect();\n\n // Replace layout info in LayoutNode\n if (n.header === oldLayoutInfo) {\n n.header = newLayoutInfo;\n } else if (n.layoutInfo === oldLayoutInfo) {\n n.layoutInfo = newLayoutInfo;\n }\n }\n }\n\n getContentSize() {\n return this.contentSize;\n }\n\n getKeyAbove(key: Key): Key | null {\n let collection = this.collection;\n\n key = collection.getKeyBefore(key);\n while (key != null) {\n let item = collection.getItem(key);\n if (item.type === 'item' && (this.allowDisabledKeyFocus || !this.disabledKeys.has(item.key))) {\n return key;\n }\n\n key = collection.getKeyBefore(key);\n }\n }\n\n getKeyBelow(key: Key): Key | null {\n let collection = this.collection;\n\n key = collection.getKeyAfter(key);\n while (key != null) {\n let item = collection.getItem(key);\n if (item.type === 'item' && (this.allowDisabledKeyFocus || !this.disabledKeys.has(item.key))) {\n return key;\n }\n\n key = collection.getKeyAfter(key);\n }\n }\n\n getKeyPageAbove(key: Key): Key | null {\n let layoutInfo = this.getLayoutInfo(key);\n\n if (layoutInfo) {\n let pageY = Math.max(0, layoutInfo.rect.y + layoutInfo.rect.height - this.virtualizer.visibleRect.height);\n while (layoutInfo && layoutInfo.rect.y > pageY) {\n let keyAbove = this.getKeyAbove(layoutInfo.key);\n layoutInfo = this.getLayoutInfo(keyAbove);\n }\n\n if (layoutInfo) {\n return layoutInfo.key;\n }\n }\n\n return this.getFirstKey();\n }\n\n getKeyPageBelow(key: Key): Key | null {\n let layoutInfo = this.getLayoutInfo(key != null ? key : this.getFirstKey());\n\n if (layoutInfo) {\n let pageY = Math.min(this.virtualizer.contentSize.height, layoutInfo.rect.y - layoutInfo.rect.height + this.virtualizer.visibleRect.height);\n while (layoutInfo && layoutInfo.rect.y < pageY) {\n let keyBelow = this.getKeyBelow(layoutInfo.key);\n layoutInfo = this.getLayoutInfo(keyBelow);\n }\n\n if (layoutInfo) {\n return layoutInfo.key;\n }\n }\n\n return this.getLastKey();\n }\n\n getFirstKey(): Key | null {\n let collection = this.collection;\n let key = collection.getFirstKey();\n while (key != null) {\n let item = collection.getItem(key);\n if (item.type === 'item' && (this.allowDisabledKeyFocus || !this.disabledKeys.has(item.key))) {\n return key;\n }\n\n key = collection.getKeyAfter(key);\n }\n }\n\n getLastKey(): Key | null {\n let collection = this.collection;\n let key = collection.getLastKey();\n while (key != null) {\n let item = collection.getItem(key);\n if (item.type === 'item' && (this.allowDisabledKeyFocus || !this.disabledKeys.has(item.key))) {\n return key;\n }\n\n key = collection.getKeyBefore(key);\n }\n }\n\n getKeyForSearch(search: string, fromKey?: Key): Key | null {\n if (!this.collator) {\n return null;\n }\n\n let collection = this.collection;\n let key = fromKey || this.getFirstKey();\n while (key != null) {\n let item = collection.getItem(key);\n let substring = item.textValue.slice(0, search.length);\n if (item.textValue && this.collator.compare(substring, search) === 0) {\n return key;\n }\n\n key = this.getKeyBelow(key);\n }\n\n return null;\n }\n\n getDropTargetFromPoint(x: number, y: number, isValidDropTarget: (target: DropTarget) => boolean): DropTarget {\n x += this.virtualizer.visibleRect.x;\n y += this.virtualizer.visibleRect.y;\n\n let key = this.virtualizer.keyAtPoint(new Point(x, y));\n if (key == null || this.collection.size === 0) {\n return {type: 'root'};\n }\n\n let layoutInfo = this.getLayoutInfo(key);\n let rect = layoutInfo.rect;\n let target: DropTarget = {\n type: 'item',\n key: layoutInfo.key,\n dropPosition: 'on'\n };\n\n // If dropping on the item isn't accepted, try the target before or after depending on the y position.\n // Otherwise, if dropping on the item is accepted, still try the before/after positions if within 10px\n // of the top or bottom of the item.\n if (!isValidDropTarget(target)) {\n if (y <= rect.y + rect.height / 2 && isValidDropTarget({...target, dropPosition: 'before'})) {\n target.dropPosition = 'before';\n } else if (isValidDropTarget({...target, dropPosition: 'after'})) {\n target.dropPosition = 'after';\n }\n } else if (y <= rect.y + 10 && isValidDropTarget({...target, dropPosition: 'before'})) {\n target.dropPosition = 'before';\n } else if (y >= rect.maxY - 10 && isValidDropTarget({...target, dropPosition: 'after'})) {\n target.dropPosition = 'after';\n }\n\n return target;\n }\n}\n"],"names":[],"version":3,"file":"ListLayout.module.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-stately/layout/src/ListLayout.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, DropTarget, DropTargetDelegate, Key, Node} from '@react-types/shared';\nimport {getChildNodes} from '@react-stately/collections';\nimport {InvalidationContext, Layout, LayoutInfo, Point, Rect, Size} from '@react-stately/virtualizer';\n\nexport type ListLayoutOptions<T> = {\n /** The height of a row in px. */\n rowHeight?: number,\n estimatedRowHeight?: number,\n headingHeight?: number,\n estimatedHeadingHeight?: number,\n padding?: number,\n indentationForItem?: (collection: Collection<Node<T>>, key: Key) => number,\n loaderHeight?: number,\n placeholderHeight?: number,\n forceSectionHeaders?: boolean,\n enableEmptyState?: boolean\n};\n\n// A wrapper around LayoutInfo that supports hierarchy\nexport interface LayoutNode {\n node?: Node<unknown>,\n layoutInfo: LayoutInfo,\n header?: LayoutInfo,\n children?: LayoutNode[],\n validRect: Rect,\n index?: number\n}\n\nexport interface ListLayoutProps {\n isLoading?: boolean\n}\n\nconst DEFAULT_HEIGHT = 48;\n\n/**\n * The ListLayout class is an implementation of a virtualizer {@link Layout}\n * it is used for creating lists and lists with indented sub-lists.\n *\n * To configure a ListLayout, you can use the properties to define the\n * layouts and/or use the method for defining indentation.\n * The {@link ListKeyboardDelegate} extends the existing virtualizer\n * delegate with an additional method to do this (it uses the same delegate object as\n * the virtualizer itself).\n */\nexport class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements DropTargetDelegate {\n protected rowHeight: number;\n protected estimatedRowHeight: number;\n protected headingHeight: number;\n protected estimatedHeadingHeight: number;\n protected forceSectionHeaders: boolean;\n protected padding: number;\n protected indentationForItem?: (collection: Collection<Node<T>>, key: Key) => number;\n protected layoutInfos: Map<Key, LayoutInfo>;\n protected layoutNodes: Map<Key, LayoutNode>;\n protected contentSize: Size;\n protected collection: Collection<Node<T>>;\n protected isLoading: boolean;\n protected lastWidth: number;\n protected lastCollection: Collection<Node<T>>;\n protected rootNodes: LayoutNode[];\n protected invalidateEverything: boolean;\n protected loaderHeight: number;\n protected placeholderHeight: number;\n protected enableEmptyState: boolean;\n protected lastValidRect: Rect;\n protected validRect: Rect;\n\n /**\n * Creates a new ListLayout with options. See the list of properties below for a description\n * of the options that can be provided.\n */\n constructor(options: ListLayoutOptions<T> = {}) {\n super();\n this.rowHeight = options.rowHeight;\n this.estimatedRowHeight = options.estimatedRowHeight;\n this.headingHeight = options.headingHeight;\n this.estimatedHeadingHeight = options.estimatedHeadingHeight;\n this.forceSectionHeaders = options.forceSectionHeaders;\n this.padding = options.padding || 0;\n this.indentationForItem = options.indentationForItem;\n this.loaderHeight = options.loaderHeight;\n this.placeholderHeight = options.placeholderHeight;\n this.enableEmptyState = options.enableEmptyState || false;\n this.layoutInfos = new Map();\n this.layoutNodes = new Map();\n this.rootNodes = [];\n this.lastWidth = 0;\n this.lastCollection = null;\n this.lastValidRect = new Rect();\n this.validRect = new Rect();\n this.contentSize = new Size();\n }\n\n getLayoutInfo(key: Key) {\n this.ensureLayoutInfo(key);\n return this.layoutInfos.get(key)!;\n }\n\n getVisibleLayoutInfos(rect: Rect) {\n // Adjust rect to keep number of visible rows consistent.\n // (only if height > 1 for getDropTargetFromPoint)\n if (rect.height > 1) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight);\n rect.y = Math.floor(rect.y / rowHeight) * rowHeight;\n rect.height = Math.ceil(rect.height / rowHeight) * rowHeight;\n }\n\n // If layout hasn't yet been done for the requested rect, union the\n // new rect with the existing valid rect, and recompute.\n this.layoutIfNeeded(rect);\n\n let res: LayoutInfo[] = [];\n\n let addNodes = (nodes: LayoutNode[]) => {\n for (let node of nodes) {\n if (this.isVisible(node, rect)) {\n res.push(node.layoutInfo);\n if (node.header) {\n res.push(node.header);\n }\n\n if (node.children) {\n addNodes(node.children);\n }\n }\n }\n };\n\n addNodes(this.rootNodes);\n return res;\n }\n\n protected layoutIfNeeded(rect: Rect) {\n if (!this.lastCollection) {\n return;\n }\n\n if (!this.validRect.containsRect(rect)) {\n this.lastValidRect = this.validRect;\n this.validRect = this.validRect.union(rect);\n this.rootNodes = this.buildCollection();\n } else {\n // Ensure all of the persisted keys are available.\n for (let key of this.virtualizer.persistedKeys) {\n if (this.ensureLayoutInfo(key)) {\n break;\n }\n }\n }\n }\n\n private ensureLayoutInfo(key: Key) {\n // If the layout info wasn't found, it might be outside the bounds of the area that we've\n // computed layout for so far. This can happen when accessing a random key, e.g pressing Home/End.\n // Compute the full layout and try again.\n if (!this.layoutInfos.has(key) && this.validRect.area < this.contentSize.area && this.lastCollection) {\n this.lastValidRect = this.validRect;\n this.validRect = new Rect(0, 0, Infinity, Infinity);\n this.rootNodes = this.buildCollection();\n this.validRect = new Rect(0, 0, this.contentSize.width, this.contentSize.height);\n return true;\n }\n\n return false;\n }\n\n private isVisible(node: LayoutNode, rect: Rect) {\n return node.layoutInfo.rect.intersects(rect) || node.layoutInfo.isSticky || this.virtualizer.isPersistedKey(node.layoutInfo.key);\n }\n\n protected shouldInvalidateEverything(invalidationContext: InvalidationContext<ListLayoutProps>) {\n // Invalidate cache if the size of the collection changed.\n // In this case, we need to recalculate the entire layout.\n return invalidationContext.sizeChanged;\n }\n\n validate(invalidationContext: InvalidationContext<ListLayoutProps>) {\n this.collection = this.virtualizer.collection;\n this.isLoading = invalidationContext.layoutOptions?.isLoading || false;\n\n // Reset valid rect if we will have to invalidate everything.\n // Otherwise we can reuse cached layout infos outside the current visible rect.\n this.invalidateEverything = this.shouldInvalidateEverything(invalidationContext);\n if (this.invalidateEverything) {\n this.lastValidRect = this.validRect;\n this.validRect = this.virtualizer.visibleRect.copy();\n }\n\n this.rootNodes = this.buildCollection();\n\n // Remove deleted layout nodes\n if (this.lastCollection && this.collection !== this.lastCollection) {\n for (let key of this.lastCollection.getKeys()) {\n if (!this.collection.getItem(key)) {\n let layoutNode = this.layoutNodes.get(key);\n if (layoutNode) {\n this.layoutInfos.delete(layoutNode.layoutInfo.key);\n this.layoutInfos.delete(layoutNode.header?.key);\n this.layoutNodes.delete(key);\n }\n }\n }\n }\n\n this.lastWidth = this.virtualizer.visibleRect.width;\n this.lastCollection = this.collection;\n this.invalidateEverything = false;\n }\n\n protected buildCollection(): LayoutNode[] {\n let y = this.padding;\n let skipped = 0;\n let nodes = [];\n for (let node of this.collection) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight);\n\n // Skip rows before the valid rectangle unless they are already cached.\n if (node.type === 'item' && y + rowHeight < this.validRect.y && !this.isValid(node, y)) {\n y += rowHeight;\n skipped++;\n continue;\n }\n\n let layoutNode = this.buildChild(node, 0, y, null);\n y = layoutNode.layoutInfo.rect.maxY;\n nodes.push(layoutNode);\n\n if (node.type === 'item' && y > this.validRect.maxY) {\n y += (this.collection.size - (nodes.length + skipped)) * rowHeight;\n break;\n }\n }\n\n if (this.isLoading) {\n let rect = new Rect(0, y, this.virtualizer.visibleRect.width,\n this.loaderHeight ?? this.virtualizer.visibleRect.height);\n let loader = new LayoutInfo('loader', 'loader', rect);\n this.layoutInfos.set('loader', loader);\n nodes.push({layoutInfo: loader});\n y = loader.rect.maxY;\n }\n\n if (nodes.length === 0 && this.enableEmptyState) {\n let rect = new Rect(0, y, this.virtualizer.visibleRect.width,\n this.placeholderHeight ?? this.virtualizer.visibleRect.height);\n let placeholder = new LayoutInfo('placeholder', 'placeholder', rect);\n this.layoutInfos.set('placeholder', placeholder);\n nodes.push({layoutInfo: placeholder});\n y = placeholder.rect.maxY;\n }\n\n this.contentSize = new Size(this.virtualizer.visibleRect.width, y + this.padding);\n return nodes;\n }\n\n protected isValid(node: Node<T>, y: number) {\n let cached = this.layoutNodes.get(node.key);\n return (\n !this.invalidateEverything &&\n cached &&\n cached.node === node &&\n y === (cached.header || cached.layoutInfo).rect.y &&\n cached.layoutInfo.rect.intersects(this.lastValidRect) &&\n cached.validRect.containsRect(cached.layoutInfo.rect.intersection(this.validRect))\n );\n }\n\n protected buildChild(node: Node<T>, x: number, y: number, parentKey: Key | null): LayoutNode {\n if (this.isValid(node, y)) {\n return this.layoutNodes.get(node.key);\n }\n\n let layoutNode = this.buildNode(node, x, y);\n layoutNode.node = node;\n\n layoutNode.layoutInfo.parentKey = parentKey ?? null;\n this.layoutInfos.set(layoutNode.layoutInfo.key, layoutNode.layoutInfo);\n if (layoutNode.header) {\n this.layoutInfos.set(layoutNode.header.key, layoutNode.header);\n }\n\n this.layoutNodes.set(node.key, layoutNode);\n return layoutNode;\n }\n\n protected buildNode(node: Node<T>, x: number, y: number): LayoutNode {\n switch (node.type) {\n case 'section':\n return this.buildSection(node, x, y);\n case 'item':\n return this.buildItem(node, x, y);\n case 'header':\n return this.buildSectionHeader(node, x, y);\n }\n }\n\n private buildSection(node: Node<T>, x: number, y: number): LayoutNode {\n let width = this.virtualizer.visibleRect.width;\n let header = null;\n if (node.rendered || this.forceSectionHeaders) {\n let headerNode = this.buildSectionHeader(node, x, y);\n header = headerNode.layoutInfo;\n header.key += ':header';\n header.parentKey = node.key;\n y += header.rect.height;\n }\n\n let rect = new Rect(0, y, width, 0);\n let layoutInfo = new LayoutInfo(node.type, node.key, rect);\n\n let startY = y;\n let skipped = 0;\n let children = [];\n for (let child of getChildNodes(node, this.collection)) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight);\n\n // Skip rows before the valid rectangle unless they are already cached.\n if (y + rowHeight < this.validRect.y && !this.isValid(node, y)) {\n y += rowHeight;\n skipped++;\n continue;\n }\n\n let layoutNode = this.buildChild(child, x, y, layoutInfo.key);\n y = layoutNode.layoutInfo.rect.maxY;\n children.push(layoutNode);\n\n if (y > this.validRect.maxY) {\n // Estimate the remaining height for rows that we don't need to layout right now.\n y += ([...getChildNodes(node, this.collection)].length - (children.length + skipped)) * rowHeight;\n break;\n }\n }\n\n rect.height = y - startY;\n\n return {\n header,\n layoutInfo,\n children,\n validRect: layoutInfo.rect.intersection(this.validRect)\n };\n }\n\n private buildSectionHeader(node: Node<T>, x: number, y: number): LayoutNode {\n let width = this.virtualizer.visibleRect.width;\n let rectHeight = this.headingHeight;\n let isEstimated = false;\n\n // If no explicit height is available, use an estimated height.\n if (rectHeight == null) {\n // If a previous version of this layout info exists, reuse its height.\n // Mark as estimated if the size of the overall virtualizer changed,\n // or the content of the item changed.\n let previousLayoutNode = this.layoutNodes.get(node.key);\n let previousLayoutInfo = previousLayoutNode?.header || previousLayoutNode?.layoutInfo;\n if (previousLayoutInfo) {\n let curNode = this.collection.getItem(node.key);\n let lastNode = this.lastCollection ? this.lastCollection.getItem(node.key) : null;\n rectHeight = previousLayoutInfo.rect.height;\n isEstimated = width !== this.lastWidth || curNode !== lastNode || previousLayoutInfo.estimatedSize;\n } else {\n rectHeight = (node.rendered ? this.estimatedHeadingHeight : 0);\n isEstimated = true;\n }\n }\n\n if (rectHeight == null) {\n rectHeight = DEFAULT_HEIGHT;\n }\n\n let headerRect = new Rect(0, y, width, rectHeight);\n let header = new LayoutInfo('header', node.key, headerRect);\n header.estimatedSize = isEstimated;\n return {\n layoutInfo: header,\n children: [],\n validRect: header.rect.intersection(this.validRect)\n };\n }\n\n private buildItem(node: Node<T>, x: number, y: number): LayoutNode {\n let width = this.virtualizer.visibleRect.width;\n let rectHeight = this.rowHeight;\n let isEstimated = false;\n\n // If no explicit height is available, use an estimated height.\n if (rectHeight == null) {\n // If a previous version of this layout info exists, reuse its height.\n // Mark as estimated if the size of the overall virtualizer changed,\n // or the content of the item changed.\n let previousLayoutNode = this.layoutNodes.get(node.key);\n if (previousLayoutNode) {\n rectHeight = previousLayoutNode.layoutInfo.rect.height;\n isEstimated = width !== this.lastWidth || node !== previousLayoutNode.node || previousLayoutNode.layoutInfo.estimatedSize;\n } else {\n rectHeight = this.estimatedRowHeight;\n isEstimated = true;\n }\n }\n\n if (rectHeight == null) {\n rectHeight = DEFAULT_HEIGHT;\n }\n\n if (typeof this.indentationForItem === 'function') {\n x += this.indentationForItem(this.collection, node.key) || 0;\n }\n\n let rect = new Rect(x, y, width - x, rectHeight);\n let layoutInfo = new LayoutInfo(node.type, node.key, rect);\n // allow overflow so the focus ring/selection ring can extend outside to overlap with the adjacent items borders\n layoutInfo.allowOverflow = true;\n layoutInfo.estimatedSize = isEstimated;\n return {\n layoutInfo,\n validRect: layoutInfo.rect\n };\n }\n\n updateItemSize(key: Key, size: Size) {\n let layoutInfo = this.layoutInfos.get(key);\n // If no layoutInfo, item has been deleted/removed.\n if (!layoutInfo) {\n return false;\n }\n\n layoutInfo.estimatedSize = false;\n if (layoutInfo.rect.height !== size.height) {\n // Copy layout info rather than mutating so that later caches are invalidated.\n let newLayoutInfo = layoutInfo.copy();\n newLayoutInfo.rect.height = size.height;\n this.layoutInfos.set(key, newLayoutInfo);\n\n // Invalidate layout for this layout node and all parents\n this.updateLayoutNode(key, layoutInfo, newLayoutInfo);\n\n let node = this.collection.getItem(layoutInfo.parentKey);\n while (node) {\n this.updateLayoutNode(node.key, layoutInfo, newLayoutInfo);\n node = this.collection.getItem(node.parentKey);\n }\n\n return true;\n }\n\n return false;\n }\n\n private updateLayoutNode(key: Key, oldLayoutInfo: LayoutInfo, newLayoutInfo: LayoutInfo) {\n let n = this.layoutNodes.get(key);\n if (n) {\n // Invalidate by reseting validRect.\n n.validRect = new Rect();\n\n // Replace layout info in LayoutNode\n if (n.header === oldLayoutInfo) {\n n.header = newLayoutInfo;\n } else if (n.layoutInfo === oldLayoutInfo) {\n n.layoutInfo = newLayoutInfo;\n }\n }\n }\n\n getContentSize() {\n return this.contentSize;\n }\n\n getDropTargetFromPoint(x: number, y: number, isValidDropTarget: (target: DropTarget) => boolean): DropTarget {\n x += this.virtualizer.visibleRect.x;\n y += this.virtualizer.visibleRect.y;\n\n let key = this.virtualizer.keyAtPoint(new Point(x, y));\n if (key == null || this.collection.size === 0) {\n return {type: 'root'};\n }\n\n let layoutInfo = this.getLayoutInfo(key);\n let rect = layoutInfo.rect;\n let target: DropTarget = {\n type: 'item',\n key: layoutInfo.key,\n dropPosition: 'on'\n };\n\n // If dropping on the item isn't accepted, try the target before or after depending on the y position.\n // Otherwise, if dropping on the item is accepted, still try the before/after positions if within 10px\n // of the top or bottom of the item.\n if (!isValidDropTarget(target)) {\n if (y <= rect.y + rect.height / 2 && isValidDropTarget({...target, dropPosition: 'before'})) {\n target.dropPosition = 'before';\n } else if (isValidDropTarget({...target, dropPosition: 'after'})) {\n target.dropPosition = 'after';\n }\n } else if (y <= rect.y + 10 && isValidDropTarget({...target, dropPosition: 'before'})) {\n target.dropPosition = 'before';\n } else if (y >= rect.maxY - 10 && isValidDropTarget({...target, dropPosition: 'after'})) {\n target.dropPosition = 'after';\n }\n\n return target;\n }\n}\n"],"names":[],"version":3,"file":"ListLayout.module.js.map"}
|
package/dist/TableLayout.main.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
var $fe69e47e38ed0ac4$exports = require("./ListLayout.main.js");
|
|
2
2
|
var $9lycG$reactstatelycollections = require("@react-stately/collections");
|
|
3
3
|
var $9lycG$reactstatelyvirtualizer = require("@react-stately/virtualizer");
|
|
4
|
+
var $9lycG$reactstatelytable = require("@react-stately/table");
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
function $parcel$export(e, n, v, s) {
|
|
@@ -21,72 +22,38 @@ $parcel$export(module.exports, "TableLayout", () => $67c493497dcda343$export$624
|
|
|
21
22
|
*/
|
|
22
23
|
|
|
23
24
|
|
|
25
|
+
|
|
24
26
|
class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$exports.ListLayout) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return super.shouldInvalidateEverything(invalidationContext) || !this.lastCollection || this.collection.columns.length !== this.lastCollection.columns.length || this.collection.columns.some((c, i)=>c.key !== this.lastCollection.columns[i].key || c.props.width !== this.lastCollection.columns[i].props.width || c.props.minWidth !== this.lastCollection.columns[i].props.minWidth || c.props.maxWidth !== this.lastCollection.columns[i].props.maxWidth);
|
|
28
|
-
}
|
|
29
|
-
getResizerPosition() {
|
|
30
|
-
var _this_getLayoutInfo;
|
|
31
|
-
return (_this_getLayoutInfo = this.getLayoutInfo(this.resizingColumn)) === null || _this_getLayoutInfo === void 0 ? void 0 : _this_getLayoutInfo.rect.maxX;
|
|
32
|
-
}
|
|
33
|
-
getColumnWidth(key) {
|
|
34
|
-
var _this_columnLayout_getColumnWidth;
|
|
35
|
-
return (_this_columnLayout_getColumnWidth = this.columnLayout.getColumnWidth(key)) !== null && _this_columnLayout_getColumnWidth !== void 0 ? _this_columnLayout_getColumnWidth : 0;
|
|
36
|
-
}
|
|
37
|
-
getColumnMinWidth(key) {
|
|
38
|
-
let column = this.collection.columns.find((col)=>col.key === key);
|
|
39
|
-
if (!column) return 0;
|
|
40
|
-
return this.columnLayout.getColumnMinWidth(key);
|
|
41
|
-
}
|
|
42
|
-
getColumnMaxWidth(key) {
|
|
43
|
-
let column = this.collection.columns.find((col)=>col.key === key);
|
|
44
|
-
if (!column) return 0;
|
|
45
|
-
return this.columnLayout.getColumnMaxWidth(key);
|
|
46
|
-
}
|
|
47
|
-
// outside, where this is called, should call props.onColumnResizeStart...
|
|
48
|
-
startResize(key) {
|
|
49
|
-
this.resizingColumn = key;
|
|
50
|
-
}
|
|
51
|
-
// only way to call props.onColumnResize with the new size outside of Layout is to send the result back
|
|
52
|
-
updateResizedColumns(key, width) {
|
|
53
|
-
let newControlled = new Map(Array.from(this.controlledColumns).map(([key, entry])=>[
|
|
54
|
-
key,
|
|
55
|
-
entry.props.width
|
|
56
|
-
]));
|
|
57
|
-
let newSizes = this.columnLayout.resizeColumnWidth(this.virtualizer.visibleRect.width, this.collection, newControlled, this.uncontrolledWidths, key, width);
|
|
58
|
-
let map = new Map(Array.from(this.uncontrolledColumns).map(([key])=>[
|
|
59
|
-
key,
|
|
60
|
-
newSizes.get(key)
|
|
61
|
-
]));
|
|
62
|
-
map.set(key, width);
|
|
63
|
-
this.uncontrolledWidths = map;
|
|
64
|
-
// invalidate still uses setState, should happen at the same time the parent
|
|
65
|
-
// component's state is processed as a result of props.onColumnResize
|
|
66
|
-
if (this.uncontrolledWidths.size > 0) this.virtualizer.invalidate({
|
|
67
|
-
sizeChanged: true
|
|
68
|
-
});
|
|
69
|
-
return newSizes;
|
|
27
|
+
columnsChanged(newCollection, oldCollection) {
|
|
28
|
+
return !oldCollection || newCollection.columns !== oldCollection.columns && newCollection.columns.length !== oldCollection.columns.length || newCollection.columns.some((c, i)=>c.key !== oldCollection.columns[i].key || c.props.width !== oldCollection.columns[i].props.width || c.props.minWidth !== oldCollection.columns[i].props.minWidth || c.props.maxWidth !== oldCollection.columns[i].props.maxWidth);
|
|
70
29
|
}
|
|
71
|
-
|
|
72
|
-
|
|
30
|
+
validate(invalidationContext) {
|
|
31
|
+
var _invalidationContext_layoutOptions;
|
|
32
|
+
let newCollection = this.virtualizer.collection;
|
|
33
|
+
// If columnWidths were provided via layoutOptions, update those.
|
|
34
|
+
// Otherwise, calculate column widths ourselves.
|
|
35
|
+
if ((_invalidationContext_layoutOptions = invalidationContext.layoutOptions) === null || _invalidationContext_layoutOptions === void 0 ? void 0 : _invalidationContext_layoutOptions.columnWidths) {
|
|
36
|
+
if (invalidationContext.layoutOptions.columnWidths !== this.columnWidths) {
|
|
37
|
+
this.columnWidths = invalidationContext.layoutOptions.columnWidths;
|
|
38
|
+
invalidationContext.sizeChanged = true;
|
|
39
|
+
}
|
|
40
|
+
} else if (invalidationContext.sizeChanged || this.columnsChanged(newCollection, this.collection)) {
|
|
41
|
+
let columnLayout = new (0, $9lycG$reactstatelytable.TableColumnLayout)({});
|
|
42
|
+
this.columnWidths = columnLayout.buildColumnWidths(this.virtualizer.visibleRect.width, newCollection, new Map());
|
|
43
|
+
invalidationContext.sizeChanged = true;
|
|
44
|
+
}
|
|
45
|
+
super.validate(invalidationContext);
|
|
73
46
|
}
|
|
74
47
|
buildCollection() {
|
|
75
48
|
// Track whether we were previously loading. This is used to adjust the animations of async loading vs inserts.
|
|
76
49
|
let loadingState = this.collection.body.props.loadingState;
|
|
77
|
-
this.wasLoading = this.isLoading;
|
|
78
50
|
this.isLoading = loadingState === 'loading' || loadingState === 'loadingMore';
|
|
79
51
|
this.stickyColumnIndices = [];
|
|
80
52
|
for (let column of this.collection.columns)// The selection cell and any other sticky columns always need to be visible.
|
|
81
53
|
// In addition, row headers need to be in the DOM for accessibility labeling.
|
|
82
54
|
if (column.props.isDragButtonCell || column.props.isSelectionCell || this.collection.rowHeaderColumnKeys.has(column.key)) this.stickyColumnIndices.push(column.index);
|
|
83
|
-
let
|
|
84
|
-
this.
|
|
85
|
-
this.uncontrolledColumns = uncontrolledColumns;
|
|
86
|
-
let colWidths = this.columnLayout.recombineColumns(this.collection.columns, this.uncontrolledWidths, uncontrolledColumns, controlledColumns);
|
|
87
|
-
this.columnWidths = this.columnLayout.buildColumnWidths(this.virtualizer.visibleRect.width, this.collection, colWidths);
|
|
88
|
-
let header = this.buildHeader();
|
|
89
|
-
let body = this.buildBody(0);
|
|
55
|
+
let header = this.buildColumnHeader();
|
|
56
|
+
let body = this.buildBody(this.scrollContainer === 'body' ? 0 : header.layoutInfo.rect.height);
|
|
90
57
|
this.lastPersistedKeys = null;
|
|
91
58
|
body.layoutInfo.rect.width = Math.max(header.layoutInfo.rect.width, body.layoutInfo.rect.width);
|
|
92
59
|
this.contentSize = new (0, $9lycG$reactstatelyvirtualizer.Size)(body.layoutInfo.rect.width, body.layoutInfo.rect.maxY);
|
|
@@ -95,15 +62,19 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
95
62
|
body
|
|
96
63
|
];
|
|
97
64
|
}
|
|
98
|
-
|
|
65
|
+
buildColumnHeader() {
|
|
66
|
+
var _this_collection_head;
|
|
99
67
|
let rect = new (0, $9lycG$reactstatelyvirtualizer.Rect)(0, 0, 0, 0);
|
|
100
|
-
|
|
68
|
+
var _this_collection_head_key;
|
|
69
|
+
let layoutInfo = new (0, $9lycG$reactstatelyvirtualizer.LayoutInfo)('header', (_this_collection_head_key = (_this_collection_head = this.collection.head) === null || _this_collection_head === void 0 ? void 0 : _this_collection_head.key) !== null && _this_collection_head_key !== void 0 ? _this_collection_head_key : 'header', rect);
|
|
70
|
+
layoutInfo.isSticky = true;
|
|
71
|
+
layoutInfo.zIndex = 1;
|
|
101
72
|
let y = 0;
|
|
102
73
|
let width = 0;
|
|
103
74
|
let children = [];
|
|
104
75
|
for (let headerRow of this.collection.headerRows){
|
|
105
|
-
let layoutNode = this.buildChild(headerRow, 0, y);
|
|
106
|
-
layoutNode.layoutInfo.parentKey =
|
|
76
|
+
let layoutNode = this.buildChild(headerRow, 0, y, layoutInfo.key);
|
|
77
|
+
layoutNode.layoutInfo.parentKey = layoutInfo.key;
|
|
107
78
|
y = layoutNode.layoutInfo.rect.maxY;
|
|
108
79
|
width = Math.max(width, layoutNode.layoutInfo.rect.width);
|
|
109
80
|
layoutNode.index = children.length;
|
|
@@ -111,7 +82,7 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
111
82
|
}
|
|
112
83
|
rect.width = width;
|
|
113
84
|
rect.height = y;
|
|
114
|
-
this.layoutInfos.set(
|
|
85
|
+
this.layoutInfos.set(layoutInfo.key, layoutInfo);
|
|
115
86
|
return {
|
|
116
87
|
layoutInfo: layoutInfo,
|
|
117
88
|
children: children,
|
|
@@ -124,7 +95,7 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
124
95
|
let height = 0;
|
|
125
96
|
let columns = [];
|
|
126
97
|
for (let cell of (0, $9lycG$reactstatelycollections.getChildNodes)(headerRow, this.collection)){
|
|
127
|
-
let layoutNode = this.buildChild(cell, x, y);
|
|
98
|
+
let layoutNode = this.buildChild(cell, x, y, row.key);
|
|
128
99
|
layoutNode.layoutInfo.parentKey = row.key;
|
|
129
100
|
x = layoutNode.layoutInfo.rect.maxX;
|
|
130
101
|
height = Math.max(height, layoutNode.layoutInfo.rect.height);
|
|
@@ -192,6 +163,7 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
192
163
|
layoutInfo.isSticky = !this.disableSticky && (((_node_props = node.props) === null || _node_props === void 0 ? void 0 : _node_props.isDragButtonCell) || ((_node_props1 = node.props) === null || _node_props1 === void 0 ? void 0 : _node_props1.isSelectionCell));
|
|
193
164
|
layoutInfo.zIndex = layoutInfo.isSticky ? 2 : 1;
|
|
194
165
|
layoutInfo.estimatedSize = isEstimated;
|
|
166
|
+
layoutInfo.allowOverflow = true;
|
|
195
167
|
return {
|
|
196
168
|
layoutInfo: layoutInfo,
|
|
197
169
|
validRect: layoutInfo.rect
|
|
@@ -199,13 +171,13 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
199
171
|
}
|
|
200
172
|
buildBody(y) {
|
|
201
173
|
let rect = new (0, $9lycG$reactstatelyvirtualizer.Rect)(0, y, 0, 0);
|
|
202
|
-
let layoutInfo = new (0, $9lycG$reactstatelyvirtualizer.LayoutInfo)('rowgroup',
|
|
174
|
+
let layoutInfo = new (0, $9lycG$reactstatelyvirtualizer.LayoutInfo)('rowgroup', this.collection.body.key, rect);
|
|
203
175
|
let startY = y;
|
|
204
176
|
let skipped = 0;
|
|
205
177
|
let width = 0;
|
|
206
178
|
let children = [];
|
|
207
179
|
for (let [i, node] of [
|
|
208
|
-
...this.collection
|
|
180
|
+
...(0, $9lycG$reactstatelycollections.getChildNodes)(this.collection.body, this.collection)
|
|
209
181
|
].entries()){
|
|
210
182
|
var _this_rowHeight;
|
|
211
183
|
let rowHeight = ((_this_rowHeight = this.rowHeight) !== null && _this_rowHeight !== void 0 ? _this_rowHeight : this.estimatedRowHeight) + 1;
|
|
@@ -215,8 +187,8 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
215
187
|
skipped++;
|
|
216
188
|
continue;
|
|
217
189
|
}
|
|
218
|
-
let layoutNode = this.buildChild(node, 0, y);
|
|
219
|
-
layoutNode.layoutInfo.parentKey =
|
|
190
|
+
let layoutNode = this.buildChild(node, 0, y, layoutInfo.key);
|
|
191
|
+
layoutNode.layoutInfo.parentKey = layoutInfo.key;
|
|
220
192
|
layoutNode.index = i;
|
|
221
193
|
y = layoutNode.layoutInfo.rect.maxY;
|
|
222
194
|
width = Math.max(width, layoutNode.layoutInfo.rect.width);
|
|
@@ -231,7 +203,7 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
231
203
|
// Add some margin around the loader to ensure that scrollbars don't flicker in and out.
|
|
232
204
|
let rect = new (0, $9lycG$reactstatelyvirtualizer.Rect)(40, Math.max(y, 40), (width || this.virtualizer.visibleRect.width) - 80, children.length === 0 ? this.virtualizer.visibleRect.height - 80 : 60);
|
|
233
205
|
let loader = new (0, $9lycG$reactstatelyvirtualizer.LayoutInfo)('loader', 'loader', rect);
|
|
234
|
-
loader.parentKey =
|
|
206
|
+
loader.parentKey = layoutInfo.key;
|
|
235
207
|
loader.isSticky = !this.disableSticky && children.length === 0;
|
|
236
208
|
this.layoutInfos.set('loader', loader);
|
|
237
209
|
children.push({
|
|
@@ -241,21 +213,23 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
241
213
|
y = loader.rect.maxY;
|
|
242
214
|
width = Math.max(width, rect.width);
|
|
243
215
|
} else if (children.length === 0) {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
216
|
+
if (this.enableEmptyState) {
|
|
217
|
+
let rect = new (0, $9lycG$reactstatelyvirtualizer.Rect)(40, Math.max(y, 40), this.virtualizer.visibleRect.width - 80, this.virtualizer.visibleRect.height - 80);
|
|
218
|
+
let empty = new (0, $9lycG$reactstatelyvirtualizer.LayoutInfo)('empty', 'empty', rect);
|
|
219
|
+
empty.parentKey = layoutInfo.key;
|
|
220
|
+
empty.isSticky = !this.disableSticky;
|
|
221
|
+
this.layoutInfos.set('empty', empty);
|
|
222
|
+
children.push({
|
|
223
|
+
layoutInfo: empty,
|
|
224
|
+
validRect: empty.rect
|
|
225
|
+
});
|
|
226
|
+
y = empty.rect.maxY;
|
|
227
|
+
width = Math.max(width, rect.width);
|
|
228
|
+
} else y = this.virtualizer.visibleRect.maxY;
|
|
255
229
|
}
|
|
256
230
|
rect.width = width;
|
|
257
231
|
rect.height = y - startY;
|
|
258
|
-
this.layoutInfos.set(
|
|
232
|
+
this.layoutInfos.set(layoutInfo.key, layoutInfo);
|
|
259
233
|
return {
|
|
260
234
|
layoutInfo: layoutInfo,
|
|
261
235
|
children: children,
|
|
@@ -278,6 +252,7 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
278
252
|
}
|
|
279
253
|
}
|
|
280
254
|
buildRow(node, x, y) {
|
|
255
|
+
var _this_collection_head;
|
|
281
256
|
let rect = new (0, $9lycG$reactstatelyvirtualizer.Rect)(x, y, 0, 0);
|
|
282
257
|
let layoutInfo = new (0, $9lycG$reactstatelyvirtualizer.LayoutInfo)('row', node.key, rect);
|
|
283
258
|
let children = [];
|
|
@@ -294,7 +269,7 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
294
269
|
x += layoutNode.layoutInfo.rect.width;
|
|
295
270
|
}
|
|
296
271
|
} else {
|
|
297
|
-
let layoutNode = this.buildChild(child, x, y);
|
|
272
|
+
let layoutNode = this.buildChild(child, x, y, layoutInfo.key);
|
|
298
273
|
x = layoutNode.layoutInfo.rect.maxX;
|
|
299
274
|
height = Math.max(height, layoutNode.layoutInfo.rect.height);
|
|
300
275
|
layoutNode.index = i;
|
|
@@ -302,7 +277,8 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
302
277
|
}
|
|
303
278
|
}
|
|
304
279
|
this.setChildHeights(children, height);
|
|
305
|
-
|
|
280
|
+
var _this_collection_head_key;
|
|
281
|
+
rect.width = this.layoutInfos.get((_this_collection_head_key = (_this_collection_head = this.collection.head) === null || _this_collection_head === void 0 ? void 0 : _this_collection_head.key) !== null && _this_collection_head_key !== void 0 ? _this_collection_head_key : 'header').rect.width;
|
|
306
282
|
rect.height = height + 1; // +1 for bottom border
|
|
307
283
|
return {
|
|
308
284
|
layoutInfo: layoutInfo,
|
|
@@ -335,11 +311,7 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
335
311
|
}
|
|
336
312
|
// If layout hasn't yet been done for the requested rect, union the
|
|
337
313
|
// new rect with the existing valid rect, and recompute.
|
|
338
|
-
|
|
339
|
-
this.lastValidRect = this.validRect;
|
|
340
|
-
this.validRect = this.validRect.union(rect);
|
|
341
|
-
this.rootNodes = this.buildCollection();
|
|
342
|
-
}
|
|
314
|
+
this.layoutIfNeeded(rect);
|
|
343
315
|
let res = [];
|
|
344
316
|
this.buildPersistedIndices();
|
|
345
317
|
for (let node of this.rootNodes){
|
|
@@ -442,7 +414,7 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
442
414
|
let indices = this.persistedIndices.get(layoutInfo.parentKey);
|
|
443
415
|
if (!indices) {
|
|
444
416
|
// stickyColumnIndices are always persisted along with any cells from persistedKeys.
|
|
445
|
-
indices = collectionNode.type === 'cell' || collectionNode.type === 'column' ? [
|
|
417
|
+
indices = (collectionNode === null || collectionNode === void 0 ? void 0 : collectionNode.type) === 'cell' || (collectionNode === null || collectionNode === void 0 ? void 0 : collectionNode.type) === 'column' ? [
|
|
446
418
|
...this.stickyColumnIndices
|
|
447
419
|
] : [];
|
|
448
420
|
this.persistedIndices.set(layoutInfo.parentKey, indices);
|
|
@@ -515,19 +487,12 @@ class $67c493497dcda343$export$62444c3c724b1b20 extends (0, $fe69e47e38ed0ac4$ex
|
|
|
515
487
|
}
|
|
516
488
|
constructor(options){
|
|
517
489
|
super(options);
|
|
518
|
-
this.columnWidths = new Map();
|
|
519
|
-
this.wasLoading = false;
|
|
520
490
|
this.isLoading = false;
|
|
521
491
|
this.lastPersistedKeys = null;
|
|
522
492
|
this.persistedIndices = new Map();
|
|
523
|
-
this.
|
|
493
|
+
this.scrollContainer = options.scrollContainer || 'table';
|
|
524
494
|
this.stickyColumnIndices = [];
|
|
525
495
|
this.disableSticky = this.checkChrome105();
|
|
526
|
-
this.columnLayout = options.columnLayout;
|
|
527
|
-
let [controlledColumns, uncontrolledColumns] = this.columnLayout.splitColumnsIntoControlledAndUncontrolled(this.collection.columns);
|
|
528
|
-
this.controlledColumns = controlledColumns;
|
|
529
|
-
this.uncontrolledColumns = uncontrolledColumns;
|
|
530
|
-
this.uncontrolledWidths = this.columnLayout.getInitialUncontrolledWidths(uncontrolledColumns);
|
|
531
496
|
}
|
|
532
497
|
}
|
|
533
498
|
|