e-virt-table 1.2.22 → 1.2.24
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/index.cjs.js +4 -4
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +1705 -1377
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +4 -4
- package/dist/index.umd.js.map +1 -1
- package/dist/lib/Cell.d.ts +1 -0
- package/dist/lib/Cell.js +83 -5
- package/dist/lib/Cell.js.map +1 -1
- package/dist/lib/CellHeader.d.ts +13 -1
- package/dist/lib/CellHeader.js +161 -12
- package/dist/lib/CellHeader.js.map +1 -1
- package/dist/lib/Config.d.ts +17 -0
- package/dist/lib/Config.js +55 -1
- package/dist/lib/Config.js.map +1 -1
- package/dist/lib/Database.d.ts +30 -1
- package/dist/lib/Database.js +123 -15
- package/dist/lib/Database.js.map +1 -1
- package/dist/lib/EVirtTable.d.ts +1 -0
- package/dist/lib/EVirtTable.js +3 -0
- package/dist/lib/EVirtTable.js.map +1 -1
- package/dist/lib/EventTable.d.ts +2 -0
- package/dist/lib/EventTable.js +62 -32
- package/dist/lib/EventTable.js.map +1 -1
- package/dist/lib/Header.js.map +1 -1
- package/dist/lib/Icons.js +28 -2
- package/dist/lib/Icons.js.map +1 -1
- package/dist/lib/Paint.d.ts +2 -0
- package/dist/lib/Paint.js +5 -1
- package/dist/lib/Paint.js.map +1 -1
- package/dist/lib/types.d.ts +11 -0
- package/dist/lib/util.d.ts +14 -1
- package/dist/lib/util.js +95 -1
- package/dist/lib/util.js.map +1 -1
- package/package.json +5 -4
package/dist/lib/Config.d.ts
CHANGED
|
@@ -40,8 +40,11 @@ export default class Config {
|
|
|
40
40
|
MAX_HEIGHT: number;
|
|
41
41
|
/** 区域边框圆角 */
|
|
42
42
|
BORDER_RADIUS: number;
|
|
43
|
+
/** 启用偏移高度内部计算表格高度 */
|
|
43
44
|
ENABLE_OFFSET_HEIGHT: boolean;
|
|
45
|
+
/** 偏移高度 */
|
|
44
46
|
OFFSET_HEIGHT: number;
|
|
47
|
+
/** 表头高度 */
|
|
45
48
|
HEADER_HEIGHT: number;
|
|
46
49
|
/** 启用头部固定,需要外面实现覆盖层,或者所有表头都要是元素 */
|
|
47
50
|
ENABLE_HEADER_STICKY: boolean;
|
|
@@ -124,6 +127,16 @@ export default class Config {
|
|
|
124
127
|
CHECKBOX_UNCHECK_SVG: string;
|
|
125
128
|
/** 选择框半选中图标 */
|
|
126
129
|
CHECKBOX_INDETERMINATE_SVG: string;
|
|
130
|
+
/** 启用严格排序,即不支持多列排序 */
|
|
131
|
+
SORT_STRICTLY: boolean;
|
|
132
|
+
/** 排序升序图标 */
|
|
133
|
+
SORT_ASC_ICON_SVG: string;
|
|
134
|
+
/** 排序降序图标 */
|
|
135
|
+
SORT_DESC_ICON_SVG: string;
|
|
136
|
+
/** 排序默认图标 */
|
|
137
|
+
SORTABLE_ICON_SVG: string;
|
|
138
|
+
/** 排序图标颜色 */
|
|
139
|
+
SORT_ICON_COLOR: string;
|
|
127
140
|
/** 单元格只读背景色 */
|
|
128
141
|
READONLY_COLOR: string;
|
|
129
142
|
/** 单元格只读文本颜色 */
|
|
@@ -146,6 +159,10 @@ export default class Config {
|
|
|
146
159
|
TREE_INDENT: number;
|
|
147
160
|
/** 树形图标大小 */
|
|
148
161
|
TREE_ICON_SIZE: number;
|
|
162
|
+
/**树形划线 */
|
|
163
|
+
TREE_LINE: boolean;
|
|
164
|
+
/** 树形划线颜色 */
|
|
165
|
+
TREE_LINE_COLOR: string;
|
|
149
166
|
/** 启用单点击立马编辑 */
|
|
150
167
|
ENABLE_EDIT_SINGLE_CLICK: boolean;
|
|
151
168
|
/** 启用点击选择器编辑 */
|
package/dist/lib/Config.js
CHANGED
|
@@ -140,18 +140,21 @@ export default class Config {
|
|
|
140
140
|
writable: true,
|
|
141
141
|
value: 8
|
|
142
142
|
});
|
|
143
|
+
/** 启用偏移高度内部计算表格高度 */
|
|
143
144
|
Object.defineProperty(this, "ENABLE_OFFSET_HEIGHT", {
|
|
144
145
|
enumerable: true,
|
|
145
146
|
configurable: true,
|
|
146
147
|
writable: true,
|
|
147
148
|
value: false
|
|
148
149
|
});
|
|
150
|
+
/** 偏移高度 */
|
|
149
151
|
Object.defineProperty(this, "OFFSET_HEIGHT", {
|
|
150
152
|
enumerable: true,
|
|
151
153
|
configurable: true,
|
|
152
154
|
writable: true,
|
|
153
155
|
value: 0
|
|
154
156
|
});
|
|
157
|
+
/** 表头高度 */
|
|
155
158
|
Object.defineProperty(this, "HEADER_HEIGHT", {
|
|
156
159
|
enumerable: true,
|
|
157
160
|
configurable: true,
|
|
@@ -444,6 +447,41 @@ export default class Config {
|
|
|
444
447
|
writable: true,
|
|
445
448
|
value: ''
|
|
446
449
|
});
|
|
450
|
+
/** 启用严格排序,即不支持多列排序 */
|
|
451
|
+
Object.defineProperty(this, "SORT_STRICTLY", {
|
|
452
|
+
enumerable: true,
|
|
453
|
+
configurable: true,
|
|
454
|
+
writable: true,
|
|
455
|
+
value: true
|
|
456
|
+
});
|
|
457
|
+
/** 排序升序图标 */
|
|
458
|
+
Object.defineProperty(this, "SORT_ASC_ICON_SVG", {
|
|
459
|
+
enumerable: true,
|
|
460
|
+
configurable: true,
|
|
461
|
+
writable: true,
|
|
462
|
+
value: ''
|
|
463
|
+
});
|
|
464
|
+
/** 排序降序图标 */
|
|
465
|
+
Object.defineProperty(this, "SORT_DESC_ICON_SVG", {
|
|
466
|
+
enumerable: true,
|
|
467
|
+
configurable: true,
|
|
468
|
+
writable: true,
|
|
469
|
+
value: ''
|
|
470
|
+
});
|
|
471
|
+
/** 排序默认图标 */
|
|
472
|
+
Object.defineProperty(this, "SORTABLE_ICON_SVG", {
|
|
473
|
+
enumerable: true,
|
|
474
|
+
configurable: true,
|
|
475
|
+
writable: true,
|
|
476
|
+
value: ''
|
|
477
|
+
});
|
|
478
|
+
/** 排序图标颜色 */
|
|
479
|
+
Object.defineProperty(this, "SORT_ICON_COLOR", {
|
|
480
|
+
enumerable: true,
|
|
481
|
+
configurable: true,
|
|
482
|
+
writable: true,
|
|
483
|
+
value: 'rgb(82,146,247)'
|
|
484
|
+
});
|
|
447
485
|
/** 单元格只读背景色 */
|
|
448
486
|
Object.defineProperty(this, "READONLY_COLOR", {
|
|
449
487
|
enumerable: true,
|
|
@@ -521,6 +559,20 @@ export default class Config {
|
|
|
521
559
|
writable: true,
|
|
522
560
|
value: 20
|
|
523
561
|
});
|
|
562
|
+
/**树形划线 */
|
|
563
|
+
Object.defineProperty(this, "TREE_LINE", {
|
|
564
|
+
enumerable: true,
|
|
565
|
+
configurable: true,
|
|
566
|
+
writable: true,
|
|
567
|
+
value: false
|
|
568
|
+
});
|
|
569
|
+
/** 树形划线颜色 */
|
|
570
|
+
Object.defineProperty(this, "TREE_LINE_COLOR", {
|
|
571
|
+
enumerable: true,
|
|
572
|
+
configurable: true,
|
|
573
|
+
writable: true,
|
|
574
|
+
value: '#e1e6eb'
|
|
575
|
+
});
|
|
524
576
|
/** 启用单点击立马编辑 */
|
|
525
577
|
Object.defineProperty(this, "ENABLE_EDIT_SINGLE_CLICK", {
|
|
526
578
|
enumerable: true,
|
|
@@ -946,7 +998,9 @@ export default class Config {
|
|
|
946
998
|
if (key.endsWith('_COLOR') || key.endsWith('_FONT')) {
|
|
947
999
|
const cssKey = `--evt-${key.toLocaleLowerCase().replace(/_/g, '-')}`;
|
|
948
1000
|
const val = getCssVar(cssKey);
|
|
949
|
-
|
|
1001
|
+
if (val) {
|
|
1002
|
+
obj[key] = val;
|
|
1003
|
+
}
|
|
950
1004
|
}
|
|
951
1005
|
});
|
|
952
1006
|
Object.assign(this, obj, this._config);
|
package/dist/lib/Config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/Database.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export default class Database {
|
|
|
26
26
|
private sumHeight;
|
|
27
27
|
private filterMethod;
|
|
28
28
|
private positions;
|
|
29
|
+
private sortState;
|
|
29
30
|
constructor(ctx: Context, options: EVirtTableOptions);
|
|
30
31
|
init(isClear?: boolean): void;
|
|
31
32
|
/**
|
|
@@ -45,7 +46,7 @@ export default class Database {
|
|
|
45
46
|
*/
|
|
46
47
|
setRowHeight(rowIndex: number, height: number): void;
|
|
47
48
|
/**
|
|
48
|
-
*
|
|
49
|
+
* 获取所有行数据(平铺)
|
|
49
50
|
* @returns 获取转化平铺数据
|
|
50
51
|
*/
|
|
51
52
|
getAllRowsData(): any[];
|
|
@@ -72,6 +73,34 @@ export default class Database {
|
|
|
72
73
|
* 清空过滤方法
|
|
73
74
|
*/
|
|
74
75
|
clearFilterMethod(): void;
|
|
76
|
+
/**
|
|
77
|
+
* 获取排序状态
|
|
78
|
+
*/
|
|
79
|
+
getSortState(key: string): import("./types").SortStateMapItem;
|
|
80
|
+
/**
|
|
81
|
+
* 设置排序状态
|
|
82
|
+
*/
|
|
83
|
+
setSortState(key: string, direction: 'asc' | 'desc' | 'none'): void;
|
|
84
|
+
/**
|
|
85
|
+
* 清除所有排序状态
|
|
86
|
+
*/
|
|
87
|
+
clearSort(): void;
|
|
88
|
+
/**
|
|
89
|
+
* 递归排序方法,支持树形数据
|
|
90
|
+
* @param data 要排序的数据
|
|
91
|
+
* @param sortedEntries 排序条目,按时间戳排序
|
|
92
|
+
* @returns 排序后的数据
|
|
93
|
+
*/
|
|
94
|
+
private sortDataRecursive;
|
|
95
|
+
/**
|
|
96
|
+
* 对数组进行单列排序
|
|
97
|
+
* @param data 要排序的数据
|
|
98
|
+
* @param key 排序的列键
|
|
99
|
+
* @param direction 排序方向
|
|
100
|
+
* @param sortBy 排序类型
|
|
101
|
+
* @returns 排序后的数据
|
|
102
|
+
*/
|
|
103
|
+
private applySingleColumnSort;
|
|
75
104
|
/**
|
|
76
105
|
* 根据rowKey,控制指定展开行
|
|
77
106
|
* @param rowKey
|
package/dist/lib/Database.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Validator from './Validator';
|
|
2
|
-
import { generateShortUUID, toLeaf } from './util';
|
|
2
|
+
import { generateShortUUID, toLeaf, compareDates } from './util';
|
|
3
3
|
import Cell from './Cell';
|
|
4
4
|
export default class Database {
|
|
5
5
|
constructor(ctx, options) {
|
|
@@ -140,6 +140,12 @@ export default class Database {
|
|
|
140
140
|
writable: true,
|
|
141
141
|
value: []
|
|
142
142
|
}); //虚拟滚动位置
|
|
143
|
+
Object.defineProperty(this, "sortState", {
|
|
144
|
+
enumerable: true,
|
|
145
|
+
configurable: true,
|
|
146
|
+
writable: true,
|
|
147
|
+
value: new Map()
|
|
148
|
+
});
|
|
143
149
|
this.ctx = ctx;
|
|
144
150
|
const { data = [], columns = [], footerData = [] } = options;
|
|
145
151
|
this.data = data;
|
|
@@ -199,6 +205,7 @@ export default class Database {
|
|
|
199
205
|
* @param level
|
|
200
206
|
*/
|
|
201
207
|
initData(dataList, level = 0, parentRowKeys = []) {
|
|
208
|
+
const siblingsLength = dataList.length;
|
|
202
209
|
dataList.forEach((item, index) => {
|
|
203
210
|
const { ROW_KEY = '', DEFAULT_EXPAND_ALL, CELL_HEIGHT, SELECTABLE_METHOD, CHECKBOX_KEY } = this.ctx.config;
|
|
204
211
|
const _rowKey = item[ROW_KEY]; // 行唯一标识,否则就rowKey
|
|
@@ -245,6 +252,8 @@ export default class Database {
|
|
|
245
252
|
expandLoading: false,
|
|
246
253
|
item,
|
|
247
254
|
parentRowKeys,
|
|
255
|
+
parentRowKey: parentRowKeys[parentRowKeys.length - 1] || '',
|
|
256
|
+
isLastChild: index === siblingsLength - 1,
|
|
248
257
|
});
|
|
249
258
|
if (Array.isArray(item.children)) {
|
|
250
259
|
if (item.children.length) {
|
|
@@ -269,7 +278,7 @@ export default class Database {
|
|
|
269
278
|
this.clearBufferData(); // 清除缓存数据
|
|
270
279
|
}
|
|
271
280
|
/**
|
|
272
|
-
*
|
|
281
|
+
* 获取所有行数据(平铺)
|
|
273
282
|
* @returns 获取转化平铺数据
|
|
274
283
|
*/
|
|
275
284
|
getAllRowsData() {
|
|
@@ -282,7 +291,6 @@ export default class Database {
|
|
|
282
291
|
}
|
|
283
292
|
});
|
|
284
293
|
};
|
|
285
|
-
recursiveData(this.data);
|
|
286
294
|
return list;
|
|
287
295
|
}
|
|
288
296
|
filterColumns(columns) {
|
|
@@ -310,9 +318,8 @@ export default class Database {
|
|
|
310
318
|
}
|
|
311
319
|
setData(data) {
|
|
312
320
|
this.data = data;
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
}
|
|
321
|
+
this.setLoading(true);
|
|
322
|
+
this.init();
|
|
316
323
|
}
|
|
317
324
|
/**
|
|
318
325
|
* 统一转化数据,给画body使用,包括过滤树状等,统一入口
|
|
@@ -356,6 +363,13 @@ export default class Database {
|
|
|
356
363
|
if (typeof this.filterMethod === 'function') {
|
|
357
364
|
_data = this.filterMethod(_data);
|
|
358
365
|
}
|
|
366
|
+
// 说明需要排序
|
|
367
|
+
if (this.sortState.size) {
|
|
368
|
+
// 按时间戳排序,最早的先排序
|
|
369
|
+
const sortedEntries = Array.from(this.sortState.entries()).sort((a, b) => a[1].timestamp - b[1].timestamp);
|
|
370
|
+
// 对 sortedData 进行排序
|
|
371
|
+
_data = this.sortDataRecursive(_data, sortedEntries);
|
|
372
|
+
}
|
|
359
373
|
recursiveData(_data);
|
|
360
374
|
this.bufferData = list;
|
|
361
375
|
return {
|
|
@@ -382,6 +396,100 @@ export default class Database {
|
|
|
382
396
|
clearFilterMethod() {
|
|
383
397
|
this.filterMethod = undefined;
|
|
384
398
|
}
|
|
399
|
+
/**
|
|
400
|
+
* 获取排序状态
|
|
401
|
+
*/
|
|
402
|
+
getSortState(key) {
|
|
403
|
+
return this.sortState.get(key) || { direction: 'none', timestamp: 0 };
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* 设置排序状态
|
|
407
|
+
*/
|
|
408
|
+
setSortState(key, direction) {
|
|
409
|
+
const timestamp = Date.now();
|
|
410
|
+
if (this.ctx.config.SORT_STRICTLY) {
|
|
411
|
+
// 严格排序,清除所有排序状态
|
|
412
|
+
this.sortState.clear();
|
|
413
|
+
}
|
|
414
|
+
if (direction === 'none') {
|
|
415
|
+
// 清除排序状态
|
|
416
|
+
this.sortState.delete(key);
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
this.sortState.set(key, { direction, timestamp });
|
|
420
|
+
}
|
|
421
|
+
this.ctx.emit('sortChange', this.sortState);
|
|
422
|
+
this.clearBufferData();
|
|
423
|
+
this.ctx.emit('draw');
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* 清除所有排序状态
|
|
427
|
+
*/
|
|
428
|
+
clearSort() {
|
|
429
|
+
this.sortState.clear();
|
|
430
|
+
this.ctx.emit('sortChange', this.sortState);
|
|
431
|
+
this.clearBufferData();
|
|
432
|
+
this.ctx.emit('draw');
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* 递归排序方法,支持树形数据
|
|
436
|
+
* @param data 要排序的数据
|
|
437
|
+
* @param sortedEntries 排序条目,按时间戳排序
|
|
438
|
+
* @returns 排序后的数据
|
|
439
|
+
*/
|
|
440
|
+
sortDataRecursive(data, sortedEntries) {
|
|
441
|
+
// 对当前层级进行排序
|
|
442
|
+
let sortedData = [...data];
|
|
443
|
+
// 逐层应用排序条件
|
|
444
|
+
for (const [key, { direction }] of sortedEntries) {
|
|
445
|
+
if (direction === 'none')
|
|
446
|
+
continue;
|
|
447
|
+
const cellHeader = this.getColumnByKey(key);
|
|
448
|
+
if (!cellHeader || !cellHeader.column.sortBy)
|
|
449
|
+
continue;
|
|
450
|
+
// 对当前层级进行单列排序
|
|
451
|
+
sortedData = this.applySingleColumnSort(sortedData, key, direction, cellHeader.column.sortBy);
|
|
452
|
+
}
|
|
453
|
+
// 递归处理子节点
|
|
454
|
+
return sortedData.map((item) => {
|
|
455
|
+
if (item.children && Array.isArray(item.children)) {
|
|
456
|
+
item.children = this.sortDataRecursive(item.children, sortedEntries);
|
|
457
|
+
}
|
|
458
|
+
return item;
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* 对数组进行单列排序
|
|
463
|
+
* @param data 要排序的数据
|
|
464
|
+
* @param key 排序的列键
|
|
465
|
+
* @param direction 排序方向
|
|
466
|
+
* @param sortBy 排序类型
|
|
467
|
+
* @returns 排序后的数据
|
|
468
|
+
*/
|
|
469
|
+
applySingleColumnSort(data, key, direction, sortBy) {
|
|
470
|
+
return data.sort((a, b) => {
|
|
471
|
+
const aValue = a[key];
|
|
472
|
+
const bValue = b[key];
|
|
473
|
+
let comparison = 0;
|
|
474
|
+
if (typeof sortBy === 'function') {
|
|
475
|
+
comparison = sortBy(a, b);
|
|
476
|
+
}
|
|
477
|
+
else if (sortBy === 'number') {
|
|
478
|
+
const aNum = Number(aValue) || 0;
|
|
479
|
+
const bNum = Number(bValue) || 0;
|
|
480
|
+
comparison = aNum - bNum;
|
|
481
|
+
}
|
|
482
|
+
else if (sortBy === 'string') {
|
|
483
|
+
const aStr = String(aValue || '');
|
|
484
|
+
const bStr = String(bValue || '');
|
|
485
|
+
comparison = aStr.localeCompare(bStr);
|
|
486
|
+
}
|
|
487
|
+
else if (sortBy === 'date') {
|
|
488
|
+
comparison = compareDates(aValue, bValue);
|
|
489
|
+
}
|
|
490
|
+
return direction === 'asc' ? comparison : -comparison;
|
|
491
|
+
});
|
|
492
|
+
}
|
|
385
493
|
/**
|
|
386
494
|
* 根据rowKey,控制指定展开行
|
|
387
495
|
* @param rowKey
|
|
@@ -846,7 +954,7 @@ export default class Database {
|
|
|
846
954
|
// 递归选中树形选择
|
|
847
955
|
selectTreeSelectionRecursive(rowKey) {
|
|
848
956
|
const children = this.getTreeChildren(rowKey);
|
|
849
|
-
children.forEach(childKey => {
|
|
957
|
+
children.forEach((childKey) => {
|
|
850
958
|
this.setRowSelection(childKey, true, false);
|
|
851
959
|
this.selectTreeSelectionRecursive(childKey);
|
|
852
960
|
});
|
|
@@ -854,7 +962,7 @@ export default class Database {
|
|
|
854
962
|
// 递归取消树形选择
|
|
855
963
|
clearTreeSelectionRecursive(rowKey) {
|
|
856
964
|
const children = this.getTreeChildren(rowKey);
|
|
857
|
-
children.forEach(childKey => {
|
|
965
|
+
children.forEach((childKey) => {
|
|
858
966
|
this.setRowSelection(childKey, false, false);
|
|
859
967
|
this.clearTreeSelectionRecursive(childKey);
|
|
860
968
|
});
|
|
@@ -867,8 +975,8 @@ export default class Database {
|
|
|
867
975
|
}
|
|
868
976
|
// 获取父项的所有直接子项
|
|
869
977
|
const children = this.getTreeChildren(parentKey);
|
|
870
|
-
const childSelections = children.map(childKey => this.selectionMap.get(childKey));
|
|
871
|
-
const checkedChildren = childSelections.filter(s => s?.check).length;
|
|
978
|
+
const childSelections = children.map((childKey) => this.selectionMap.get(childKey));
|
|
979
|
+
const checkedChildren = childSelections.filter((s) => s?.check).length;
|
|
872
980
|
const totalChildren = childSelections.length;
|
|
873
981
|
// 计算父项应该的状态
|
|
874
982
|
let parentShouldBeChecked = false;
|
|
@@ -973,8 +1081,8 @@ export default class Database {
|
|
|
973
1081
|
return allDescendants;
|
|
974
1082
|
};
|
|
975
1083
|
const allDescendants = getAllDescendantsRecursive(rowKey);
|
|
976
|
-
const descendantSelections = allDescendants.map(descKey => this.selectionMap.get(descKey));
|
|
977
|
-
const checkedDescendants = descendantSelections.filter(s => s?.check).length;
|
|
1084
|
+
const descendantSelections = allDescendants.map((descKey) => this.selectionMap.get(descKey));
|
|
1085
|
+
const checkedDescendants = descendantSelections.filter((s) => s?.check).length;
|
|
978
1086
|
const totalDescendants = descendantSelections.length;
|
|
979
1087
|
const someChecked = checkedDescendants > 0;
|
|
980
1088
|
const allChecked = checkedDescendants === totalDescendants;
|
|
@@ -999,8 +1107,8 @@ export default class Database {
|
|
|
999
1107
|
return allDescendants;
|
|
1000
1108
|
};
|
|
1001
1109
|
const allDescendants = getAllDescendantsRecursive(rowKey);
|
|
1002
|
-
const descendantSelections = allDescendants.map(descKey => this.selectionMap.get(descKey));
|
|
1003
|
-
const checkedDescendants = descendantSelections.filter(s => s?.check).length;
|
|
1110
|
+
const descendantSelections = allDescendants.map((descKey) => this.selectionMap.get(descKey));
|
|
1111
|
+
const checkedDescendants = descendantSelections.filter((s) => s?.check).length;
|
|
1004
1112
|
const totalDescendants = descendantSelections.length;
|
|
1005
1113
|
const someChecked = checkedDescendants > 0;
|
|
1006
1114
|
const allChecked = checkedDescendants === totalDescendants;
|
|
@@ -1653,7 +1761,7 @@ export default class Database {
|
|
|
1653
1761
|
*/
|
|
1654
1762
|
calculateMaxTreeDepth(data, currentDepth = 0) {
|
|
1655
1763
|
let maxDepth = currentDepth;
|
|
1656
|
-
data.forEach(item => {
|
|
1764
|
+
data.forEach((item) => {
|
|
1657
1765
|
if (Array.isArray(item.children) && item.children.length > 0) {
|
|
1658
1766
|
const childMaxDepth = this.calculateMaxTreeDepth(item.children, currentDepth + 1);
|
|
1659
1767
|
maxDepth = Math.max(maxDepth, childMaxDepth);
|