@visactor/vtable 0.22.0-alpha.0 → 0.22.1
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/cjs/ListTable.js.map +1 -1
- package/cjs/core/BaseTable.js +21 -7
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/data/DataSource.js +5 -1
- package/cjs/data/DataSource.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/layout/pivot-header-layout.js +1 -1
- package/cjs/layout/pivot-header-layout.js.map +1 -1
- package/cjs/layout/tree-helper.js +0 -1
- package/cjs/plugins/themes.js +2 -1
- package/cjs/scenegraph/component/custom.js +1 -1
- package/cjs/scenegraph/component/custom.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-helper.d.ts +1 -0
- package/cjs/scenegraph/group-creater/cell-helper.js +16 -26
- package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/cjs/scenegraph/group-creater/column-helper.js +3 -2
- package/cjs/scenegraph/group-creater/column-helper.js.map +1 -1
- package/cjs/scenegraph/group-creater/progress/proxy.js +1 -1
- package/cjs/scenegraph/group-creater/progress/proxy.js.map +1 -1
- package/cjs/scenegraph/select/update-select-border.d.ts +2 -0
- package/cjs/scenegraph/select/update-select-border.js +19 -2
- package/cjs/scenegraph/select/update-select-border.js.map +1 -1
- package/cjs/ts-types/new-data-set.d.ts +2 -1
- package/cjs/ts-types/new-data-set.js.map +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +64 -51
- package/dist/vtable.min.js +2 -2
- package/es/ListTable.js.map +1 -1
- package/es/core/BaseTable.js +20 -7
- package/es/core/BaseTable.js.map +1 -1
- package/es/data/DataSource.js +5 -1
- package/es/data/DataSource.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/layout/pivot-header-layout.js +1 -1
- package/es/layout/pivot-header-layout.js.map +1 -1
- package/es/layout/tree-helper.js +1 -2
- package/es/plugins/themes.js +2 -1
- package/es/scenegraph/component/custom.js +1 -1
- package/es/scenegraph/component/custom.js.map +1 -1
- package/es/scenegraph/group-creater/cell-helper.d.ts +1 -0
- package/es/scenegraph/group-creater/cell-helper.js +12 -24
- package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/es/scenegraph/group-creater/column-helper.js +5 -4
- package/es/scenegraph/group-creater/column-helper.js.map +1 -1
- package/es/scenegraph/group-creater/progress/proxy.js +1 -1
- package/es/scenegraph/group-creater/progress/proxy.js.map +1 -1
- package/es/scenegraph/select/update-select-border.d.ts +2 -0
- package/es/scenegraph/select/update-select-border.js +16 -0
- package/es/scenegraph/select/update-select-border.js.map +1 -1
- package/es/ts-types/new-data-set.d.ts +2 -1
- package/es/ts-types/new-data-set.js.map +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +3 -3
package/cjs/data/DataSource.js
CHANGED
|
@@ -274,7 +274,11 @@ class DataSource extends EventTarget_1.EventTarget {
|
|
|
274
274
|
}
|
|
275
275
|
if ("string" == typeof field || "number" == typeof field) {
|
|
276
276
|
const beforeChangedValue = this.beforeChangedRecordsMap[dataIndex][field], record = this.getOriginalRecord(dataIndex);
|
|
277
|
-
|
|
277
|
+
let formatValue = value;
|
|
278
|
+
"number" == typeof beforeChangedValue && (0, util_1.isAllDigits)(value) && (formatValue = parseFloat(value)),
|
|
279
|
+
(0, helper_1.isPromise)(record) ? record.then((record => {
|
|
280
|
+
record[field] = formatValue;
|
|
281
|
+
})).catch((err => {})) : record[field] = formatValue;
|
|
278
282
|
}
|
|
279
283
|
}
|
|
280
284
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/DataSource.ts"],"names":[],"mappings":"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","file":"DataSource.js","sourcesContent":["import * as sort from '../tools/sort';\nimport type {\n CustomAggregation,\n DataSourceAPI,\n FieldAssessor,\n FieldData,\n FieldDef,\n FieldFormat,\n FilterRules,\n IListTableDataConfig,\n IPagination,\n MaybePromiseOrCallOrUndefined,\n MaybePromiseOrUndefined,\n SortOrder\n} from '../ts-types';\nimport { AggregationType, HierarchyState } from '../ts-types';\nimport { applyChainSafe, getOrApply, obj, isPromise, emptyFn } from '../tools/helper';\nimport { EventTarget } from '../event/EventTarget';\nimport { getValueByPath, isAllDigits } from '../tools/util';\nimport { calculateArrayDiff } from '../tools/diff-cell';\nimport { arrayEqual, cloneDeep, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport {\n RecordAggregator,\n type Aggregator,\n SumAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n AvgAggregator,\n NoneAggregator,\n CustomAggregator\n} from '../dataset/statistics-helper';\nimport type { ColumnData } from '../ts-types/list-table/layout-map/api';\n\n/**\n * 判断字段数据是否为访问器的格式\n * @param field\n * @returns boolean\n */\nfunction isFieldAssessor(field: FieldDef | FieldFormat | number): field is FieldAssessor {\n if (obj.isObject(field)) {\n const a = field as FieldAssessor;\n if (isValid(a.get) && isValid(a.set)) {\n return true;\n }\n }\n return false;\n}\nconst EVENT_TYPE = {\n SOURCE_LENGTH_UPDATE: 'source_length_update',\n CHANGE_ORDER: 'change_order'\n} as const;\ntype PromiseBack = (value: MaybePromiseOrUndefined) => void;\n\n/**\n * 获取到的某个filed的值 处理可能为promise的情况\n * @param value\n * @param promiseCallBack\n * @returns\n */\nfunction getValue(value: MaybePromiseOrCallOrUndefined, promiseCallBack: PromiseBack): MaybePromiseOrUndefined {\n const maybePromiseOrValue = getOrApply(value);\n if (isPromise(maybePromiseOrValue)) {\n const promiseValue = maybePromiseOrValue.then((r: any) => {\n promiseCallBack(r);\n return r;\n });\n\n promiseCallBack(promiseValue);\n return promiseValue;\n }\n return maybePromiseOrValue;\n}\n/**\n * 根据field获取数据源record对应的值 获取到的可能是个异步Promise 需要设置回调处理逻辑\n * @param record\n * @param field\n * @param promiseCallBack\n * @returns\n */\nexport function getField(\n record: MaybePromiseOrUndefined,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI,\n promiseCallBack: PromiseBack\n): FieldData {\n if (record === null || record === undefined) {\n return undefined;\n }\n if (isPromise(record)) {\n return record.then((r: any) => getField(r, field, col, row, table, promiseCallBack));\n }\n const fieldGet: any = isFieldAssessor(field) ? field.get : field;\n if (fieldGet in (record as any)) {\n const fieldResult = (record as any)[fieldGet];\n\n return getValue(fieldResult, promiseCallBack);\n }\n if (typeof fieldGet === 'function') {\n const fieldResult = fieldGet(record, col, row, table);\n return getValue(fieldResult, promiseCallBack);\n }\n if (Array.isArray(fieldGet)) {\n const fieldResult = getValueByPath(record, [...fieldGet]);\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldArray = `${fieldGet}`.split('.');\n if (fieldArray.length <= 1) {\n const fieldResult = (record as any)[fieldGet];\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldResult = applyChainSafe(\n record,\n (val, name) => getField(val, name, col, row, table, emptyFn as any),\n ...fieldArray\n );\n return getValue(fieldResult, promiseCallBack);\n}\n\nfunction _getIndex(sortedIndexMap: null | (number | number[])[], index: number): number | number[] {\n if (!sortedIndexMap) {\n return index;\n }\n const mapIndex = sortedIndexMap[index];\n return isValid(mapIndex) ? mapIndex : index;\n}\n\nexport interface DataSourceParam {\n get: (index: number) => any;\n length: number;\n source?: any;\n}\nexport interface ISortedMapItem {\n asc?: (number | number[])[];\n desc?: (number | number[])[];\n normal?: (number | number[])[];\n}\n\nexport class DataSource extends EventTarget implements DataSourceAPI {\n dataConfig: IListTableDataConfig;\n dataSourceObj: DataSourceParam | DataSource;\n private _get: (index: number | number[]) => any;\n /** 数据条目数 如果是树形结构的数据 则是第一层父节点的数量 */\n private _sourceLength: number;\n\n private _source: any;\n /**\n * 缓存按字段进行排序的结果\n */\n protected sortedIndexMap: Map<FieldDef, ISortedMapItem>;\n /**\n * 记录最近一次排序规则 当展开树形结构的节点时需要用到\n */\n private lastOrder: SortOrder;\n private lastOrderFn: (a: any, b: any, order: string) => number;\n private lastOrderField: FieldDef;\n /** 每一行对应源数据的索引 */\n currentIndexedData: (number | number[])[] | null = [];\n protected userPagination: IPagination;\n protected pagination: IPagination;\n /** 当前页每一行对应源数据的索引 */\n _currentPagerIndexedData: (number | number[])[];\n // 当前是否为层级的树形结构 排序时判断该值确实是否继续进行子节点排序\n hierarchyExpandLevel: number = 0;\n static get EVENT_TYPE(): typeof EVENT_TYPE {\n return EVENT_TYPE;\n }\n hasHierarchyStateExpand: boolean = false;\n // treeDataHierarchyState: Map<number | string, HierarchyState> = new Map();\n beforeChangedRecordsMap: Record<number, any>[] = [];\n\n // 注册聚合类型\n registedAggregators: {\n [key: string]: {\n new (dimension: string | string[], formatFun?: any, isRecord?: boolean, aggregationFun?: Function): Aggregator;\n };\n } = {};\n // columns对应各个字段的聚合类对象\n fieldAggregators: Aggregator[] = [];\n layoutColumnObjects: ColumnData[] = [];\n constructor(\n dataSourceObj?: DataSourceParam | DataSource,\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columnObjs?: ColumnData[],\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ) {\n super();\n this.registerAggregators();\n this.dataSourceObj = dataSourceObj;\n this.dataConfig = dataConfig;\n this._get = dataSourceObj?.get.bind(dataSourceObj) || (undefined as any);\n this.layoutColumnObjects = columnObjs;\n this._source = this.processRecords(dataSourceObj?.source ?? dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap = new Map<string, ISortedMapItem>();\n\n this._currentPagerIndexedData = [];\n this.userPagination = pagination;\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n if (hierarchyExpandLevel >= 1) {\n this.hierarchyExpandLevel = hierarchyExpandLevel;\n }\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // 初始化currentIndexedData 正常未排序。设置其状态\n if (rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.updatePagerData();\n }\n initTreeHierarchyState() {\n // if (this.hierarchyExpandLevel) {\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // if (this.hierarchyExpandLevel > 1) {\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n if ((nodeData as any).children?.length > 0) {\n if (this.hierarchyExpandLevel > 1) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.expand);\n } else {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n this.hasHierarchyStateExpand = true;\n if (nodeData.hierarchyState === HierarchyState.collapse) {\n continue;\n }\n const childrenLength = this.initChildrenNodeHierarchy(indexKey, this.hierarchyExpandLevel, 2, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n // }\n // }\n }\n\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.registedAggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n this.registerAggregator(AggregationType.NONE, NoneAggregator);\n this.registerAggregator(AggregationType.CUSTOM, CustomAggregator);\n }\n _generateFieldAggragations() {\n const columnObjs = this.layoutColumnObjects;\n for (let i = 0; i < columnObjs?.length; i++) {\n columnObjs[i].aggregator = null; //重置聚合器 如更新了过滤条件都需要重新计算\n const field = columnObjs[i].field;\n const aggragation = columnObjs[i].aggregation;\n if (!aggragation) {\n continue;\n }\n if (Array.isArray(aggragation)) {\n for (let j = 0; j < aggragation.length; j++) {\n const item = aggragation[j];\n const aggregator = new this.registedAggregators[item.aggregationType](\n field as string,\n item.formatFun,\n true,\n (item as CustomAggregation).aggregationFun\n );\n this.fieldAggregators.push(aggregator);\n if (!columnObjs[i].aggregator) {\n columnObjs[i].aggregator = [];\n }\n columnObjs[i].aggregator.push(aggregator);\n }\n } else {\n const aggregator = new this.registedAggregators[aggragation.aggregationType](\n field as string,\n aggragation.formatFun,\n true,\n (aggragation as CustomAggregation).aggregationFun\n );\n this.fieldAggregators.push(aggregator);\n columnObjs[i].aggregator = aggregator;\n }\n }\n }\n processRecords(records: any[]) {\n this._generateFieldAggragations();\n const filteredRecords = [];\n const isHasAggregation = this.fieldAggregators.length >= 1;\n const isHasFilterRule = this.dataConfig?.filterRules?.length >= 1;\n if (isHasFilterRule || isHasAggregation) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n if (isHasFilterRule) {\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n isHasAggregation && this.processRecord(record);\n }\n } else if (isHasAggregation) {\n this.processRecord(record);\n }\n }\n if (isHasFilterRule) {\n return filteredRecords;\n }\n }\n return records;\n }\n\n processRecord(record: any) {\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n const aggregator = this.fieldAggregators[i];\n aggregator.push(record);\n }\n }\n /**\n * 初始化子节点的层次信息\n * @param indexKey 父节点的indexKey 即currentLevel-1的节点\n * @param hierarchyExpandLevel 需要展开层级数\n * @param currentLevel 当前要展开的是第几层\n * @param nodeData 父节点数据 即currentLevel-1的节点\n * @returns\n */\n initChildrenNodeHierarchy(\n indexKey: number | number[],\n // subNodeIndex:number,\n hierarchyExpandLevel: number,\n currentLevel: number,\n nodeData: any\n ): number {\n // if (currentLevel > hierarchyExpandLevel) {\n // return 0;\n // }\n let childTotalLength = 0;\n const nodeLength = nodeData.children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = nodeData.children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n if (childNodeData.children?.length > 0) {\n if (currentLevel < hierarchyExpandLevel || childNodeData.hierarchyState === HierarchyState.expand) {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.expand\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.expand);\n this.hasHierarchyStateExpand = true;\n } else {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.collapse\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n if (childNodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += this.initChildrenNodeHierarchy(\n childIndexKey,\n hierarchyExpandLevel,\n currentLevel + 1,\n childNodeData\n );\n }\n }\n return childTotalLength;\n }\n updatePagination(pagination?: IPagination): void {\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n this.updatePagerData();\n }\n protected updatePagerData(): void {\n const { currentIndexedData } = this;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n this._currentPagerIndexedData.length = 0;\n if (currentIndexedData && currentIndexedData.length > 0) {\n // this._currentPagerIndexedData = currentIndexedData.slice(startIndex, endIndex);\n let firstLevelIndex = -1;\n for (let i = 0; i < currentIndexedData.length; i++) {\n //计算第一层父级节点数量\n if (\n (Array.isArray(currentIndexedData[i]) && (currentIndexedData[i] as Array<number>).length === 1) ||\n !Array.isArray(currentIndexedData[i])\n ) {\n firstLevelIndex++;\n }\n if (firstLevelIndex >= startIndex && firstLevelIndex < endIndex) {\n this._currentPagerIndexedData.push(currentIndexedData[i]);\n } else if (firstLevelIndex >= endIndex) {\n break;\n }\n }\n } else if (this._sourceLength > 0) {\n throw new Error(`currentIndexedData should has values!`);\n }\n }\n\n get source(): any {\n return this._source;\n }\n get(index: number): MaybePromiseOrUndefined {\n return this.getOriginalRecord(_getIndex(this.currentPagerIndexedData, index));\n }\n getRaw(index: number): MaybePromiseOrUndefined {\n return this.getRawRecord(_getIndex(this.currentPagerIndexedData, index) as number);\n }\n getIndexKey(index: number): number | number[] {\n return _getIndex(this.currentPagerIndexedData, index);\n }\n getTableIndex(colOrRow: number | number[]): number {\n if (Array.isArray(colOrRow)) {\n return this.currentPagerIndexedData.findIndex(value => arrayEqual(value, colOrRow));\n }\n return this.currentPagerIndexedData.findIndex(value => value === colOrRow);\n }\n /** 获取数据源中第index位置的field字段数据。传入col row是因为后面的format函数参数使用*/\n getField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getOriginalField(_getIndex(this.currentPagerIndexedData, index), field, col, row, table);\n }\n\n getRawField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getRawFieldData(_getIndex(this.currentPagerIndexedData, index) as number, field, col, row, table);\n }\n\n hasField(index: number, field: FieldDef): boolean {\n return this.hasOriginalField(_getIndex(this.currentPagerIndexedData, index), field);\n }\n /**\n * 获取第index条数据的展示收起状态\n * @param index\n * @returns\n */\n getHierarchyState(index: number): HierarchyState {\n // const indexed = this.getIndexKey(index);\n const record = this.getOriginalRecord(this.currentIndexedData[index]);\n return record?.hierarchyState ?? null;\n // return this.treeDataHierarchyState.get(Array.isArray(indexed) ? indexed.join(',') : indexed) ?? null;\n }\n /**\n * 展开或者收起数据index\n * @param index\n */\n toggleHierarchyState(index: number) {\n const oldIndexedData = this.currentIndexedData.slice(0);\n const indexed = this.getIndexKey(index);\n const state = this.getHierarchyState(index);\n const data = this.getOriginalRecord(indexed);\n\n this.clearSortedIndexMap();\n if (state === HierarchyState.collapse) {\n // 将节点状态置为expand\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.expand);\n data.hierarchyState = HierarchyState.expand;\n this.pushChildrenNode(indexed, HierarchyState.expand, data);\n this.hasHierarchyStateExpand = true;\n } else if (state === HierarchyState.expand) {\n // 记录状态变化影响的子节点行数\n let childrenLength = 0;\n /**\n * 当某个节点由展开变为折叠,需要计算出影响的节点数量 使用childrenLength来标记。同样需递归\n * @param indexKey\n * @param hierarchyState\n * @param nodeData\n * @returns\n */\n const computeChildrenNodeLength = (\n indexKey: number | number[],\n hierarchyState: HierarchyState,\n nodeData: any\n ) => {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return;\n }\n if (nodeData.children) {\n for (let i = 0; i < nodeData.children.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey) ? indexKey.concat([i]) : [indexKey, i];\n\n computeChildrenNodeLength(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n nodeData.children[i].hierarchyState,\n nodeData.children[i]\n );\n }\n }\n };\n computeChildrenNodeLength(indexed, state, data);\n\n this.currentIndexedData.splice(this.currentIndexedData.indexOf(indexed) + 1, childrenLength);\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.collapse);\n data.hierarchyState = HierarchyState.collapse;\n }\n // 变更了pagerConfig所以需要更新分页数据 TODO待定 因为只关注根节点的数量的话 可能不会影响到\n this.updatePagerData();\n\n const newDiff = calculateArrayDiff(oldIndexedData, this.currentIndexedData);\n // const oldDiff = diffCellIndices(oldIndexedData, this.currentIndexedData);\n\n // return oldDiff;\n return newDiff;\n }\n /**\n * 某个节点状态由折叠变为展开,往this.currentIndexedData中插入展开后的新增节点,注意需要递归,因为展开节点下面的子节点也能是展开状态\n * @param recordRowIndex 要计算节点的行号(从body部分开始计算)\n * @param indexKey 需要判断节点的index\n * @param hierarchyState 当前节点状态\n * @param nodeData 当前节点数据 取children时用\n * @returns\n */\n pushChildrenNode(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any): number {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return 0;\n }\n let childrenLength = 0;\n if (nodeData.children) {\n const subNodeSortedIndexArray: Array<number> = Array.from({ length: nodeData.children.length }, (_, i) => i);\n this.lastOrder &&\n this.lastOrder !== 'normal' &&\n this.lastOrderField &&\n sort.sort(\n index =>\n isValid(subNodeSortedIndexArray[index])\n ? subNodeSortedIndexArray[index]\n : (subNodeSortedIndexArray[index] = index),\n (index, rel) => {\n subNodeSortedIndexArray[index] = rel;\n },\n nodeData.children.length,\n this.lastOrderFn,\n this.lastOrder,\n index =>\n this.getOriginalField(\n Array.isArray(indexKey) ? indexKey.concat([index]) : [indexKey, index],\n this.lastOrderField\n )\n );\n for (let i = 0; i < subNodeSortedIndexArray.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey)\n ? indexKey.concat([subNodeSortedIndexArray[i]])\n : [indexKey, subNodeSortedIndexArray[i]];\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childrenLength,\n // this.pagination.currentPage * this.pagination.perPageCount +\n // recordRowIndex +\n // childrenLength,\n 0,\n childIndex\n );\n\n // const preChildState = this.treeDataHierarchyState.get(childIndex.join(','));\n const childData = this.getOriginalRecord(childIndex);\n if (!nodeData.children[i].hierarchyState && (childData as any).children) {\n // this.treeDataHierarchyState.set(childIndex.join(','), HierarchyState.collapse);\n nodeData.children[i].hierarchyState = HierarchyState.collapse;\n }\n childrenLength += this.pushChildrenNode(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n nodeData.children[i].hierarchyState,\n nodeData.children[subNodeSortedIndexArray[i]]\n );\n }\n }\n return childrenLength;\n }\n changeFieldValue(\n value: FieldData,\n index: number,\n field: FieldDef,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n if (index >= 0) {\n const dataIndex = this.getIndexKey(index) as number;\n\n if (!this.beforeChangedRecordsMap[dataIndex]) {\n const originRecord = this.getOriginalRecord(dataIndex);\n this.beforeChangedRecordsMap[dataIndex] = cloneDeep(originRecord);\n }\n if (typeof field === 'string' || typeof field === 'number') {\n const beforeChangedValue = this.beforeChangedRecordsMap[dataIndex][field]; // this.getOriginalField(index, field, col, row, table);\n const record = this.getOriginalRecord(dataIndex);\n if (typeof beforeChangedValue === 'number' && isAllDigits(value)) {\n record[field] = parseFloat(value);\n } else {\n record[field] = value;\n }\n }\n }\n // return getField(record, field);\n }\n /**\n * 将数据record 替换到index位置处\n * @param record\n * @param index\n */\n setRecord(record: any, index: number) {\n const indexed = this.getIndexKey(index);\n if (!Array.isArray(indexed)) {\n this.source.splice(indexed, 1, record);\n } else {\n const c_node_index = (indexed as Array<any>)[indexed.length - 1];\n const p_node = this.getOriginalRecord(indexed.slice(0, indexed.length - 1));\n (p_node as any).children.splice(c_node_index, 1, record);\n }\n }\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecord(record: any, index: number) {\n this.source.splice(index, 0, record);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n this.initTreeHierarchyState();\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecords(recordArr: any, index: number) {\n if (Array.isArray(recordArr)) {\n this.source.splice(index, 0, ...recordArr);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n }\n\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n }\n\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecordForSorted(record: any) {\n this.source.push(record);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecordsForSorted(recordArr: any) {\n if (Array.isArray(recordArr)) {\n this.source.push(...recordArr);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n this.sortedIndexMap.clear();\n }\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecords(recordIndexs: number[]) {\n const realDeletedRecordIndexs = [];\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n realDeletedRecordIndexs.push(recordIndex);\n this.source.splice(recordIndex, 1);\n this.currentIndexedData.pop();\n this._sourceLength -= 1;\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n return realDeletedRecordIndexs;\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecordsForSorted(recordIndexs: number[]) {\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex];\n this.source.splice(rawIndex, 1);\n this._sourceLength -= 1;\n }\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n /**\n * 修改多条数据recordIndexs\n */\n updateRecords(records: any[], recordIndexs: number[]) {\n const realDeletedRecordIndexs = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n realDeletedRecordIndexs.push(recordIndex);\n this.source[recordIndex] = records[index];\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n }\n return realDeletedRecordIndexs;\n }\n\n /**\n * 删除多条数据recordIndexs\n */\n updateRecordsForSorted(records: any[], recordIndexs: number[]) {\n const realDeletedRecordIndexs: number[] = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex];\n if (typeof rawIndex !== 'number') {\n return;\n }\n realDeletedRecordIndexs.push(recordIndex);\n this.source[rawIndex] = records[index];\n }\n this.sortedIndexMap.clear();\n }\n\n sort(\n field: FieldDef,\n order: SortOrder,\n orderFn: (v1: any, v2: any, order: SortOrder) => -1 | 0 | 1 = order !== 'desc'\n ? (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 > v2 ? 1 : -1)\n : (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 < v2 ? 1 : -1)\n ): void {\n this.lastOrderField = field;\n this.lastOrder = order;\n this.lastOrderFn = orderFn;\n let filedMap = this.sortedIndexMap.get(field);\n let orderedData;\n\n if (filedMap) {\n orderedData = filedMap[order];\n if (orderedData && orderedData.length > 0) {\n this.currentIndexedData = orderedData;\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n return;\n }\n }\n const sortedIndexArray = [] as number[];\n if (order === 'normal') {\n for (let i = 0; i < this._sourceLength; i++) {\n sortedIndexArray[i] = i;\n }\n } else {\n sort.sort(\n index => (isValid(sortedIndexArray[index]) ? sortedIndexArray[index] : (sortedIndexArray[index] = index)),\n (index, rel) => {\n sortedIndexArray[index] = rel;\n },\n this._sourceLength,\n orderFn,\n order,\n index => this.getOriginalField(index, field)\n );\n }\n this.currentIndexedData = sortedIndexArray;\n\n if (this.hierarchyExpandLevel) {\n let nodeLength = sortedIndexArray.length;\n const t0 = window.performance.now();\n for (let i = 0; i < nodeLength; i++) {\n const record = this.getOriginalRecord(sortedIndexArray[i]);\n const subNodeLength = this.pushChildrenNode(\n sortedIndexArray[i],\n // this.treeDataHierarchyState.get(sortedIndexArray[i]),\n record.hierarchyState,\n this.getOriginalRecord(sortedIndexArray[i]) // ?sortedIndexArray 在这个过程中不是变化了吗 通过i取id还是对的吗? 对哦!因为i和nodeLength都+subNodeLength 来动态调整过了!\n );\n nodeLength += subNodeLength;\n i += subNodeLength;\n }\n }\n if (!filedMap) {\n filedMap = { asc: [], desc: [], normal: [] };\n this.sortedIndexMap.set(field, filedMap);\n }\n filedMap[order] = sortedIndexArray;\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n }\n\n private filterRecord(record: any) {\n let isReserved = true;\n for (let i = 0; i < this.dataConfig.filterRules.length; i++) {\n const filterRule = this.dataConfig?.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n return isReserved;\n }\n\n updateFilterRulesForSorted(filterRules?: FilterRules): void {\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.source ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap.clear();\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n updateFilterRules(filterRules?: FilterRules): void {\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.source ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n // 初始化currentIndexedData 正常未排序。设置其状态\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n }\n /**\n * 当节点折叠或者展开时 将排序缓存清空(非当前排序规则的缓存)\n */\n clearSortedIndexMap() {\n if (this.lastOrderField && this.lastOrder) {\n this.sortedIndexMap.forEach((sortMap, key) => {\n if (key !== this.lastOrderField) {\n this.sortedIndexMap.delete(key);\n } else if (this.lastOrder === 'asc') {\n sortMap.desc = [];\n sortMap.normal = [];\n } else if (this.lastOrder === 'desc') {\n sortMap.asc = [];\n sortMap.normal = [];\n } else {\n sortMap.desc = [];\n sortMap.asc = [];\n }\n });\n }\n }\n get sourceLength(): number {\n return this._sourceLength;\n }\n set sourceLength(sourceLen: number) {\n if (this._sourceLength === sourceLen) {\n return;\n }\n this._sourceLength = sourceLen;\n this.fireListeners(EVENT_TYPE.SOURCE_LENGTH_UPDATE, this._sourceLength);\n }\n get length(): number {\n return this.currentPagerIndexedData.length;\n }\n get dataSource(): DataSource {\n return this;\n }\n get currentPagerIndexedData(): (number | number[])[] {\n if (this._currentPagerIndexedData.length > 0) {\n return this._currentPagerIndexedData;\n }\n return []; //this.currentIndexedData || [];\n }\n release(): void {\n super.release?.();\n }\n clearSortedMap() {\n this.currentIndexedData && (this.currentIndexedData.length = 0);\n this.currentIndexedData = null;\n this.sortedIndexMap.forEach(item => {\n item.asc && (item.asc.length = 0);\n item.desc && (item.desc.length = 0);\n });\n this.sortedIndexMap.clear();\n }\n clearCurrentIndexedData(): void {\n this.currentIndexedData = null;\n this.currentPagerIndexedData.length = 0;\n }\n protected getOriginalRecord(dataIndex: number | number[]): MaybePromiseOrUndefined {\n if (this.dataConfig?.filterRules) {\n return (this.source as Array<any>)[dataIndex as number];\n }\n return getValue(this._get(dataIndex), (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getRawRecord(dataIndex: number): MaybePromiseOrUndefined {\n if (this.beforeChangedRecordsMap?.[dataIndex as number]) {\n return this.beforeChangedRecordsMap[dataIndex as number];\n }\n return getValue(this._get(dataIndex), (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getOriginalField(\n index: number | number[],\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getOriginalRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected getRawFieldData(\n index: number,\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getRawRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected hasOriginalField(index: number | number[], field: FieldDef): boolean {\n if (field === null) {\n return false;\n }\n if (typeof field === 'function') {\n return true;\n }\n const record = this.getOriginalRecord(index);\n return Boolean(record && (field as any) in (record as any));\n }\n\n protected fieldPromiseCallBack(\n _index: number | number[],\n _field: FieldDef | FieldFormat | number,\n _value: MaybePromiseOrUndefined\n ): void {\n //\n }\n protected recordPromiseCallBack(_index: number | number[], _record: MaybePromiseOrUndefined): void {\n //\n }\n /** 静态变量 代表数据为空 */\n static EMPTY = new DataSource({\n get() {\n /* noop */\n },\n length: 0\n });\n isCanExchangeOrder(sourceIndex: number, targetIndex: number) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex] as number[];\n let targetIndexs = this.currentPagerIndexedData[targetIndex] as number[];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n if (sourceIndexs.length === targetIndexs.length) {\n for (let i = 0; i <= sourceIndexs.length - 2; i++) {\n if (sourceIndexs[i] !== targetIndexs[i]) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }\n return true;\n }\n reorderRecord(sourceIndex: number, targetIndex: number) {\n if (this.lastOrder === 'asc' || this.lastOrder === 'desc') {\n // const sourceIds = this._currentPagerIndexedData.splice(sourceIndex, 1);\n // sourceIds.unshift(targetIndex, 0);\n // Array.prototype.splice.apply(this._currentPagerIndexedData, sourceIds);\n return;\n } else if (this.isCanExchangeOrder(sourceIndex, targetIndex)) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex];\n let targetIndexs = this.currentPagerIndexedData[targetIndex];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n let sourceI;\n let targetI;\n if (sourceIndexs.length > 1 || targetIndexs.length > 1) {\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n sourceI = (<number[]>sourceIndexs).splice(sourceIndexs.length - 1, 1)[0];\n targetI = (<number[]>targetIndexs).splice(targetIndexs.length - 1, 1)[0];\n if (sourceIndexs.length >= 1) {\n const parent = this.getOriginalRecord(sourceIndexs);\n const sourceIds = parent.children.splice(sourceI, 1);\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(parent.children, sourceIds);\n } else {\n const sourceIds = this.source.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(this.source, sourceIds);\n }\n } else {\n sourceI = this.currentPagerIndexedData[sourceIndex];\n targetI = this.currentPagerIndexedData[targetIndex];\n // 从source的二维数组中取出需要操作的records\n const records = this.source.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetI, 0);\n Array.prototype.splice.apply(this.source, records);\n }\n this.restoreTreeHierarchyState();\n this.updatePagerData();\n } else {\n // 从source的二维数组中取出需要操作的records\n const records = this.source.splice(sourceIndex, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetIndex, 0);\n Array.prototype.splice.apply(this.source, records);\n }\n }\n }\n\n restoreTreeHierarchyState() {\n if (this.hierarchyExpandLevel) {\n for (let i = 0; i < this._sourceLength; i++) {\n //expandLevel为有效值即需要按tree分析展示数据\n const nodeData = this.getOriginalRecord(i);\n (nodeData as any).children && !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n if ((nodeData as any).children?.length > 0 && nodeData.hierarchyState === HierarchyState.expand) {\n this.hasHierarchyStateExpand = true;\n const childrenLength = this.restoreChildrenNodeHierarchy(indexKey, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n }\n }\n restoreChildrenNodeHierarchy(\n indexKey: number | number[],\n\n nodeData: any\n ): number {\n let childTotalLength = 0;\n const nodeLength = nodeData.children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = nodeData.children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n childTotalLength += this.restoreChildrenNodeHierarchy(\n childIndexKey,\n\n childNodeData\n );\n }\n return childTotalLength;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data/DataSource.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAsC;AAetC,0CAA8D;AAC9D,4CAAsF;AACtF,sDAAmD;AACnD,wCAA4D;AAC5D,kDAAwD;AACxD,6CAAkE;AAElE,oEAUsC;AAQtC,SAAS,eAAe,CAAC,KAAsC;IAC7D,IAAI,YAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACvB,MAAM,CAAC,GAAG,KAAsB,CAAC;QACjC,IAAI,IAAA,gBAAO,EAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAA,gBAAO,EAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,GAAG;IACjB,oBAAoB,EAAE,sBAAsB;IAC5C,YAAY,EAAE,cAAc;CACpB,CAAC;AASX,SAAS,QAAQ,CAAC,KAAoC,EAAE,eAA4B;IAClF,MAAM,mBAAmB,GAAG,IAAA,mBAAU,EAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,IAAA,kBAAS,EAAC,mBAAmB,CAAC,EAAE;QAClC,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE;YACvD,eAAe,CAAC,CAAC,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,eAAe,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,YAAY,CAAC;KACrB;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAQD,SAAgB,QAAQ,CACtB,MAA+B,EAC/B,KAAsC,EACtC,GAAW,EACX,GAAW,EACX,KAAmB,EACnB,eAA4B;IAE5B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;QAC3C,OAAO,SAAS,CAAC;KAClB;IACD,IAAI,IAAA,kBAAS,EAAC,MAAM,CAAC,EAAE;QACrB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;KACtF;IACD,MAAM,QAAQ,GAAQ,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,IAAI,QAAQ,IAAK,MAAc,EAAE;QAC/B,MAAM,WAAW,GAAI,MAAc,CAAC,QAAQ,CAAC,CAAC;QAE9C,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;KAC/C;IACD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;QAClC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;KAC/C;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC3B,MAAM,WAAW,GAAG,IAAA,qBAAc,EAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;KAC/C;IACD,MAAM,UAAU,GAAG,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;QAC1B,MAAM,WAAW,GAAI,MAAc,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;KAC/C;IACD,MAAM,WAAW,GAAG,IAAA,uBAAc,EAChC,MAAM,EACN,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAc,CAAC,EACnE,GAAG,UAAU,CACd,CAAC;IACF,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAChD,CAAC;AAvCD,4BAuCC;AAED,SAAS,SAAS,CAAC,cAA4C,EAAE,KAAa;IAC5E,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,KAAK,CAAC;KACd;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,IAAA,gBAAO,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AAaD,MAAa,UAAW,SAAQ,yBAAW;IA0BzC,MAAM,KAAK,UAAU;QACnB,OAAO,UAAU,CAAC;IACpB,CAAC;IAcD,YACE,aAA4C,EAC5C,UAAiC,EACjC,UAAwB,EACxB,UAAyB,EACzB,gBAAkC,EAClC,oBAA6B;;QAE7B,KAAK,EAAE,CAAC;QA/BV,uBAAkB,GAAiC,EAAE,CAAC;QAMtD,yBAAoB,GAAW,CAAC,CAAC;QAIjC,4BAAuB,GAAY,KAAK,CAAC;QAEzC,4BAAuB,GAA0B,EAAE,CAAC;QAGpD,wBAAmB,GAIf,EAAE,CAAC;QAEP,qBAAgB,GAAiB,EAAE,CAAC;QACpC,wBAAmB,GAAiB,EAAE,CAAC;QAUrC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,SAAiB,CAAC;QACzE,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,mCAAI,aAAa,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;QAExD,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI;YAC9B,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,WAAW,EAAE,CAAC;SACf,CAAC;QACF,IAAI,oBAAoB,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;SAClD;QACD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAElF,IAAI,gBAAgB,KAAK,MAAM,EAAE;YAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,sBAAsB;;QAEpB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAElF,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAA,MAAC,QAAgB,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,EAAE;gBAC1C,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC,EAAE;oBACjC,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,yBAAc,CAAC,MAAM,CAAC,CAAC;iBAC/E;qBAAM;oBACL,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC,CAAC;iBACjF;gBACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;gBACpC,IAAI,QAAQ,CAAC,cAAc,KAAK,yBAAc,CAAC,QAAQ,EAAE;oBACvD,SAAS;iBACV;gBACD,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACxG,CAAC,IAAI,cAAc,CAAC;gBACpB,UAAU,IAAI,cAAc,CAAC;aAC9B;iBAAM,IAAK,QAAgB,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC9C,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC,CAAC;aACjF;SACF;IAGH,CAAC;IAGD,kBAAkB,CAAC,IAAY,EAAE,UAAe;QAC9C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;IAC9C,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,kBAAkB,CAAC,0BAAe,CAAC,MAAM,EAAE,oCAAgB,CAAC,CAAC;QAClE,IAAI,CAAC,kBAAkB,CAAC,0BAAe,CAAC,GAAG,EAAE,iCAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,0BAAe,CAAC,KAAK,EAAE,mCAAe,CAAC,CAAC;QAChE,IAAI,CAAC,kBAAkB,CAAC,0BAAe,CAAC,GAAG,EAAE,iCAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,0BAAe,CAAC,GAAG,EAAE,iCAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,0BAAe,CAAC,GAAG,EAAE,iCAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,0BAAe,CAAC,IAAI,EAAE,kCAAc,CAAC,CAAC;QAC9D,IAAI,CAAC,kBAAkB,CAAC,0BAAe,CAAC,MAAM,EAAE,oCAAgB,CAAC,CAAC;IACpE,CAAC;IACD,0BAA0B;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,EAAE,CAAC,EAAE,EAAE;YAC3C,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;YAChC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAClC,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAC9C,IAAI,CAAC,WAAW,EAAE;gBAChB,SAAS;aACV;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CACnE,KAAe,EACf,IAAI,CAAC,SAAS,EACd,IAAI,EACH,IAA0B,CAAC,cAAc,CAC3C,CAAC;oBACF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACvC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;wBAC7B,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;qBAC/B;oBACD,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC3C;aACF;iBAAM;gBACL,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,eAAe,CAAC,CAC1E,KAAe,EACf,WAAW,CAAC,SAAS,EACrB,IAAI,EACH,WAAiC,CAAC,cAAc,CAClD,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC;aACvC;SACF;IACH,CAAC;IACD,cAAc,CAAC,OAAc;;QAC3B,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,0CAAE,MAAM,KAAI,CAAC,CAAC;QAClE,IAAI,eAAe,IAAI,gBAAgB,EAAE;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAClD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,eAAe,EAAE;oBACnB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;wBAC7B,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC7B,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;qBAChD;iBACF;qBAAM,IAAI,gBAAgB,EAAE;oBAC3B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;iBAC5B;aACF;YACD,IAAI,eAAe,EAAE;gBACnB,OAAO,eAAe,CAAC;aACxB;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAAC,MAAW;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC5C,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACzB;IACH,CAAC;IASD,yBAAyB,CACvB,QAA2B,EAE3B,oBAA4B,EAC5B,YAAoB,EACpB,QAAa;;QAKb,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,MAAM,UAAU,GAAG,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,MAAM,mCAAI,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,YAAY,IAAI,oBAAoB,IAAI,QAAQ,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,EAAE;gBAC7F,gBAAgB,IAAI,CAAC,CAAC;aACvB;YACD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACnF,IAAI,YAAY,IAAI,oBAAoB,IAAI,QAAQ,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,EAAE;gBAC7F,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAC5B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,gBAAgB,EAE5D,CAAC,EACD,aAAa,CACd,CAAC;aACH;YACD,IAAI,CAAA,MAAA,aAAa,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,EAAE;gBACtC,IAAI,YAAY,GAAG,oBAAoB,IAAI,aAAa,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,EAAE;oBAKjG,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,yBAAc,CAAC,MAAM,CAAC,CAAC;oBACxF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;iBACrC;qBAAM;oBAKL,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC,CAAC;iBAC3F;aACF;YACD,IAAI,aAAa,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,EAAE;gBAC1D,gBAAgB,IAAI,IAAI,CAAC,yBAAyB,CAChD,aAAa,EACb,oBAAoB,EACpB,YAAY,GAAG,CAAC,EAChB,aAAa,CACd,CAAC;aACH;SACF;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,gBAAgB,CAAC,UAAwB;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI;YAC9B,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,WAAW,EAAE,CAAC;SACf,CAAC;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACS,eAAe;QACvB,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;QACpC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACtD,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;QAC3C,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YAEvD,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAElD,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAK,kBAAkB,CAAC,CAAC,CAAmB,CAAC,MAAM,KAAK,CAAC,CAAC;oBAC/F,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EACrC;oBACA,eAAe,EAAE,CAAC;iBACnB;gBACD,IAAI,eAAe,IAAI,UAAU,IAAI,eAAe,GAAG,QAAQ,EAAE;oBAC/D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3D;qBAAM,IAAI,eAAe,IAAI,QAAQ,EAAE;oBACtC,MAAM;iBACP;aACF;SACF;aAAM,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;IACH,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,GAAG,CAAC,KAAa;QACf,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAW,CAAC,CAAC;IACrF,CAAC;IACD,WAAW,CAAC,KAAa;QACvB,OAAO,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,aAAa,CAAC,QAA2B;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,mBAAU,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;SACrF;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAED,QAAQ,CACN,KAAa,EACb,KAAsC,EACtC,GAAW,EACX,GAAW,EACX,KAAmB;QAEnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACvG,CAAC;IAED,WAAW,CACT,KAAa,EACb,KAAsC,EACtC,GAAW,EACX,GAAW,EACX,KAAmB;QAEnB,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAChH,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,KAAe;QACrC,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACtF,CAAC;IAMD,iBAAiB,CAAC,KAAa;;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,mCAAI,IAAI,CAAC;IAExC,CAAC;IAKD,oBAAoB,CAAC,KAAa;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,yBAAc,CAAC,QAAQ,EAAE;YAGrC,IAAI,CAAC,cAAc,GAAG,yBAAc,CAAC,MAAM,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,yBAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;SACrC;aAAM,IAAI,KAAK,KAAK,yBAAc,CAAC,MAAM,EAAE;YAE1C,IAAI,cAAc,GAAG,CAAC,CAAC;YAQvB,MAAM,yBAAyB,GAAG,CAChC,QAA2B,EAC3B,cAA8B,EAC9B,QAAa,EACb,EAAE;gBACF,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,yBAAc,CAAC,QAAQ,IAAI,cAAc,KAAK,yBAAc,CAAC,IAAI,EAAE;oBAC3G,OAAO;iBACR;gBACD,IAAI,QAAQ,CAAC,QAAQ,EAAE;oBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACjD,cAAc,IAAI,CAAC,CAAC;wBACpB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;wBAElF,yBAAyB,CACvB,UAAU,EAEV,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EACnC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrB,CAAC;qBACH;iBACF;YACH,CAAC,CAAC;YACF,yBAAyB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAEhD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;YAE7F,IAAI,CAAC,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC;SAC/C;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,IAAA,8BAAkB,EAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAI5E,OAAO,OAAO,CAAC;IACjB,CAAC;IASD,gBAAgB,CAAC,QAA2B,EAAE,cAA8B,EAAE,QAAa;QACzF,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,yBAAc,CAAC,QAAQ,IAAI,cAAc,KAAK,yBAAc,CAAC,IAAI,EAAE;YAC3G,OAAO,CAAC,CAAC;SACV;QACD,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACrB,MAAM,uBAAuB,GAAkB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7G,IAAI,CAAC,SAAS;gBACZ,IAAI,CAAC,SAAS,KAAK,QAAQ;gBAC3B,IAAI,CAAC,cAAc;gBACnB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,IAAA,gBAAO,EAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;oBACrC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC;oBAChC,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAC9C,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACb,uBAAuB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;gBACvC,CAAC,EACD,QAAQ,CAAC,QAAQ,CAAC,MAAM,EACxB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,SAAS,EACd,KAAK,CAAC,EAAE,CACN,IAAI,CAAC,gBAAgB,CACnB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EACtE,IAAI,CAAC,cAAc,CACpB,CACJ,CAAC;YACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvD,cAAc,IAAI,CAAC,CAAC;gBACpB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACxC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,CAAC,CAAC,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAC5B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,cAAc,EAI1D,CAAC,EACD,UAAU,CACX,CAAC;gBAGF,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,IAAK,SAAiB,CAAC,QAAQ,EAAE;oBAEvE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC;iBAC/D;gBACD,cAAc,IAAI,IAAI,CAAC,gBAAgB,CACrC,UAAU,EAEV,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EACnC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;aACH;SACF;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,gBAAgB,CACd,KAAgB,EAChB,KAAa,EACb,KAAe,EACf,GAAY,EACZ,GAAY,EACZ,KAAoB;QAEpB,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAC;SAClB;QACD,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAW,CAAC;YAEpD,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE;gBAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBACvD,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAA,kBAAS,EAAC,YAAY,CAAC,CAAC;aACnE;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC1D,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBACjD,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,IAAI,OAAO,kBAAkB,KAAK,QAAQ,IAAI,IAAA,kBAAW,EAAC,KAAK,CAAC,EAAE;oBAChE,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;iBACjC;gBACD,IAAI,IAAA,kBAAS,EAAC,MAAM,CAAC,EAAE;oBACrB,MAAM;yBACH,IAAI,CAAC,MAAM,CAAC,EAAE;wBACb,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;oBAC9B,CAAC,CAAC;yBACD,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;wBACpB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;iBACN;qBAAM;oBACL,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;iBAC7B;aACF;SACF;IAEH,CAAC;IAMD,SAAS,CAAC,MAAW,EAAE,KAAa;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;SACxC;aAAM;YACL,MAAM,YAAY,GAAI,OAAsB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;SAC1D;IACH,CAAC;IAMD,SAAS,CAAC,MAAW,EAAE,KAAa;QAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,cAAc,EAAE;YAEvB,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YACtD,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;YAC3C,IAAI,KAAK,GAAG,QAAQ,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IAMD,UAAU,CAAC,SAAc,EAAE,KAAa;QACtC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;aAC9D;YACD,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,MAAM,CAAC;SACxC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE;YAEvB,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YACtD,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;YAC3C,IAAI,KAAK,GAAG,QAAQ,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IAOD,kBAAkB,CAAC,MAAW;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;SACjD;IACH,CAAC;IAMD,mBAAmB,CAAC,SAAc;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;aAC9D;YACD,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;SAC7B;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;SACjD;IACH,CAAC;IAKD,aAAa,CAAC,YAAsB;QAClC,MAAM,uBAAuB,GAAG,EAAE,CAAC;QACnC,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChE,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,WAAW,GAAG,CAAC,EAAE;gBACxD,SAAS;aACV;YACD,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;SACzB;QACD,IAAI,IAAI,CAAC,cAAc,EAAE;YAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;QACD,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAID,sBAAsB,CAAC,YAAsB;QAC3C,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChE,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,WAAW,GAAG,CAAC,EAAE;gBACxD,SAAS;aACV;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;SACzB;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;SACjD;IACH,CAAC;IAKD,aAAa,CAAC,OAAc,EAAE,YAAsB;QAClD,MAAM,uBAAuB,GAAG,EAAE,CAAC;QACnC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,WAAW,GAAG,CAAC,EAAE;gBACxD,SAAS;aACV;YACD,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,IAAI,IAAI,CAAC,cAAc,EAAE;YAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;QACD,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAKD,sBAAsB,CAAC,OAAc,EAAE,YAAsB;QAC3D,MAAM,uBAAuB,GAAa,EAAE,CAAC;QAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,WAAW,GAAG,CAAC,EAAE;gBACxD,SAAS;aACV;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YACtD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;gBAChC,OAAO;aACR;YACD,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CACF,KAAe,EACf,KAAgB,EAChB,UAA8D,KAAK,KAAK,MAAM;QAC5E,CAAC,CAAC,CAAC,EAAO,EAAE,EAAO,EAAc,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC,EAAO,EAAE,EAAO,EAAc,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,WAAW,CAAC;QAEhB,IAAI,QAAQ,EAAE;YACZ,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;gBACtC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAClD,OAAO;aACR;SACF;QACD,MAAM,gBAAgB,GAAG,EAAc,CAAC;QACxC,IAAI,KAAK,KAAK,QAAQ,EAAE;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE;gBAC3C,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACzB;SACF;aAAM;YACL,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,CAAC,IAAA,gBAAO,EAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,EACzG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACb,gBAAgB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;YAChC,CAAC,EACD,IAAI,CAAC,aAAa,EAClB,OAAO,EACP,KAAK,EACL,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAC7C,CAAC;SACH;QACD,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;QAE3C,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACzC,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CACzC,gBAAgB,CAAC,CAAC,CAAC,EAEnB,MAAM,CAAC,cAAc,EACrB,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAC5C,CAAC;gBACF,UAAU,IAAI,aAAa,CAAC;gBAC5B,CAAC,IAAI,aAAa,CAAC;aACpB;SACF;QACD,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC1C;QACD,QAAQ,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC;QACnC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAEO,YAAY,CAAC,MAAW;;QAC9B,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3D,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,UAAU,CAAC,SAAS,EAAE;gBACxB,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACjD,IAAI,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;oBACzD,UAAU,GAAG,KAAK,CAAC;oBACnB,MAAM;iBACP;aACF;iBAAM,IAAI,CAAC,CAAA,MAAA,UAAU,CAAC,UAAU,2DAAG,MAAM,CAAC,CAAA,EAAE;gBAC3C,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM;aACP;SACF;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,0BAA0B,CAAC,WAAyB;;QAClD,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,mCAAI,IAAI,CAAC,aAAa,CAAC,CAAC;QACrF,IAAI,CAAC,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;SACjD;IACH,CAAC;IAED,iBAAiB,CAAC,WAAyB;;QACzC,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,mCAAI,IAAI,CAAC,aAAa,CAAC,CAAC;QACrF,IAAI,CAAC,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,cAAc,EAAE;YAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IAID,mBAAmB;QACjB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,EAAE;YACzC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBAC3C,IAAI,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE;oBAC/B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBACjC;qBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;oBACnC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;oBAClB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;iBACrB;qBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;oBACpC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;oBACjB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;iBACrB;qBAAM;oBACL,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;iBAClB;YACH,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IACD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,IAAI,YAAY,CAAC,SAAiB;QAChC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YACpC,OAAO;SACR;QACD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;IAC7C,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,uBAAuB;QACzB,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5C,OAAO,IAAI,CAAC,wBAAwB,CAAC;SACtC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO;;QACL,MAAA,KAAK,CAAC,OAAO,oDAAI,CAAC;IACpB,CAAC;IACD,cAAc;QACZ,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,uBAAuB;QACrB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IACS,iBAAiB,CAAC,SAA4B;;QACtD,IAAI,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,EAAE;YAChC,OAAQ,IAAI,CAAC,MAAqB,CAAC,SAAmB,CAAC,CAAC;SACzD;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAA4B,EAAE,EAAE;YACrE,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IACS,YAAY,CAAC,SAAiB;;QACtC,IAAI,MAAA,IAAI,CAAC,uBAAuB,0CAAG,SAAmB,CAAC,EAAE;YACvD,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAmB,CAAC,CAAC;SAC1D;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAA4B,EAAE,EAAE;YACrE,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IACS,gBAAgB,CACxB,KAAwB,EACxB,KAAsC,EACtC,GAAY,EACZ,GAAY,EACZ,KAAoB;QAEpB,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE7C,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC3D,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IACS,eAAe,CACvB,KAAa,EACb,KAAsC,EACtC,GAAY,EACZ,GAAY,EACZ,KAAoB;QAEpB,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAExC,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC3D,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IACS,gBAAgB,CAAC,KAAwB,EAAE,KAAe;QAClE,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,KAAK,CAAC;SACd;QACD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC,MAAM,IAAK,KAAa,IAAK,MAAc,CAAC,CAAC;IAC9D,CAAC;IAES,oBAAoB,CAC5B,MAAyB,EACzB,MAAuC,EACvC,MAA+B;IAGjC,CAAC;IACS,qBAAqB,CAAC,MAAyB,EAAE,OAAgC;IAE3F,CAAC;IAQD,kBAAkB,CAAC,WAAmB,EAAE,WAAmB;QAEzD,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAa,CAAC;YACzE,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAa,CAAC;YACzE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBAC/B,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;aAClC;iBAAM;gBACL,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBAC/B,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;aAClC;iBAAM;gBACL,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,IAAI,WAAW,GAAG,WAAW,EAAE;gBAC7B,IAAI,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;oBAC7C,IAAI,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,GAAG,CAAC,CAAa,CAAC;oBACjF,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;wBACnC,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;qBAC1C;yBAAM;wBACL,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAC;qBACvC;oBAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;wBACjD,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;qBACjD;iBACF;aACF;YACD,IAAI,YAAY,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE;gBAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACjD,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE;wBACvC,OAAO,KAAK,CAAC;qBACd;iBACF;gBACD,OAAO,IAAI,CAAC;aACb;YAED,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,aAAa,CAAC,WAAmB,EAAE,WAAmB;QACpD,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;YAIzD,OAAO;SACR;aAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;YAE5D,IAAI,IAAI,CAAC,uBAAuB,EAAE;gBAChC,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;gBAC7D,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;gBAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;iBAClC;qBAAM;oBACL,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;iBAC/B;gBAED,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;iBAClC;qBAAM;oBACL,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;iBAC/B;gBAED,IAAI,OAAO,CAAC;gBACZ,IAAI,OAAO,CAAC;gBACZ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtD,IAAI,WAAW,GAAG,WAAW,EAAE;wBAC7B,IAAI,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;4BAC7C,IAAI,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,GAAG,CAAC,CAAa,CAAC;4BACjF,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;gCACnC,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;6BAC1C;iCAAM;gCACL,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAC;6BACvC;4BAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;gCACjD,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;6BACjD;yBACF;qBACF;oBACD,OAAO,GAAc,YAAa,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,OAAO,GAAc,YAAa,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;wBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;wBACpD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBACrD,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;qBAC1D;yBAAM;wBACL,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBAGjD,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;qBACtD;iBACF;qBAAM;oBACL,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;oBACpD,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;oBAEpD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAG/C,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC5B,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;iBACpD;gBACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;iBAAM;gBAEL,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAGnD,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAChC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;aACpD;SACF;IACH,CAAC;IAED,yBAAyB;;QACvB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE;gBAE3C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAC1C,QAAgB,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC,CAAC;aAC/G;YAED,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAClF,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAClD,IAAI,CAAA,MAAC,QAAgB,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,IAAI,QAAQ,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,EAAE;oBAC/F,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;oBACpC,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC7E,CAAC,IAAI,cAAc,CAAC;oBACpB,UAAU,IAAI,cAAc,CAAC;iBAC9B;qBAAM,IAAK,QAAgB,CAAC,QAAQ,KAAK,IAAI,EAAE;oBAC9C,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC,CAAC;iBACjF;aACF;SACF;IACH,CAAC;IACD,4BAA4B,CAC1B,QAA2B,EAE3B,QAAa;;QAEb,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,MAAM,UAAU,GAAG,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,MAAM,mCAAI,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,QAAQ,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,EAAE;gBACrD,gBAAgB,IAAI,CAAC,CAAC;aACvB;YACD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACnF,IAAI,QAAQ,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,EAAE;gBACrD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAC5B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,gBAAgB,EAE5D,CAAC,EACD,aAAa,CACd,CAAC;aACH;YACD,gBAAgB,IAAI,IAAI,CAAC,4BAA4B,CACnD,aAAa,EAEb,aAAa,CACd,CAAC;SACH;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;;AA5lCH,gCA6lCC;AApLQ,gBAAK,GAAG,IAAI,UAAU,CAAC;IAC5B,GAAG;IAEH,CAAC;IACD,MAAM,EAAE,CAAC;CACV,CAAC,CAAC","file":"DataSource.js","sourcesContent":["import * as sort from '../tools/sort';\nimport type {\n CustomAggregation,\n DataSourceAPI,\n FieldAssessor,\n FieldData,\n FieldDef,\n FieldFormat,\n FilterRules,\n IListTableDataConfig,\n IPagination,\n MaybePromiseOrCallOrUndefined,\n MaybePromiseOrUndefined,\n SortOrder\n} from '../ts-types';\nimport { AggregationType, HierarchyState } from '../ts-types';\nimport { applyChainSafe, getOrApply, obj, isPromise, emptyFn } from '../tools/helper';\nimport { EventTarget } from '../event/EventTarget';\nimport { getValueByPath, isAllDigits } from '../tools/util';\nimport { calculateArrayDiff } from '../tools/diff-cell';\nimport { arrayEqual, cloneDeep, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport {\n RecordAggregator,\n type Aggregator,\n SumAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n AvgAggregator,\n NoneAggregator,\n CustomAggregator\n} from '../dataset/statistics-helper';\nimport type { ColumnData } from '../ts-types/list-table/layout-map/api';\n\n/**\n * 判断字段数据是否为访问器的格式\n * @param field\n * @returns boolean\n */\nfunction isFieldAssessor(field: FieldDef | FieldFormat | number): field is FieldAssessor {\n if (obj.isObject(field)) {\n const a = field as FieldAssessor;\n if (isValid(a.get) && isValid(a.set)) {\n return true;\n }\n }\n return false;\n}\nconst EVENT_TYPE = {\n SOURCE_LENGTH_UPDATE: 'source_length_update',\n CHANGE_ORDER: 'change_order'\n} as const;\ntype PromiseBack = (value: MaybePromiseOrUndefined) => void;\n\n/**\n * 获取到的某个filed的值 处理可能为promise的情况\n * @param value\n * @param promiseCallBack\n * @returns\n */\nfunction getValue(value: MaybePromiseOrCallOrUndefined, promiseCallBack: PromiseBack): MaybePromiseOrUndefined {\n const maybePromiseOrValue = getOrApply(value);\n if (isPromise(maybePromiseOrValue)) {\n const promiseValue = maybePromiseOrValue.then((r: any) => {\n promiseCallBack(r);\n return r;\n });\n\n promiseCallBack(promiseValue);\n return promiseValue;\n }\n return maybePromiseOrValue;\n}\n/**\n * 根据field获取数据源record对应的值 获取到的可能是个异步Promise 需要设置回调处理逻辑\n * @param record\n * @param field\n * @param promiseCallBack\n * @returns\n */\nexport function getField(\n record: MaybePromiseOrUndefined,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI,\n promiseCallBack: PromiseBack\n): FieldData {\n if (record === null || record === undefined) {\n return undefined;\n }\n if (isPromise(record)) {\n return record.then((r: any) => getField(r, field, col, row, table, promiseCallBack));\n }\n const fieldGet: any = isFieldAssessor(field) ? field.get : field;\n if (fieldGet in (record as any)) {\n const fieldResult = (record as any)[fieldGet];\n\n return getValue(fieldResult, promiseCallBack);\n }\n if (typeof fieldGet === 'function') {\n const fieldResult = fieldGet(record, col, row, table);\n return getValue(fieldResult, promiseCallBack);\n }\n if (Array.isArray(fieldGet)) {\n const fieldResult = getValueByPath(record, [...fieldGet]);\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldArray = `${fieldGet}`.split('.');\n if (fieldArray.length <= 1) {\n const fieldResult = (record as any)[fieldGet];\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldResult = applyChainSafe(\n record,\n (val, name) => getField(val, name, col, row, table, emptyFn as any),\n ...fieldArray\n );\n return getValue(fieldResult, promiseCallBack);\n}\n\nfunction _getIndex(sortedIndexMap: null | (number | number[])[], index: number): number | number[] {\n if (!sortedIndexMap) {\n return index;\n }\n const mapIndex = sortedIndexMap[index];\n return isValid(mapIndex) ? mapIndex : index;\n}\n\nexport interface DataSourceParam {\n get: (index: number) => any;\n length: number;\n source?: any;\n}\nexport interface ISortedMapItem {\n asc?: (number | number[])[];\n desc?: (number | number[])[];\n normal?: (number | number[])[];\n}\n\nexport class DataSource extends EventTarget implements DataSourceAPI {\n dataConfig: IListTableDataConfig;\n dataSourceObj: DataSourceParam | DataSource;\n private _get: (index: number | number[]) => any;\n /** 数据条目数 如果是树形结构的数据 则是第一层父节点的数量 */\n private _sourceLength: number;\n\n private _source: any;\n /**\n * 缓存按字段进行排序的结果\n */\n protected sortedIndexMap: Map<FieldDef, ISortedMapItem>;\n /**\n * 记录最近一次排序规则 当展开树形结构的节点时需要用到\n */\n private lastOrder: SortOrder;\n private lastOrderFn: (a: any, b: any, order: string) => number;\n private lastOrderField: FieldDef;\n /** 每一行对应源数据的索引 */\n currentIndexedData: (number | number[])[] | null = [];\n protected userPagination: IPagination;\n protected pagination: IPagination;\n /** 当前页每一行对应源数据的索引 */\n _currentPagerIndexedData: (number | number[])[];\n // 当前是否为层级的树形结构 排序时判断该值确实是否继续进行子节点排序\n hierarchyExpandLevel: number = 0;\n static get EVENT_TYPE(): typeof EVENT_TYPE {\n return EVENT_TYPE;\n }\n hasHierarchyStateExpand: boolean = false;\n // treeDataHierarchyState: Map<number | string, HierarchyState> = new Map();\n beforeChangedRecordsMap: Record<number, any>[] = [];\n\n // 注册聚合类型\n registedAggregators: {\n [key: string]: {\n new (dimension: string | string[], formatFun?: any, isRecord?: boolean, aggregationFun?: Function): Aggregator;\n };\n } = {};\n // columns对应各个字段的聚合类对象\n fieldAggregators: Aggregator[] = [];\n layoutColumnObjects: ColumnData[] = [];\n constructor(\n dataSourceObj?: DataSourceParam | DataSource,\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columnObjs?: ColumnData[],\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ) {\n super();\n this.registerAggregators();\n this.dataSourceObj = dataSourceObj;\n this.dataConfig = dataConfig;\n this._get = dataSourceObj?.get.bind(dataSourceObj) || (undefined as any);\n this.layoutColumnObjects = columnObjs;\n this._source = this.processRecords(dataSourceObj?.source ?? dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap = new Map<string, ISortedMapItem>();\n\n this._currentPagerIndexedData = [];\n this.userPagination = pagination;\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n if (hierarchyExpandLevel >= 1) {\n this.hierarchyExpandLevel = hierarchyExpandLevel;\n }\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // 初始化currentIndexedData 正常未排序。设置其状态\n if (rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.updatePagerData();\n }\n initTreeHierarchyState() {\n // if (this.hierarchyExpandLevel) {\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // if (this.hierarchyExpandLevel > 1) {\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n if ((nodeData as any).children?.length > 0) {\n if (this.hierarchyExpandLevel > 1) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.expand);\n } else {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n this.hasHierarchyStateExpand = true;\n if (nodeData.hierarchyState === HierarchyState.collapse) {\n continue;\n }\n const childrenLength = this.initChildrenNodeHierarchy(indexKey, this.hierarchyExpandLevel, 2, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n // }\n // }\n }\n\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.registedAggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n this.registerAggregator(AggregationType.NONE, NoneAggregator);\n this.registerAggregator(AggregationType.CUSTOM, CustomAggregator);\n }\n _generateFieldAggragations() {\n const columnObjs = this.layoutColumnObjects;\n for (let i = 0; i < columnObjs?.length; i++) {\n columnObjs[i].aggregator = null; //重置聚合器 如更新了过滤条件都需要重新计算\n const field = columnObjs[i].field;\n const aggragation = columnObjs[i].aggregation;\n if (!aggragation) {\n continue;\n }\n if (Array.isArray(aggragation)) {\n for (let j = 0; j < aggragation.length; j++) {\n const item = aggragation[j];\n const aggregator = new this.registedAggregators[item.aggregationType](\n field as string,\n item.formatFun,\n true,\n (item as CustomAggregation).aggregationFun\n );\n this.fieldAggregators.push(aggregator);\n if (!columnObjs[i].aggregator) {\n columnObjs[i].aggregator = [];\n }\n columnObjs[i].aggregator.push(aggregator);\n }\n } else {\n const aggregator = new this.registedAggregators[aggragation.aggregationType](\n field as string,\n aggragation.formatFun,\n true,\n (aggragation as CustomAggregation).aggregationFun\n );\n this.fieldAggregators.push(aggregator);\n columnObjs[i].aggregator = aggregator;\n }\n }\n }\n processRecords(records: any[]) {\n this._generateFieldAggragations();\n const filteredRecords = [];\n const isHasAggregation = this.fieldAggregators.length >= 1;\n const isHasFilterRule = this.dataConfig?.filterRules?.length >= 1;\n if (isHasFilterRule || isHasAggregation) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n if (isHasFilterRule) {\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n isHasAggregation && this.processRecord(record);\n }\n } else if (isHasAggregation) {\n this.processRecord(record);\n }\n }\n if (isHasFilterRule) {\n return filteredRecords;\n }\n }\n return records;\n }\n\n processRecord(record: any) {\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n const aggregator = this.fieldAggregators[i];\n aggregator.push(record);\n }\n }\n /**\n * 初始化子节点的层次信息\n * @param indexKey 父节点的indexKey 即currentLevel-1的节点\n * @param hierarchyExpandLevel 需要展开层级数\n * @param currentLevel 当前要展开的是第几层\n * @param nodeData 父节点数据 即currentLevel-1的节点\n * @returns\n */\n initChildrenNodeHierarchy(\n indexKey: number | number[],\n // subNodeIndex:number,\n hierarchyExpandLevel: number,\n currentLevel: number,\n nodeData: any\n ): number {\n // if (currentLevel > hierarchyExpandLevel) {\n // return 0;\n // }\n let childTotalLength = 0;\n const nodeLength = nodeData.children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = nodeData.children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n if (childNodeData.children?.length > 0) {\n if (currentLevel < hierarchyExpandLevel || childNodeData.hierarchyState === HierarchyState.expand) {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.expand\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.expand);\n this.hasHierarchyStateExpand = true;\n } else {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.collapse\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n if (childNodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += this.initChildrenNodeHierarchy(\n childIndexKey,\n hierarchyExpandLevel,\n currentLevel + 1,\n childNodeData\n );\n }\n }\n return childTotalLength;\n }\n updatePagination(pagination?: IPagination): void {\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n this.updatePagerData();\n }\n protected updatePagerData(): void {\n const { currentIndexedData } = this;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n this._currentPagerIndexedData.length = 0;\n if (currentIndexedData && currentIndexedData.length > 0) {\n // this._currentPagerIndexedData = currentIndexedData.slice(startIndex, endIndex);\n let firstLevelIndex = -1;\n for (let i = 0; i < currentIndexedData.length; i++) {\n //计算第一层父级节点数量\n if (\n (Array.isArray(currentIndexedData[i]) && (currentIndexedData[i] as Array<number>).length === 1) ||\n !Array.isArray(currentIndexedData[i])\n ) {\n firstLevelIndex++;\n }\n if (firstLevelIndex >= startIndex && firstLevelIndex < endIndex) {\n this._currentPagerIndexedData.push(currentIndexedData[i]);\n } else if (firstLevelIndex >= endIndex) {\n break;\n }\n }\n } else if (this._sourceLength > 0) {\n throw new Error(`currentIndexedData should has values!`);\n }\n }\n\n get source(): any {\n return this._source;\n }\n get(index: number): MaybePromiseOrUndefined {\n return this.getOriginalRecord(_getIndex(this.currentPagerIndexedData, index));\n }\n getRaw(index: number): MaybePromiseOrUndefined {\n return this.getRawRecord(_getIndex(this.currentPagerIndexedData, index) as number);\n }\n getIndexKey(index: number): number | number[] {\n return _getIndex(this.currentPagerIndexedData, index);\n }\n getTableIndex(colOrRow: number | number[]): number {\n if (Array.isArray(colOrRow)) {\n return this.currentPagerIndexedData.findIndex(value => arrayEqual(value, colOrRow));\n }\n return this.currentPagerIndexedData.findIndex(value => value === colOrRow);\n }\n /** 获取数据源中第index位置的field字段数据。传入col row是因为后面的format函数参数使用*/\n getField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getOriginalField(_getIndex(this.currentPagerIndexedData, index), field, col, row, table);\n }\n\n getRawField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getRawFieldData(_getIndex(this.currentPagerIndexedData, index) as number, field, col, row, table);\n }\n\n hasField(index: number, field: FieldDef): boolean {\n return this.hasOriginalField(_getIndex(this.currentPagerIndexedData, index), field);\n }\n /**\n * 获取第index条数据的展示收起状态\n * @param index\n * @returns\n */\n getHierarchyState(index: number): HierarchyState {\n // const indexed = this.getIndexKey(index);\n const record = this.getOriginalRecord(this.currentIndexedData[index]);\n return record?.hierarchyState ?? null;\n // return this.treeDataHierarchyState.get(Array.isArray(indexed) ? indexed.join(',') : indexed) ?? null;\n }\n /**\n * 展开或者收起数据index\n * @param index\n */\n toggleHierarchyState(index: number) {\n const oldIndexedData = this.currentIndexedData.slice(0);\n const indexed = this.getIndexKey(index);\n const state = this.getHierarchyState(index);\n const data = this.getOriginalRecord(indexed);\n\n this.clearSortedIndexMap();\n if (state === HierarchyState.collapse) {\n // 将节点状态置为expand\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.expand);\n data.hierarchyState = HierarchyState.expand;\n this.pushChildrenNode(indexed, HierarchyState.expand, data);\n this.hasHierarchyStateExpand = true;\n } else if (state === HierarchyState.expand) {\n // 记录状态变化影响的子节点行数\n let childrenLength = 0;\n /**\n * 当某个节点由展开变为折叠,需要计算出影响的节点数量 使用childrenLength来标记。同样需递归\n * @param indexKey\n * @param hierarchyState\n * @param nodeData\n * @returns\n */\n const computeChildrenNodeLength = (\n indexKey: number | number[],\n hierarchyState: HierarchyState,\n nodeData: any\n ) => {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return;\n }\n if (nodeData.children) {\n for (let i = 0; i < nodeData.children.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey) ? indexKey.concat([i]) : [indexKey, i];\n\n computeChildrenNodeLength(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n nodeData.children[i].hierarchyState,\n nodeData.children[i]\n );\n }\n }\n };\n computeChildrenNodeLength(indexed, state, data);\n\n this.currentIndexedData.splice(this.currentIndexedData.indexOf(indexed) + 1, childrenLength);\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.collapse);\n data.hierarchyState = HierarchyState.collapse;\n }\n // 变更了pagerConfig所以需要更新分页数据 TODO待定 因为只关注根节点的数量的话 可能不会影响到\n this.updatePagerData();\n\n const newDiff = calculateArrayDiff(oldIndexedData, this.currentIndexedData);\n // const oldDiff = diffCellIndices(oldIndexedData, this.currentIndexedData);\n\n // return oldDiff;\n return newDiff;\n }\n /**\n * 某个节点状态由折叠变为展开,往this.currentIndexedData中插入展开后的新增节点,注意需要递归,因为展开节点下面的子节点也能是展开状态\n * @param recordRowIndex 要计算节点的行号(从body部分开始计算)\n * @param indexKey 需要判断节点的index\n * @param hierarchyState 当前节点状态\n * @param nodeData 当前节点数据 取children时用\n * @returns\n */\n pushChildrenNode(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any): number {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return 0;\n }\n let childrenLength = 0;\n if (nodeData.children) {\n const subNodeSortedIndexArray: Array<number> = Array.from({ length: nodeData.children.length }, (_, i) => i);\n this.lastOrder &&\n this.lastOrder !== 'normal' &&\n this.lastOrderField &&\n sort.sort(\n index =>\n isValid(subNodeSortedIndexArray[index])\n ? subNodeSortedIndexArray[index]\n : (subNodeSortedIndexArray[index] = index),\n (index, rel) => {\n subNodeSortedIndexArray[index] = rel;\n },\n nodeData.children.length,\n this.lastOrderFn,\n this.lastOrder,\n index =>\n this.getOriginalField(\n Array.isArray(indexKey) ? indexKey.concat([index]) : [indexKey, index],\n this.lastOrderField\n )\n );\n for (let i = 0; i < subNodeSortedIndexArray.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey)\n ? indexKey.concat([subNodeSortedIndexArray[i]])\n : [indexKey, subNodeSortedIndexArray[i]];\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childrenLength,\n // this.pagination.currentPage * this.pagination.perPageCount +\n // recordRowIndex +\n // childrenLength,\n 0,\n childIndex\n );\n\n // const preChildState = this.treeDataHierarchyState.get(childIndex.join(','));\n const childData = this.getOriginalRecord(childIndex);\n if (!nodeData.children[i].hierarchyState && (childData as any).children) {\n // this.treeDataHierarchyState.set(childIndex.join(','), HierarchyState.collapse);\n nodeData.children[i].hierarchyState = HierarchyState.collapse;\n }\n childrenLength += this.pushChildrenNode(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n nodeData.children[i].hierarchyState,\n nodeData.children[subNodeSortedIndexArray[i]]\n );\n }\n }\n return childrenLength;\n }\n changeFieldValue(\n value: FieldData,\n index: number,\n field: FieldDef,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n if (index >= 0) {\n const dataIndex = this.getIndexKey(index) as number;\n\n if (!this.beforeChangedRecordsMap[dataIndex]) {\n const originRecord = this.getOriginalRecord(dataIndex);\n this.beforeChangedRecordsMap[dataIndex] = cloneDeep(originRecord);\n }\n if (typeof field === 'string' || typeof field === 'number') {\n const beforeChangedValue = this.beforeChangedRecordsMap[dataIndex][field]; // this.getOriginalField(index, field, col, row, table);\n const record = this.getOriginalRecord(dataIndex);\n let formatValue = value;\n if (typeof beforeChangedValue === 'number' && isAllDigits(value)) {\n formatValue = parseFloat(value);\n }\n if (isPromise(record)) {\n record\n .then(record => {\n record[field] = formatValue;\n })\n .catch((err: Error) => {\n console.error('VTable Error:', err);\n });\n } else {\n record[field] = formatValue;\n }\n }\n }\n // return getField(record, field);\n }\n /**\n * 将数据record 替换到index位置处\n * @param record\n * @param index\n */\n setRecord(record: any, index: number) {\n const indexed = this.getIndexKey(index);\n if (!Array.isArray(indexed)) {\n this.source.splice(indexed, 1, record);\n } else {\n const c_node_index = (indexed as Array<any>)[indexed.length - 1];\n const p_node = this.getOriginalRecord(indexed.slice(0, indexed.length - 1));\n (p_node as any).children.splice(c_node_index, 1, record);\n }\n }\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecord(record: any, index: number) {\n this.source.splice(index, 0, record);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n this.initTreeHierarchyState();\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecords(recordArr: any, index: number) {\n if (Array.isArray(recordArr)) {\n this.source.splice(index, 0, ...recordArr);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n }\n\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n }\n\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecordForSorted(record: any) {\n this.source.push(record);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecordsForSorted(recordArr: any) {\n if (Array.isArray(recordArr)) {\n this.source.push(...recordArr);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n this.sortedIndexMap.clear();\n }\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecords(recordIndexs: number[]) {\n const realDeletedRecordIndexs = [];\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n realDeletedRecordIndexs.push(recordIndex);\n this.source.splice(recordIndex, 1);\n this.currentIndexedData.pop();\n this._sourceLength -= 1;\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n return realDeletedRecordIndexs;\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecordsForSorted(recordIndexs: number[]) {\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex];\n this.source.splice(rawIndex, 1);\n this._sourceLength -= 1;\n }\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n /**\n * 修改多条数据recordIndexs\n */\n updateRecords(records: any[], recordIndexs: number[]) {\n const realDeletedRecordIndexs = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n realDeletedRecordIndexs.push(recordIndex);\n this.source[recordIndex] = records[index];\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n }\n return realDeletedRecordIndexs;\n }\n\n /**\n * 删除多条数据recordIndexs\n */\n updateRecordsForSorted(records: any[], recordIndexs: number[]) {\n const realDeletedRecordIndexs: number[] = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex];\n if (typeof rawIndex !== 'number') {\n return;\n }\n realDeletedRecordIndexs.push(recordIndex);\n this.source[rawIndex] = records[index];\n }\n this.sortedIndexMap.clear();\n }\n\n sort(\n field: FieldDef,\n order: SortOrder,\n orderFn: (v1: any, v2: any, order: SortOrder) => -1 | 0 | 1 = order !== 'desc'\n ? (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 > v2 ? 1 : -1)\n : (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 < v2 ? 1 : -1)\n ): void {\n this.lastOrderField = field;\n this.lastOrder = order;\n this.lastOrderFn = orderFn;\n let filedMap = this.sortedIndexMap.get(field);\n let orderedData;\n\n if (filedMap) {\n orderedData = filedMap[order];\n if (orderedData && orderedData.length > 0) {\n this.currentIndexedData = orderedData;\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n return;\n }\n }\n const sortedIndexArray = [] as number[];\n if (order === 'normal') {\n for (let i = 0; i < this._sourceLength; i++) {\n sortedIndexArray[i] = i;\n }\n } else {\n sort.sort(\n index => (isValid(sortedIndexArray[index]) ? sortedIndexArray[index] : (sortedIndexArray[index] = index)),\n (index, rel) => {\n sortedIndexArray[index] = rel;\n },\n this._sourceLength,\n orderFn,\n order,\n index => this.getOriginalField(index, field)\n );\n }\n this.currentIndexedData = sortedIndexArray;\n\n if (this.hierarchyExpandLevel) {\n let nodeLength = sortedIndexArray.length;\n const t0 = window.performance.now();\n for (let i = 0; i < nodeLength; i++) {\n const record = this.getOriginalRecord(sortedIndexArray[i]);\n const subNodeLength = this.pushChildrenNode(\n sortedIndexArray[i],\n // this.treeDataHierarchyState.get(sortedIndexArray[i]),\n record.hierarchyState,\n this.getOriginalRecord(sortedIndexArray[i]) // ?sortedIndexArray 在这个过程中不是变化了吗 通过i取id还是对的吗? 对哦!因为i和nodeLength都+subNodeLength 来动态调整过了!\n );\n nodeLength += subNodeLength;\n i += subNodeLength;\n }\n }\n if (!filedMap) {\n filedMap = { asc: [], desc: [], normal: [] };\n this.sortedIndexMap.set(field, filedMap);\n }\n filedMap[order] = sortedIndexArray;\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n }\n\n private filterRecord(record: any) {\n let isReserved = true;\n for (let i = 0; i < this.dataConfig.filterRules.length; i++) {\n const filterRule = this.dataConfig?.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n return isReserved;\n }\n\n updateFilterRulesForSorted(filterRules?: FilterRules): void {\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.source ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap.clear();\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n updateFilterRules(filterRules?: FilterRules): void {\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.source ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n // 初始化currentIndexedData 正常未排序。设置其状态\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n }\n /**\n * 当节点折叠或者展开时 将排序缓存清空(非当前排序规则的缓存)\n */\n clearSortedIndexMap() {\n if (this.lastOrderField && this.lastOrder) {\n this.sortedIndexMap.forEach((sortMap, key) => {\n if (key !== this.lastOrderField) {\n this.sortedIndexMap.delete(key);\n } else if (this.lastOrder === 'asc') {\n sortMap.desc = [];\n sortMap.normal = [];\n } else if (this.lastOrder === 'desc') {\n sortMap.asc = [];\n sortMap.normal = [];\n } else {\n sortMap.desc = [];\n sortMap.asc = [];\n }\n });\n }\n }\n get sourceLength(): number {\n return this._sourceLength;\n }\n set sourceLength(sourceLen: number) {\n if (this._sourceLength === sourceLen) {\n return;\n }\n this._sourceLength = sourceLen;\n this.fireListeners(EVENT_TYPE.SOURCE_LENGTH_UPDATE, this._sourceLength);\n }\n get length(): number {\n return this.currentPagerIndexedData.length;\n }\n get dataSource(): DataSource {\n return this;\n }\n get currentPagerIndexedData(): (number | number[])[] {\n if (this._currentPagerIndexedData.length > 0) {\n return this._currentPagerIndexedData;\n }\n return []; //this.currentIndexedData || [];\n }\n release(): void {\n super.release?.();\n }\n clearSortedMap() {\n this.currentIndexedData && (this.currentIndexedData.length = 0);\n this.currentIndexedData = null;\n this.sortedIndexMap.forEach(item => {\n item.asc && (item.asc.length = 0);\n item.desc && (item.desc.length = 0);\n });\n this.sortedIndexMap.clear();\n }\n clearCurrentIndexedData(): void {\n this.currentIndexedData = null;\n this.currentPagerIndexedData.length = 0;\n }\n protected getOriginalRecord(dataIndex: number | number[]): MaybePromiseOrUndefined {\n if (this.dataConfig?.filterRules) {\n return (this.source as Array<any>)[dataIndex as number];\n }\n return getValue(this._get(dataIndex), (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getRawRecord(dataIndex: number): MaybePromiseOrUndefined {\n if (this.beforeChangedRecordsMap?.[dataIndex as number]) {\n return this.beforeChangedRecordsMap[dataIndex as number];\n }\n return getValue(this._get(dataIndex), (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getOriginalField(\n index: number | number[],\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getOriginalRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected getRawFieldData(\n index: number,\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getRawRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected hasOriginalField(index: number | number[], field: FieldDef): boolean {\n if (field === null) {\n return false;\n }\n if (typeof field === 'function') {\n return true;\n }\n const record = this.getOriginalRecord(index);\n return Boolean(record && (field as any) in (record as any));\n }\n\n protected fieldPromiseCallBack(\n _index: number | number[],\n _field: FieldDef | FieldFormat | number,\n _value: MaybePromiseOrUndefined\n ): void {\n //\n }\n protected recordPromiseCallBack(_index: number | number[], _record: MaybePromiseOrUndefined): void {\n //\n }\n /** 静态变量 代表数据为空 */\n static EMPTY = new DataSource({\n get() {\n /* noop */\n },\n length: 0\n });\n isCanExchangeOrder(sourceIndex: number, targetIndex: number) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex] as number[];\n let targetIndexs = this.currentPagerIndexedData[targetIndex] as number[];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n if (sourceIndexs.length === targetIndexs.length) {\n for (let i = 0; i <= sourceIndexs.length - 2; i++) {\n if (sourceIndexs[i] !== targetIndexs[i]) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }\n return true;\n }\n reorderRecord(sourceIndex: number, targetIndex: number) {\n if (this.lastOrder === 'asc' || this.lastOrder === 'desc') {\n // const sourceIds = this._currentPagerIndexedData.splice(sourceIndex, 1);\n // sourceIds.unshift(targetIndex, 0);\n // Array.prototype.splice.apply(this._currentPagerIndexedData, sourceIds);\n return;\n } else if (this.isCanExchangeOrder(sourceIndex, targetIndex)) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex];\n let targetIndexs = this.currentPagerIndexedData[targetIndex];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n let sourceI;\n let targetI;\n if (sourceIndexs.length > 1 || targetIndexs.length > 1) {\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n sourceI = (<number[]>sourceIndexs).splice(sourceIndexs.length - 1, 1)[0];\n targetI = (<number[]>targetIndexs).splice(targetIndexs.length - 1, 1)[0];\n if (sourceIndexs.length >= 1) {\n const parent = this.getOriginalRecord(sourceIndexs);\n const sourceIds = parent.children.splice(sourceI, 1);\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(parent.children, sourceIds);\n } else {\n const sourceIds = this.source.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(this.source, sourceIds);\n }\n } else {\n sourceI = this.currentPagerIndexedData[sourceIndex];\n targetI = this.currentPagerIndexedData[targetIndex];\n // 从source的二维数组中取出需要操作的records\n const records = this.source.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetI, 0);\n Array.prototype.splice.apply(this.source, records);\n }\n this.restoreTreeHierarchyState();\n this.updatePagerData();\n } else {\n // 从source的二维数组中取出需要操作的records\n const records = this.source.splice(sourceIndex, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetIndex, 0);\n Array.prototype.splice.apply(this.source, records);\n }\n }\n }\n\n restoreTreeHierarchyState() {\n if (this.hierarchyExpandLevel) {\n for (let i = 0; i < this._sourceLength; i++) {\n //expandLevel为有效值即需要按tree分析展示数据\n const nodeData = this.getOriginalRecord(i);\n (nodeData as any).children && !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n if ((nodeData as any).children?.length > 0 && nodeData.hierarchyState === HierarchyState.expand) {\n this.hasHierarchyStateExpand = true;\n const childrenLength = this.restoreChildrenNodeHierarchy(indexKey, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n }\n }\n restoreChildrenNodeHierarchy(\n indexKey: number | number[],\n\n nodeData: any\n ): number {\n let childTotalLength = 0;\n const nodeLength = nodeData.children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = nodeData.children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n childTotalLength += this.restoreChildrenNodeHierarchy(\n childIndexKey,\n\n childNodeData\n );\n }\n return childTotalLength;\n }\n}\n"]}
|
package/cjs/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ import { renderChart } from './scenegraph/graphic/contributions/chart-render-hel
|
|
|
16
16
|
import { restoreMeasureText, setCustomAlphabetCharSet } from './scenegraph/utils/text-measure';
|
|
17
17
|
export { getDataCellPath } from './tools/get-data-path';
|
|
18
18
|
export * from './render/jsx';
|
|
19
|
-
export declare const version = "0.22.
|
|
19
|
+
export declare const version = "0.22.1";
|
|
20
20
|
export { TYPES, core, ListTable, ListTableConstructorOptions, PivotTable, PivotTableConstructorOptions, PivotChartConstructorOptions, PivotChart, IHeaderTreeDefine, IDimension, IIndicator, ITitleDefine, ICornerDefine, ColumnsDefine, ColumnDefine, LinkColumnDefine, ChartColumnDefine, ImageColumnDefine, SparklineColumnDefine, ProgressbarColumnDefine, TextColumnDefine, GroupColumnDefine, TextAlignType, TextBaselineType, themes, data, MousePointerCellEvent, getIcons, clearGlobal, register, DataStatistics, CustomLayout, updateCell, renderChart, graphicUtil, setCustomAlphabetCharSet, restoreMeasureText };
|
|
21
21
|
declare function getIcons(): {
|
|
22
22
|
[key: string]: TYPES.ColumnIconOption;
|
package/cjs/index.js
CHANGED
|
@@ -142,6 +142,6 @@ Object.defineProperty(exports, "getDataCellPath", {
|
|
|
142
142
|
get: function() {
|
|
143
143
|
return get_data_path_1.getDataCellPath;
|
|
144
144
|
}
|
|
145
|
-
}), __exportStar(require("./render/jsx"), exports), exports.version = "0.22.
|
|
145
|
+
}), __exportStar(require("./render/jsx"), exports), exports.version = "0.22.1",
|
|
146
146
|
exports.getIcons = getIcons, exports.clearGlobal = clearGlobal, TYPES.AggregationType;
|
|
147
147
|
//# sourceMappingURL=index.js.map
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAA4D;AA8F1D,4FA9FO,qBAAW,OA8FP;AA7Fb,IAAA,4BAAkB,GAAE,CAAC;AAErB,kDAAoC;AAqDlC,sBAAK;AApDP,6CAA+B;AAqD7B,oBAAI;AApDN,6CAA+B;AA4E7B,oBAAI;AA3EN,+CAAiC;AACjC,qDAAuC;AA+ErC,4BAAQ;AA9EV,iDAAmC;AAwEjC,wBAAM;AAvER,yEAA2D;AAiFzD,wCAAc;AA3DhB,2CAAwC;AA2BtC,0FA3BO,qBAAS,OA2BP;AA1BX,6CAA0C;AA4BxC,2FA5BO,uBAAU,OA4BP;AA3BZ,6CAA0C;AA8BxC,2FA9BO,uBAAU,OA8BP;AA5BZ,8DAAgD;AAwD9C,oCAAY;AAtDd,wEAAoE;AAuDlE,2FAvDO,wBAAU,OAuDP;AAtDZ,gGAAqF;AAuDnF,4FAvDO,iCAAW,OAuDP;AAtDb,kEAA+F;AAyD7F,mGAzDO,iCAAkB,OAyDP;AADlB,yGAxD2B,uCAAwB,OAwD3B;AAnD1B,uDAAwD;AAA/C,gHAAA,eAAe,OAAA;AACxB,+CAA6B;AAEhB,QAAA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAA4D;AA8F1D,4FA9FO,qBAAW,OA8FP;AA7Fb,IAAA,4BAAkB,GAAE,CAAC;AAErB,kDAAoC;AAqDlC,sBAAK;AApDP,6CAA+B;AAqD7B,oBAAI;AApDN,6CAA+B;AA4E7B,oBAAI;AA3EN,+CAAiC;AACjC,qDAAuC;AA+ErC,4BAAQ;AA9EV,iDAAmC;AAwEjC,wBAAM;AAvER,yEAA2D;AAiFzD,wCAAc;AA3DhB,2CAAwC;AA2BtC,0FA3BO,qBAAS,OA2BP;AA1BX,6CAA0C;AA4BxC,2FA5BO,uBAAU,OA4BP;AA3BZ,6CAA0C;AA8BxC,2FA9BO,uBAAU,OA8BP;AA5BZ,8DAAgD;AAwD9C,oCAAY;AAtDd,wEAAoE;AAuDlE,2FAvDO,wBAAU,OAuDP;AAtDZ,gGAAqF;AAuDnF,4FAvDO,iCAAW,OAuDP;AAtDb,kEAA+F;AAyD7F,mGAzDO,iCAAkB,OAyDP;AADlB,yGAxD2B,uCAAwB,OAwD3B;AAnD1B,uDAAwD;AAA/C,gHAAA,eAAe,OAAA;AACxB,+CAA6B;AAEhB,QAAA,OAAO,GAAG,QAAQ,CAAC;AAqDhC,SAAS,QAAQ;IAGf,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC;AArBC,4BAAQ;AAuBV,SAAS,WAAW;IAClB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAGtB,CAAC;AA1BC,kCAAW;AA2Bb,KAAK,CAAC,eAAe,CAAC","file":"index.js","sourcesContent":["/* eslint-disable sort-imports */\nimport { graphicUtil, registerForVrender } from './vrender';\nregisterForVrender();\n\nimport * as TYPES from './ts-types';\nimport * as core from './core';\nimport * as data from './data';\nimport * as icons from './icons';\nimport * as register from './register';\nimport * as themes from './themes';\nimport * as DataStatistics from './dataset/DataStatistics';\nimport type {\n ColumnDefine,\n ColumnsDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n ListTableConstructorOptions,\n PivotTableConstructorOptions,\n PivotChartConstructorOptions,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n TextAlignType,\n TextBaselineType\n} from './ts-types';\nimport { ListTable } from './ListTable';\nimport { PivotTable } from './PivotTable';\nimport { PivotChart } from './PivotChart';\nimport type { MousePointerCellEvent } from './ts-types/events';\nimport * as CustomLayout from './render/layout';\n\nimport { updateCell } from './scenegraph/group-creater/cell-helper';\nimport { renderChart } from './scenegraph/graphic/contributions/chart-render-helper';\nimport { restoreMeasureText, setCustomAlphabetCharSet } from './scenegraph/utils/text-measure';\n\n// import { container, loadCanvasPicker } from '@src/vrender';\n// loadCanvasPicker(container);\n\nexport { getDataCellPath } from './tools/get-data-path';\nexport * from './render/jsx';\n\nexport const version = \"0.22.1\";\n/**\n * @namespace VTable\n */\nexport {\n /**\n * Types\n * @namespace VTable.TYPES\n */\n TYPES,\n core,\n ListTable,\n ListTableConstructorOptions,\n PivotTable,\n PivotTableConstructorOptions,\n PivotChartConstructorOptions,\n PivotChart,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n ColumnsDefine,\n ColumnDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType,\n themes,\n data,\n MousePointerCellEvent,\n getIcons,\n clearGlobal,\n //plugin registers\n register,\n /**\n * 暂不推荐使用\n */\n DataStatistics,\n CustomLayout,\n updateCell,\n renderChart,\n graphicUtil,\n setCustomAlphabetCharSet,\n restoreMeasureText\n};\n\n/** @private */\nfunction getIcons(): {\n [key: string]: TYPES.ColumnIconOption;\n} {\n return icons.get();\n}\n/** 清理内部的全局变量 如注册的icon theme等 以及共享的header column类实例 */\nfunction clearGlobal() {\n register.clearAll();\n // headers.type.clearGlobal();\n // columns.type.clearGlobal();\n}\nTYPES.AggregationType;\n"]}
|
|
@@ -1054,7 +1054,7 @@ class PivotHeaderLayoutMap {
|
|
|
1054
1054
|
const dimension = rowArr[j];
|
|
1055
1055
|
if (!(0, vutils_1.isValid)(rowDimension.indicatorKey) && dimension.dimensionKey === rowDimension.dimensionKey && dimension.value === rowDimension.value || (0,
|
|
1056
1056
|
vutils_1.isValid)(rowDimension.indicatorKey) && dimension.indicatorKey === rowDimension.indicatorKey && (!rowDimension.value || dimension.value === rowDimension.value)) {
|
|
1057
|
-
rowArr = dimension.children, needLowestLevel && !rowArr
|
|
1057
|
+
rowArr = dimension.children, (!needLowestLevel || rowArr && !rowArr.some((row => "axis" === row.dimensionKey))) && needLowestLevel || (rowDimensionFinded = dimension);
|
|
1058
1058
|
break;
|
|
1059
1059
|
}
|
|
1060
1060
|
}
|