@visactor/vtable 1.19.1 → 1.19.3-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/ListTable-all.js +5 -5
- package/cjs/ListTable-all.js.map +1 -1
- package/cjs/ListTable.d.ts +4 -1
- package/cjs/ListTable.js +40 -1
- package/cjs/ListTable.js.map +1 -1
- package/cjs/PivotChart.js +4 -4
- package/cjs/PivotChart.js.map +1 -1
- package/cjs/PivotTable-all.js +4 -4
- package/cjs/PivotTable-all.js.map +1 -1
- package/cjs/PivotTable.d.ts +4 -0
- package/cjs/PivotTable.js +44 -0
- package/cjs/PivotTable.js.map +1 -1
- package/cjs/components/index.d.ts +1 -0
- package/cjs/components/index.js +8 -2
- package/cjs/components/index.js.map +1 -1
- package/cjs/core/BaseTable.js +1 -1
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/record-helper.d.ts +1 -1
- package/cjs/core/record-helper.js +99 -65
- package/cjs/core/record-helper.js.map +1 -1
- package/cjs/data/DataSource.d.ts +3 -0
- package/cjs/data/DataSource.js +34 -5
- package/cjs/data/DataSource.js.map +1 -1
- package/cjs/dataset/dataset.d.ts +1 -0
- package/cjs/dataset/dataset.js +66 -2
- package/cjs/dataset/dataset.js.map +1 -1
- package/cjs/edit/edit-manager.js +8 -5
- package/cjs/edit/edit-manager.js.map +1 -1
- package/cjs/event/listener/container-dom.js +32 -30
- package/cjs/event/listener/container-dom.js.map +1 -1
- package/cjs/event/listener/table-group.js +3 -2
- package/cjs/event/listener/table-group.js.map +1 -1
- package/cjs/index.d.ts +2 -1
- package/cjs/index.js +11 -2
- package/cjs/index.js.map +1 -1
- package/cjs/layout/pivot-header-layout.d.ts +7 -0
- package/cjs/layout/pivot-header-layout.js +92 -7
- package/cjs/layout/pivot-header-layout.js.map +1 -1
- package/cjs/layout/simple-header-layout.d.ts +2 -0
- package/cjs/layout/simple-header-layout.js +25 -9
- package/cjs/layout/simple-header-layout.js.map +1 -1
- package/cjs/layout/tree-helper.d.ts +2 -0
- package/cjs/layout/tree-helper.js +9 -0
- package/cjs/layout/tree-helper.js.map +1 -1
- package/cjs/scenegraph/graphic/icon.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-helper.js +3 -3
- package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/cjs/scenegraph/group-creater/column-helper.js +1 -1
- package/cjs/scenegraph/group-creater/column-helper.js.map +1 -1
- package/cjs/scenegraph/layout/compute-col-width.js +11 -1
- package/cjs/scenegraph/layout/compute-col-width.js.map +1 -1
- package/cjs/state/state.d.ts +2 -0
- package/cjs/state/state.js +16 -4
- package/cjs/state/state.js.map +1 -1
- package/cjs/ts-types/dataset/aggregation.d.ts +8 -6
- package/cjs/ts-types/dataset/aggregation.js +109 -54
- package/cjs/ts-types/dataset/aggregation.js.map +1 -1
- package/cjs/ts-types/events.d.ts +1 -0
- package/cjs/ts-types/events.js.map +1 -1
- package/cjs/ts-types/list-table/define/basic-define.d.ts +1 -0
- package/cjs/ts-types/list-table/define/basic-define.js.map +1 -1
- package/cjs/ts-types/new-data-set.d.ts +1 -0
- package/cjs/ts-types/new-data-set.js.map +1 -1
- package/cjs/ts-types/table-engine.d.ts +2 -1
- package/cjs/ts-types/table-engine.js.map +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +4255 -280
- package/dist/vtable.min.js +2 -2
- package/es/ListTable-all.js +4 -4
- package/es/ListTable-all.js.map +1 -1
- package/es/ListTable.d.ts +4 -1
- package/es/ListTable.js +40 -1
- package/es/ListTable.js.map +1 -1
- package/es/PivotChart.js +4 -4
- package/es/PivotChart.js.map +1 -1
- package/es/PivotTable-all.js +3 -3
- package/es/PivotTable-all.js.map +1 -1
- package/es/PivotTable.d.ts +4 -0
- package/es/PivotTable.js +44 -0
- package/es/PivotTable.js.map +1 -1
- package/es/components/index.d.ts +1 -0
- package/es/components/index.js +6 -0
- package/es/components/index.js.map +1 -1
- package/es/core/BaseTable.js +1 -1
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/record-helper.d.ts +1 -1
- package/es/core/record-helper.js +99 -65
- package/es/core/record-helper.js.map +1 -1
- package/es/data/DataSource.d.ts +3 -0
- package/es/data/DataSource.js +34 -5
- package/es/data/DataSource.js.map +1 -1
- package/es/dataset/dataset.d.ts +1 -0
- package/es/dataset/dataset.js +66 -2
- package/es/dataset/dataset.js.map +1 -1
- package/es/edit/edit-manager.js +8 -5
- package/es/edit/edit-manager.js.map +1 -1
- package/es/event/listener/container-dom.js +32 -30
- package/es/event/listener/container-dom.js.map +1 -1
- package/es/event/listener/table-group.js +2 -2
- package/es/event/listener/table-group.js.map +1 -1
- package/es/index.d.ts +2 -1
- package/es/index.js +3 -1
- package/es/index.js.map +1 -1
- package/es/layout/pivot-header-layout.d.ts +7 -0
- package/es/layout/pivot-header-layout.js +92 -7
- package/es/layout/pivot-header-layout.js.map +1 -1
- package/es/layout/simple-header-layout.d.ts +2 -0
- package/es/layout/simple-header-layout.js +25 -9
- package/es/layout/simple-header-layout.js.map +1 -1
- package/es/layout/tree-helper.d.ts +2 -0
- package/es/layout/tree-helper.js +9 -0
- package/es/layout/tree-helper.js.map +1 -1
- package/es/scenegraph/graphic/icon.js.map +1 -1
- package/es/scenegraph/group-creater/cell-helper.js +3 -3
- package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/es/scenegraph/group-creater/column-helper.js +1 -1
- package/es/scenegraph/group-creater/column-helper.js.map +1 -1
- package/es/scenegraph/layout/compute-col-width.js +11 -1
- package/es/scenegraph/layout/compute-col-width.js.map +1 -1
- package/es/state/state.d.ts +2 -0
- package/es/state/state.js +16 -4
- package/es/state/state.js.map +1 -1
- package/es/ts-types/dataset/aggregation.d.ts +8 -6
- package/es/ts-types/dataset/aggregation.js +109 -54
- package/es/ts-types/dataset/aggregation.js.map +1 -1
- package/es/ts-types/events.d.ts +1 -0
- package/es/ts-types/events.js.map +1 -1
- package/es/ts-types/list-table/define/basic-define.d.ts +1 -0
- package/es/ts-types/list-table/define/basic-define.js.map +1 -1
- package/es/ts-types/new-data-set.d.ts +1 -0
- package/es/ts-types/new-data-set.js.map +1 -1
- package/es/ts-types/table-engine.d.ts +2 -1
- package/es/ts-types/table-engine.js.map +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts-types/dataset/aggregation.ts"],"names":[],"mappings":"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","file":"aggregation.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport type { SortOrder } from '..';\nimport { AggregationType, SortType } from '..';\nimport type { BaseTableAPI } from '../base-table';\n\nexport const registeredAggregators: {\n [key: string]: {\n new (args: {\n key?: string;\n field: string | string[];\n aggregationFun?: any;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n calculateFun?: any;\n dependAggregators?: any;\n dependIndicatorKeys?: string[];\n }): Aggregator;\n };\n} = {};\n\nexport interface IAggregator {\n records: any[];\n value: () => any;\n push: (record: any) => void;\n deleteRecord: (record: any) => void;\n updateRecord: (oldRecord: any, newRecord: any) => void;\n recalculate: () => any;\n formatValue?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n formatFun?: () => any;\n clearCacheValue: () => any;\n reset: () => void;\n}\nexport abstract class Aggregator implements IAggregator {\n isAggregator?: boolean = true;\n isRecord?: boolean = true; //是否需要维护records 将数据源都记录下来\n records: any[] = [];\n type?: string;\n key: string;\n field?: string | string[];\n formatFun?: any;\n _formatedValue?: any;\n\n constructor(config: { key: string; field: string | string[]; formatFun?: any; isRecord?: boolean }) {\n this.key = config.key;\n this.field = config.field;\n this.formatFun = config.formatFun;\n this.isRecord = config.isRecord ?? this.isRecord;\n }\n abstract push(record: any): void;\n abstract deleteRecord(record: any): void;\n abstract updateRecord(oldRecord: any, newRecord: any): void;\n abstract value(): any;\n abstract recalculate(): any;\n clearCacheValue() {\n this._formatedValue = undefined;\n }\n formatValue(col?: number, row?: number, table?: BaseTableAPI) {\n if (!this._formatedValue) {\n if (this.formatFun) {\n this._formatedValue = this.formatFun(this.value(), col, row, table);\n } else {\n this._formatedValue = this.value();\n }\n }\n return this._formatedValue;\n }\n reset() {\n this.records = [];\n this.clearCacheValue();\n }\n}\nexport class RecordAggregator extends Aggregator {\n type: string = AggregationType.RECORD;\n isRecord?: boolean = true;\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.records;\n }\n reset() {\n this.records = [];\n }\n recalculate() {\n // do nothing\n }\n}\n\nexport class NoneAggregator extends Aggregator {\n type: string = AggregationType.NONE; //仅获取其中一条数据(最新push的一条) 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n fieldValue?: any;\n push(record: any): void {\n if (record) {\n if (this.isRecord) {\n this.records = [record];\n }\n if (this.field) {\n this.fieldValue = record[this.field];\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.fieldValue;\n }\n reset() {\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class CustomAggregator extends Aggregator {\n type: string = AggregationType.CUSTOM;\n isRecord?: boolean = true;\n declare field?: string;\n aggregationFun?: Function;\n values: (string | number)[] = [];\n fieldValue?: any;\n constructor(config: { key: string; field: string; formatFun?: any; isRecord?: boolean; aggregationFun?: Function }) {\n super(config);\n this.aggregationFun = config.aggregationFun;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (this.field) {\n this.values.push(record[this.field]);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n this.clearCacheValue();\n }\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n }\n this.clearCacheValue();\n }\n value() {\n if (!this.fieldValue) {\n this.fieldValue = this.aggregationFun?.(this.values, this.records, this.field);\n }\n return this.fieldValue;\n }\n reset() {\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n this.fieldValue = undefined;\n this._formatedValue = undefined;\n // do nothing\n }\n}\n/** 透视表计算字段逻辑使用 */\nexport class RecalculateAggregator extends Aggregator {\n type: string = AggregationType.RECALCULATE;\n isRecord?: boolean = true;\n declare field?: string;\n calculateFun: Function;\n fieldValue?: any;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n constructor(config: {\n key: string;\n field: string;\n formatFun: any;\n isRecord: boolean;\n calculateFun: Function;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n }) {\n super(config);\n this.calculateFun = config.calculateFun;\n this.dependAggregators = config.dependAggregators;\n this.dependIndicatorKeys = config.dependIndicatorKeys;\n }\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n if (!this.fieldValue) {\n const aggregatorValue = _getDependAggregatorValues(this.dependAggregators, this.dependIndicatorKeys);\n this.fieldValue = this.calculateFun?.(aggregatorValue, this.records, this.field);\n }\n return this.fieldValue;\n }\n reset() {\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class SumAggregator extends Aggregator {\n type: string = AggregationType.SUM;\n sum = 0;\n positiveSum = 0;\n nagetiveSum = 0;\n declare field?: string;\n needSplitPositiveAndNegativeForSum?: boolean = false;\n constructor(config: {\n key: string;\n field: string;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n }) {\n super(config);\n this.needSplitPositiveAndNegativeForSum = config.needSplitPositiveAndNegative ?? false;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n const value = record.value();\n this.sum -= value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum -= value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator) {\n const oldValue = oldRecord.value();\n const newValue = newRecord.value();\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n const oldValue = parseFloat(oldRecord[this.field]);\n const newValue = parseFloat(newRecord[this.field]);\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.sum : undefined;\n }\n positiveValue() {\n return this.positiveSum;\n }\n negativeValue() {\n return this.nagetiveSum;\n }\n reset() {\n super.reset();\n this.records = [];\n this.sum = 0;\n }\n recalculate() {\n this.sum = 0;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n }\n }\n}\n\nexport class CountAggregator extends Aggregator {\n type: string = AggregationType.COUNT;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n this.count -= record.value();\n } else {\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator) {\n this.count += newRecord.value() - oldRecord.value();\n } else {\n //this.count++;\n }\n }\n }\n value() {\n return this.count;\n }\n reset() {\n this.records = [];\n this.count = 0;\n }\n recalculate() {\n this.count = 0;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n }\n }\n}\nexport class AvgAggregator extends Aggregator {\n type: string = AggregationType.AVG;\n sum = 0;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && record.type === AggregationType.AVG) {\n this.sum -= record.sum;\n this.count -= record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum -= parseFloat(record[this.field]);\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && oldRecord.type === AggregationType.AVG) {\n this.sum += newRecord.sum - oldRecord.sum;\n this.count += newRecord.count - oldRecord.count;\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n this.sum += parseFloat(newRecord[this.field]) - parseFloat(oldRecord[this.field]);\n // this.count++;\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.sum / this.count : undefined;\n }\n reset() {\n this.records = [];\n this.sum = 0;\n this.count = 0;\n }\n recalculate() {\n this.sum = 0;\n this.count = 0;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n }\n }\n}\nexport class MaxAggregator extends Aggregator {\n type: string = AggregationType.MAX;\n max: number = Number.MIN_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.recalculate();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.max : undefined;\n }\n reset() {\n this.records = [];\n this.max = Number.MIN_SAFE_INTEGER;\n }\n recalculate() {\n this.max = Number.MIN_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n }\n }\n}\nexport class MinAggregator extends Aggregator {\n type: string = AggregationType.MIN;\n min: number = Number.MAX_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.recalculate();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.min : undefined;\n }\n reset() {\n this.records = [];\n this.min = Number.MAX_SAFE_INTEGER;\n }\n recalculate() {\n this.min = Number.MAX_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n }\n }\n}\nexport function indicatorSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nexport function typeSort(a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh') * factor;\n }\n if (a) {\n return 1 * factor;\n }\n return -1 * factor;\n}\nexport function naturalSort(as: any, bs: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n\n const rx = /(\\d+)|(\\D+)/g;\n const rd = /\\d/;\n const rz = /^0/;\n let a;\n let a1;\n let b;\n let b1;\n let nas = 0;\n let nbs = 0;\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (bs !== null && as === null) {\n return -1 * factor;\n }\n if (as !== null && bs === null) {\n return 1 * factor;\n }\n if (typeof as === 'number' && isNaN(as)) {\n return -1 * factor;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1 * factor;\n }\n nas = +as;\n nbs = +bs;\n if (nas < nbs) {\n return -1 * factor;\n }\n if (nas > nbs) {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1 * factor;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1 * factor;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1 * factor;\n }\n a = String(as);\n b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!(rd.test(a) && rd.test(b))) {\n return (a > b ? 1 : -1) * factor;\n }\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n a1 = a.shift();\n b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return (<any>a1.replace(rz, '.0') - <any>b1.replace(rz, '.0')) * factor;\n }\n return (a1 > b1 ? 1 : -1) * factor;\n }\n }\n return (a.length - b.length) * factor;\n}\nexport function sortBy(order: string[]) {\n let x;\n let i;\n const mapping: any = {};\n const lowercase_mapping: any = {};\n // for (i in order) {\n for (let i = 0; i < order.length; i++) {\n x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n lowercase_mapping[x.toLowerCase()] = i;\n }\n }\n return function (a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n let comparison;\n if (mapping[a] !== null && mapping[a] !== undefined && mapping[b] !== null && mapping[b] !== undefined) {\n comparison = mapping[a] - mapping[b];\n } else if (mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n } else if (\n lowercase_mapping[a] !== null &&\n mapping[a] !== undefined &&\n lowercase_mapping[b] !== null &&\n mapping[b] !== undefined\n ) {\n comparison = lowercase_mapping[a] - lowercase_mapping[b];\n } else if (\n lowercase_mapping[a] === null ||\n mapping[a] === undefined ||\n lowercase_mapping[b] === null ||\n mapping[b] === undefined\n ) {\n comparison = 0;\n } else if (lowercase_mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (lowercase_mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n }\n if (isValid(comparison)) {\n return comparison * factor;\n }\n\n return naturalSort(a, b, sortType);\n };\n}\n\nfunction _getDependAggregatorValues(aggregators: Aggregator[], dependIndicatorKeys: string[]) {\n const dependAggregatorValues: any = {};\n for (let m = 0; m < dependIndicatorKeys?.length; m++) {\n const aggrator = aggregators.find(aggrator => aggrator?.key === dependIndicatorKeys[m]);\n if (aggrator) {\n dependAggregatorValues[aggrator.key] = aggrator?.value();\n }\n }\n return dependAggregatorValues;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ts-types/dataset/aggregation.ts"],"names":[],"mappings":"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","file":"aggregation.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport type { SortOrder } from '..';\nimport { AggregationType, SortType } from '..';\nimport type { BaseTableAPI } from '../base-table';\n\nexport const registeredAggregators: {\n [key: string]: {\n new (args: {\n key?: string;\n field: string | string[];\n aggregationFun?: any;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n calculateFun?: any;\n dependAggregators?: any;\n dependIndicatorKeys?: string[];\n }): Aggregator;\n };\n} = {};\n\nexport interface IAggregator {\n records: any[];\n value: () => any;\n push: (record: any) => void;\n deleteRecord: (record: any) => void;\n updateRecord: (oldRecord: any, newRecord: any) => void;\n recalculate: () => any;\n formatValue?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n formatFun?: () => any;\n clearCacheValue: () => any;\n reset: () => void;\n}\nexport abstract class Aggregator implements IAggregator {\n isAggregator?: boolean = true;\n isRecord?: boolean = true; //是否需要维护records 将数据源都记录下来\n records: any[] = [];\n type?: string;\n key: string;\n field?: string | string[];\n formatFun?: any;\n changedValue?: any;\n children?: Aggregator[] = [];\n _formatedValue?: any;\n\n constructor(config: { key: string; field: string | string[]; formatFun?: any; isRecord?: boolean }) {\n this.key = config.key;\n this.field = config.field;\n this.formatFun = config.formatFun;\n this.isRecord = config.isRecord ?? this.isRecord;\n }\n abstract push(record: any): void;\n abstract deleteRecord(record: any): void;\n abstract updateRecord(oldRecord: any, newRecord: any): void;\n abstract value(): any;\n abstract recalculate(): any;\n clearCacheValue() {\n this._formatedValue = undefined;\n }\n formatValue(col?: number, row?: number, table?: BaseTableAPI) {\n if (!this._formatedValue) {\n if (this.formatFun) {\n this._formatedValue = this.formatFun(this.value(), col, row, table);\n } else {\n this._formatedValue = this.value();\n }\n }\n return this._formatedValue;\n }\n reset() {\n this.records = [];\n this.changedValue = undefined;\n this.children = [];\n this.clearCacheValue();\n }\n}\nexport class RecordAggregator extends Aggregator {\n type: string = AggregationType.RECORD;\n isRecord?: boolean = true;\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n\n if (record.isAggregator && this.children) {\n this.children.push(record);\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? this.records;\n }\n reset() {\n this.children = [];\n this.changedValue = undefined;\n this.records = [];\n }\n recalculate() {\n // do nothing\n }\n}\n\nexport class NoneAggregator extends Aggregator {\n type: string = AggregationType.NONE; //仅获取其中一条数据(最新push的一条) 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n fieldValue?: any;\n push(record: any): void {\n if (record) {\n if (this.isRecord) {\n this.records = [record];\n }\n if (record.isAggregator && this.children) {\n this.children = [record];\n }\n if (this.field) {\n this.fieldValue = record[this.field];\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? this.fieldValue;\n }\n reset() {\n this.children = [];\n this.changedValue = undefined;\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class CustomAggregator extends Aggregator {\n type: string = AggregationType.CUSTOM;\n isRecord?: boolean = true;\n declare field?: string;\n aggregationFun?: Function;\n values: (string | number)[] = [];\n fieldValue?: any;\n constructor(config: { key: string; field: string; formatFun?: any; isRecord?: boolean; aggregationFun?: Function }) {\n super(config);\n this.aggregationFun = config.aggregationFun;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n\n if (record.isAggregator && this.children) {\n this.children.push(record);\n }\n if (this.field) {\n this.values.push(record[this.field]);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n this.clearCacheValue();\n }\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n }\n this.clearCacheValue();\n }\n value() {\n if (!this.fieldValue) {\n this.fieldValue = this.aggregationFun?.(this.values, this.records, this.field);\n }\n return this.changedValue ?? this.fieldValue;\n }\n reset() {\n this.records = [];\n this.children = [];\n this.changedValue = undefined;\n this.fieldValue = undefined;\n }\n recalculate() {\n this.fieldValue = undefined;\n this._formatedValue = undefined;\n // do nothing\n }\n}\n/** 透视表计算字段逻辑使用 */\nexport class RecalculateAggregator extends Aggregator {\n type: string = AggregationType.RECALCULATE;\n isRecord?: boolean = true;\n declare field?: string;\n calculateFun: Function;\n fieldValue?: any;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n constructor(config: {\n key: string;\n field: string;\n formatFun: any;\n isRecord: boolean;\n calculateFun: Function;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n }) {\n super(config);\n this.calculateFun = config.calculateFun;\n this.dependAggregators = config.dependAggregators;\n this.dependIndicatorKeys = config.dependIndicatorKeys;\n }\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (this.children && record.isAggregator) {\n this.children.push(record);\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n if (!this.fieldValue) {\n const aggregatorValue = _getDependAggregatorValues(this.dependAggregators, this.dependIndicatorKeys);\n this.fieldValue = this.calculateFun?.(aggregatorValue, this.records, this.field);\n }\n return this.changedValue ?? this.fieldValue;\n }\n reset() {\n this.records = [];\n this.children = [];\n this.changedValue = undefined;\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class SumAggregator extends Aggregator {\n type: string = AggregationType.SUM;\n sum = 0;\n positiveSum = 0;\n nagetiveSum = 0;\n declare field?: string;\n needSplitPositiveAndNegativeForSum?: boolean = false;\n constructor(config: {\n key: string;\n field: string;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n }) {\n super(config);\n this.needSplitPositiveAndNegativeForSum = config.needSplitPositiveAndNegative ?? false;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator && this.children) {\n this.children.push(record);\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n const value = record.value();\n this.sum -= value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum -= value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && this.children) {\n const oldValue = oldRecord.value();\n this.children = this.children.filter(item => item !== oldRecord);\n const newValue = newRecord.value();\n this.children.push(newRecord);\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n const oldValue = parseFloat(oldRecord[this.field]);\n const newValue = parseFloat(newRecord[this.field]);\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.sum : undefined);\n }\n positiveValue() {\n return this.positiveSum;\n }\n negativeValue() {\n return this.nagetiveSum;\n }\n reset() {\n super.reset();\n this.records = [];\n this.sum = 0;\n }\n recalculate() {\n this.sum = 0;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const value = child.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n }\n }\n}\n\nexport class CountAggregator extends Aggregator {\n type: string = AggregationType.COUNT;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children.push(record);\n }\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n this.count -= record.value();\n } else {\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator) {\n this.count += newRecord.value() - oldRecord.value();\n } else {\n //this.count++;\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n }\n }\n value() {\n return this.changedValue ?? this.count;\n }\n reset() {\n this.changedValue = undefined;\n this.children = [];\n this.records = [];\n this.count = 0;\n }\n recalculate() {\n this.count = 0;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const value = child.value();\n this.count += value ?? 0;\n } else {\n this.count++;\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n }\n }\n}\nexport class AvgAggregator extends Aggregator {\n type: string = AggregationType.AVG;\n sum = 0;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator && record.type === AggregationType.AVG) {\n if (this.children) {\n this.children.push(record);\n }\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && record.type === AggregationType.AVG) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n this.sum -= record.sum;\n this.count -= record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum -= parseFloat(record[this.field]);\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && oldRecord.type === AggregationType.AVG) {\n if (this.children && newRecord.isAggregator) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.sum += newRecord.sum - oldRecord.sum;\n this.count += newRecord.count - oldRecord.count;\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n this.sum += parseFloat(newRecord[this.field]) - parseFloat(oldRecord[this.field]);\n // this.count++;\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.sum / this.count : undefined);\n }\n reset() {\n this.changedValue = undefined;\n this.children = [];\n this.records = [];\n this.sum = 0;\n this.count = 0;\n }\n recalculate() {\n this.sum = 0;\n this.count = 0;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator && child.type === AggregationType.AVG) {\n const childValue = child.value();\n this.sum += childValue * (child as AvgAggregator).count;\n this.count += (child as AvgAggregator).count;\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n }\n }\n}\nexport class MaxAggregator extends Aggregator {\n type: string = AggregationType.MAX;\n max: number = Number.MIN_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children.push(record);\n }\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator) {\n if (this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n }\n this.recalculate();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.max : undefined);\n }\n reset() {\n this.records = [];\n this.changedValue = undefined;\n this.children = [];\n this.max = Number.MIN_SAFE_INTEGER;\n }\n recalculate() {\n this.max = Number.MIN_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const childValue = child.value();\n this.max = Math.max(this.max, childValue);\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n }\n }\n}\nexport class MinAggregator extends Aggregator {\n type: string = AggregationType.MIN;\n min: number = Number.MAX_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children.push(record);\n }\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator) {\n if (this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n }\n this.recalculate();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.min : undefined);\n }\n reset() {\n this.records = [];\n this.changedValue = undefined;\n this.children = [];\n this.min = Number.MAX_SAFE_INTEGER;\n }\n recalculate() {\n this.min = Number.MAX_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const childValue = child.value();\n this.min = Math.min(this.min, childValue);\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n }\n }\n}\nexport function indicatorSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nexport function typeSort(a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh') * factor;\n }\n if (a) {\n return 1 * factor;\n }\n return -1 * factor;\n}\nexport function naturalSort(as: any, bs: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n\n const rx = /(\\d+)|(\\D+)/g;\n const rd = /\\d/;\n const rz = /^0/;\n let a;\n let a1;\n let b;\n let b1;\n let nas = 0;\n let nbs = 0;\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (bs !== null && as === null) {\n return -1 * factor;\n }\n if (as !== null && bs === null) {\n return 1 * factor;\n }\n if (typeof as === 'number' && isNaN(as)) {\n return -1 * factor;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1 * factor;\n }\n nas = +as;\n nbs = +bs;\n if (nas < nbs) {\n return -1 * factor;\n }\n if (nas > nbs) {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1 * factor;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1 * factor;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1 * factor;\n }\n a = String(as);\n b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!(rd.test(a) && rd.test(b))) {\n return (a > b ? 1 : -1) * factor;\n }\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n a1 = a.shift();\n b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return (<any>a1.replace(rz, '.0') - <any>b1.replace(rz, '.0')) * factor;\n }\n return (a1 > b1 ? 1 : -1) * factor;\n }\n }\n return (a.length - b.length) * factor;\n}\nexport function sortBy(order: string[]) {\n let x;\n let i;\n const mapping: any = {};\n const lowercase_mapping: any = {};\n // for (i in order) {\n for (let i = 0; i < order.length; i++) {\n x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n lowercase_mapping[x.toLowerCase()] = i;\n }\n }\n return function (a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n let comparison;\n if (mapping[a] !== null && mapping[a] !== undefined && mapping[b] !== null && mapping[b] !== undefined) {\n comparison = mapping[a] - mapping[b];\n } else if (mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n } else if (\n lowercase_mapping[a] !== null &&\n mapping[a] !== undefined &&\n lowercase_mapping[b] !== null &&\n mapping[b] !== undefined\n ) {\n comparison = lowercase_mapping[a] - lowercase_mapping[b];\n } else if (\n lowercase_mapping[a] === null ||\n mapping[a] === undefined ||\n lowercase_mapping[b] === null ||\n mapping[b] === undefined\n ) {\n comparison = 0;\n } else if (lowercase_mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (lowercase_mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n }\n if (isValid(comparison)) {\n return comparison * factor;\n }\n\n return naturalSort(a, b, sortType);\n };\n}\n\nfunction _getDependAggregatorValues(aggregators: Aggregator[], dependIndicatorKeys: string[]) {\n const dependAggregatorValues: any = {};\n for (let m = 0; m < dependIndicatorKeys?.length; m++) {\n const aggrator = aggregators.find(aggrator => aggrator?.key === dependIndicatorKeys[m]);\n if (aggrator) {\n dependAggregatorValues[aggrator.key] = aggrator?.value();\n }\n }\n return dependAggregatorValues;\n}\n"]}
|
package/es/ts-types/events.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts-types/events.ts"],"names":[],"mappings":"","file":"events.js","sourcesContent":["import type {\n CellAddress,\n CellRange,\n CellLocation,\n FieldDef,\n CellAddressWithBound,\n ListTableConstructorOptions,\n PivotTableConstructorOptions\n} from './table-engine';\nimport type { DropDownMenuEventArgs, MenuListItem, PivotInfo } from './menu';\n\nimport type { IDimensionInfo, MergeCellInfo, RectProps, SortOrder } from './common';\nimport type { IconFuncTypeEnum, CellInfo, HierarchyState } from '.';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport type { FederatedPointerEvent, IEventTarget } from './../vrender';\nimport type { BaseTableConstructorOptions } from './base-table';\n\nexport type KeyboardEventListener = (e: KeyboardEvent) => void;\nexport type TableEventListener<TYPE extends keyof TableEventHandlersEventArgumentMap> = (\n args: TableEventHandlersEventArgumentMap[TYPE]\n) => TableEventHandlersReturnMap[TYPE]; //AnyFunction;\nexport type EventListenerId = number;\n\nexport type SelectedCellEvent = CellAddress & {\n ranges: CellRange[];\n};\n\n// export type MouseCellEvent = CellAddress & {\n// event: MouseEvent | PointerEvent | TouchEvent;\n// };\n\nexport type MenuEvent = CellAddress & {\n dropDownMenu: MenuListItem[];\n pivotInfo: PivotInfo;\n};\n\nexport type TouchCellEvent = CellAddress & {\n event: TouchEvent;\n};\n\nexport type KeydownEvent = {\n keyCode: number;\n code: string;\n event: KeyboardEvent;\n stopCellMoving?: () => void;\n scaleRatio?: number;\n};\n\nexport type MousePointerCellEvent = CellAddressWithBound &\n CellInfo & {\n scaleRatio?: number;\n targetIcon?: { name: string; position: RectProps; funcType: string };\n event?: MouseEvent | PointerEvent | TouchEvent;\n federatedEvent?: FederatedPointerEvent;\n target: IEventTarget | undefined;\n\n mergeCellInfo?: MergeCellInfo;\n };\n// 多单元格的事件传出参数 需要将当前鼠标处的单元格的信息FocusedCellInfo也带着\nexport type MousePointerMultiCellEvent = MousePointerCellEvent & {\n cells: CellInfo[][];\n // menuKey?: string;\n};\n\nexport type MousePointerSparklineEvent = MousePointerCellEvent & {\n sparkline: {\n pointData: any;\n };\n};\n\nexport interface TableEventHandlersEventArgumentMap {\n selected_cell: SelectedCellEvent;\n selected_clear: {};\n click_cell: MousePointerCellEvent;\n dblclick_cell: MousePointerCellEvent;\n mouseenter_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mouseleave_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousedown_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousemove_table: MousePointerCellEvent;\n mouseenter_cell: MousePointerCellEvent;\n mouseleave_cell: MousePointerCellEvent;\n mousemove_cell: MousePointerCellEvent;\n mousedown_cell: MousePointerCellEvent;\n mouseup_cell: MousePointerCellEvent;\n contextmenu_cell: MousePointerMultiCellEvent;\n before_keydown: KeydownEvent;\n keydown: KeydownEvent;\n scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n can_scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n scroll_vertical_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n scroll_horizontal_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n resize_column: { col: number; colWidth: number };\n resize_column_end: { col: number; colWidths: number[] };\n resize_row: { row: number; rowHeight: number };\n resize_row_end: { row: number; rowHeight: number };\n change_header_position: { source: CellAddress; target: CellAddress; event: Event };\n change_header_position_start: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n };\n changing_header_position: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n };\n change_header_position_fail: { source: CellAddress; target: CellAddress; event: Event };\n sort_click: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n after_sort: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n freeze_click: { col: number; row: number; fields: FieldDef[]; colCount: number };\n dropdown_menu_click: DropDownMenuEventArgs;\n\n mouseover_chart_symbol: MousePointerSparklineEvent;\n\n drag_select_end: MousePointerMultiCellEvent;\n copy_data: { cellRange: CellRange[]; copyData: string };\n drillmenu_click: DrillMenuEventInfo;\n\n dropdown_icon_click: CellAddress & { event: Event };\n dropdown_menu_clear: CellAddress;\n\n show_menu: {\n x: number;\n y: number;\n col: number;\n row: number;\n type: 'dropDown' | 'contextmenu' | 'custom';\n };\n hide_menu: [];\n icon_click: {\n name: string;\n col: number;\n row: number;\n x: number;\n y: number;\n funcType?: IconFuncTypeEnum | string;\n icon: Icon;\n event: Event;\n };\n\n pivot_sort_click: {\n col: number;\n row: number;\n order: SortOrder;\n dimensionInfo: IDimensionInfo[];\n cellLocation: CellLocation;\n event: Event;\n };\n tree_hierarchy_state_change: {\n col: number;\n row: number;\n hierarchyState: HierarchyState;\n dimensionInfo?: IDimensionInfo[];\n /**整条数据-原始数据 */\n originData?: any;\n cellLocation?: CellLocation;\n };\n vchart_event_type: {\n eventName: string;\n col: number;\n row: number;\n chartEventArguments: any;\n };\n //datasource部分的事件\n change_order: [];\n source_length_update: number;\n\n legend_item_click: { model: any; value: any; event: PointerEvent };\n legend_item_hover: { model: any; value: any; event: PointerEvent };\n legend_item_unHover: { model: any; value: any; event: PointerEvent };\n legend_change: { model: any; value: any; event: PointerEvent };\n\n mouseenter_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n mouseleave_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n\n checkbox_state_change: MousePointerCellEvent & { checked: boolean };\n radio_state_change: MousePointerCellEvent & { radioIndexInCell: number | undefined };\n switch_state_change: MousePointerCellEvent & { checked: boolean };\n before_init: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_set_size: { width: number; height: number };\n after_render: null;\n initialized: null;\n\n change_cell_value: {\n col: number;\n row: number;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n };\n\n mousedown_fill_handle: {};\n drag_fill_handle_end: { direction?: 'top' | 'bottom' | 'left' | 'right' };\n dblclick_fill_handle: {};\n\n empty_tip_click: {};\n empty_tip_dblclick: {};\n\n button_click: {\n col: number;\n row: number;\n event: Event;\n };\n before_cache_chart_image: { chartInstance: any };\n pasted_data: {\n col: number;\n row: number;\n pasteData: (string | number)[][];\n changedCellResults: boolean[][];\n };\n}\nexport interface DrillMenuEventInfo {\n dimensionKey: string | number;\n title: string;\n drillDown: boolean;\n drillUp: boolean;\n col: number;\n row: number;\n event: Event;\n}\nexport interface TableEventHandlersReturnMap {\n selected_cell: void;\n selected_clear: void;\n click_cell: void;\n dblclick_cell: void;\n mouseenter_table: void;\n mouseleave_table: void;\n mousedown_table: void;\n mousemove_table: void;\n mouseenter_cell: void;\n mouseleave_cell: void;\n // mouseover_cell: void;\n mouseout_cell: void;\n mousemove_cell: void;\n mousedown_cell: boolean;\n mouseup_cell: void;\n contextmenu_cell: void;\n before_keydown: void;\n keydown: void;\n scroll: void;\n can_scroll: void | boolean;\n focus_table: void;\n blur_table: void;\n resize_column: void;\n resize_column_end: void;\n resize_row: void;\n resize_row_end: void;\n change_header_position: void;\n change_header_position_start: void;\n changing_header_position: void;\n change_header_position_fail: void;\n sort_click: boolean;\n after_sort: void;\n freeze_click: void;\n dropdown_menu_click: void;\n\n mouseover_chart_symbol: void;\n drag_select_end: void;\n copy_data: void;\n drillmenu_click: void;\n\n dropdown_icon_click: void;\n dropdown_menu_clear: void;\n\n show_menu: void;\n hide_menu: void;\n icon_click: void;\n\n pivot_sort_click: void;\n\n tree_hierarchy_state_change: void;\n\n vchart_event_type: void;\n //datasource部分的事件\n change_order: void;\n source_length_update: void;\n legend_item_click: void;\n legend_item_hover: void;\n legend_item_unHover: void;\n legend_change: void;\n\n mouseenter_axis: void;\n mouseleave_axis: void;\n\n checkbox_state_change: void;\n radio_state_change: void;\n switch_state_change: void;\n before_init: void;\n before_set_size: void;\n after_render: void;\n initialized: void;\n\n change_cell_value: void;\n mousedown_fill_handle: void;\n drag_fill_handle_end: void;\n dblclick_fill_handle: void;\n\n scroll_vertical_end: void;\n\n scroll_horizontal_end: void;\n\n empty_tip_click: void;\n empty_tip_dblclick: void;\n\n button_click: void;\n before_cache_chart_image: void;\n pasted_data: void;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ts-types/events.ts"],"names":[],"mappings":"","file":"events.js","sourcesContent":["import type {\n CellAddress,\n CellRange,\n CellLocation,\n FieldDef,\n CellAddressWithBound,\n ListTableConstructorOptions,\n PivotTableConstructorOptions\n} from './table-engine';\nimport type { DropDownMenuEventArgs, MenuListItem, PivotInfo } from './menu';\n\nimport type { IDimensionInfo, MergeCellInfo, RectProps, SortOrder } from './common';\nimport type { IconFuncTypeEnum, CellInfo, HierarchyState } from '.';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport type { FederatedPointerEvent, IEventTarget } from './../vrender';\nimport type { BaseTableConstructorOptions } from './base-table';\n\nexport type KeyboardEventListener = (e: KeyboardEvent) => void;\nexport type TableEventListener<TYPE extends keyof TableEventHandlersEventArgumentMap> = (\n args: TableEventHandlersEventArgumentMap[TYPE]\n) => TableEventHandlersReturnMap[TYPE]; //AnyFunction;\nexport type EventListenerId = number;\n\nexport type SelectedCellEvent = CellAddress & {\n ranges: CellRange[];\n};\n\n// export type MouseCellEvent = CellAddress & {\n// event: MouseEvent | PointerEvent | TouchEvent;\n// };\n\nexport type MenuEvent = CellAddress & {\n dropDownMenu: MenuListItem[];\n pivotInfo: PivotInfo;\n};\n\nexport type TouchCellEvent = CellAddress & {\n event: TouchEvent;\n};\n\nexport type KeydownEvent = {\n keyCode: number;\n code: string;\n event: KeyboardEvent;\n stopCellMoving?: () => void;\n scaleRatio?: number;\n};\n\nexport type MousePointerCellEvent = CellAddressWithBound &\n CellInfo & {\n scaleRatio?: number;\n targetIcon?: { name: string; position: RectProps; funcType: string };\n event?: MouseEvent | PointerEvent | TouchEvent;\n federatedEvent?: FederatedPointerEvent;\n target: IEventTarget | undefined;\n\n mergeCellInfo?: MergeCellInfo;\n };\n// 多单元格的事件传出参数 需要将当前鼠标处的单元格的信息FocusedCellInfo也带着\nexport type MousePointerMultiCellEvent = MousePointerCellEvent & {\n cells: CellInfo[][];\n // menuKey?: string;\n};\n\nexport type MousePointerSparklineEvent = MousePointerCellEvent & {\n sparkline: {\n pointData: any;\n };\n};\n\nexport interface TableEventHandlersEventArgumentMap {\n selected_cell: SelectedCellEvent;\n selected_clear: {};\n click_cell: MousePointerCellEvent;\n dblclick_cell: MousePointerCellEvent;\n mouseenter_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mouseleave_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousedown_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousemove_table: MousePointerCellEvent;\n mouseenter_cell: MousePointerCellEvent;\n mouseleave_cell: MousePointerCellEvent;\n mousemove_cell: MousePointerCellEvent;\n mousedown_cell: MousePointerCellEvent;\n mouseup_cell: MousePointerCellEvent;\n contextmenu_cell: MousePointerMultiCellEvent;\n before_keydown: KeydownEvent;\n keydown: KeydownEvent;\n scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n can_scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n scroll_vertical_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n scroll_horizontal_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n resize_column: { col: number; colWidth: number };\n resize_column_end: { col: number; colWidths: number[] };\n resize_row: { row: number; rowHeight: number };\n resize_row_end: { row: number; rowHeight: number };\n change_header_position: { source: CellAddress; target: CellAddress; event: Event };\n change_header_position_start: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n };\n changing_header_position: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n };\n change_header_position_fail: { source: CellAddress; target: CellAddress; event: Event };\n sort_click: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n after_sort: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n freeze_click: { col: number; row: number; fields: FieldDef[]; colCount: number };\n dropdown_menu_click: DropDownMenuEventArgs;\n\n mouseover_chart_symbol: MousePointerSparklineEvent;\n\n drag_select_end: MousePointerMultiCellEvent;\n copy_data: { cellRange: CellRange[]; copyData: string };\n drillmenu_click: DrillMenuEventInfo;\n\n dropdown_icon_click: CellAddress & { event: Event };\n dropdown_menu_clear: CellAddress;\n\n show_menu: {\n x: number;\n y: number;\n col: number;\n row: number;\n type: 'dropDown' | 'contextmenu' | 'custom';\n };\n hide_menu: [];\n icon_click: {\n name: string;\n col: number;\n row: number;\n x: number;\n y: number;\n funcType?: IconFuncTypeEnum | string;\n icon: Icon;\n event: Event;\n };\n\n pivot_sort_click: {\n col: number;\n row: number;\n order: SortOrder;\n dimensionInfo: IDimensionInfo[];\n cellLocation: CellLocation;\n event: Event;\n };\n tree_hierarchy_state_change: {\n col: number;\n row: number;\n changeAll?: boolean;\n hierarchyState: HierarchyState;\n dimensionInfo?: IDimensionInfo[];\n /**整条数据-原始数据 */\n originData?: any;\n cellLocation?: CellLocation;\n };\n vchart_event_type: {\n eventName: string;\n col: number;\n row: number;\n chartEventArguments: any;\n };\n //datasource部分的事件\n change_order: [];\n source_length_update: number;\n\n legend_item_click: { model: any; value: any; event: PointerEvent };\n legend_item_hover: { model: any; value: any; event: PointerEvent };\n legend_item_unHover: { model: any; value: any; event: PointerEvent };\n legend_change: { model: any; value: any; event: PointerEvent };\n\n mouseenter_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n mouseleave_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n\n checkbox_state_change: MousePointerCellEvent & { checked: boolean };\n radio_state_change: MousePointerCellEvent & { radioIndexInCell: number | undefined };\n switch_state_change: MousePointerCellEvent & { checked: boolean };\n before_init: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_set_size: { width: number; height: number };\n after_render: null;\n initialized: null;\n\n change_cell_value: {\n col: number;\n row: number;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n };\n\n mousedown_fill_handle: {};\n drag_fill_handle_end: { direction?: 'top' | 'bottom' | 'left' | 'right' };\n dblclick_fill_handle: {};\n\n empty_tip_click: {};\n empty_tip_dblclick: {};\n\n button_click: {\n col: number;\n row: number;\n event: Event;\n };\n before_cache_chart_image: { chartInstance: any };\n pasted_data: {\n col: number;\n row: number;\n pasteData: (string | number)[][];\n changedCellResults: boolean[][];\n };\n}\nexport interface DrillMenuEventInfo {\n dimensionKey: string | number;\n title: string;\n drillDown: boolean;\n drillUp: boolean;\n col: number;\n row: number;\n event: Event;\n}\nexport interface TableEventHandlersReturnMap {\n selected_cell: void;\n selected_clear: void;\n click_cell: void;\n dblclick_cell: void;\n mouseenter_table: void;\n mouseleave_table: void;\n mousedown_table: void;\n mousemove_table: void;\n mouseenter_cell: void;\n mouseleave_cell: void;\n // mouseover_cell: void;\n mouseout_cell: void;\n mousemove_cell: void;\n mousedown_cell: boolean;\n mouseup_cell: void;\n contextmenu_cell: void;\n before_keydown: void;\n keydown: void;\n scroll: void;\n can_scroll: void | boolean;\n focus_table: void;\n blur_table: void;\n resize_column: void;\n resize_column_end: void;\n resize_row: void;\n resize_row_end: void;\n change_header_position: void;\n change_header_position_start: void;\n changing_header_position: void;\n change_header_position_fail: void;\n sort_click: boolean;\n after_sort: void;\n freeze_click: void;\n dropdown_menu_click: void;\n\n mouseover_chart_symbol: void;\n drag_select_end: void;\n copy_data: void;\n drillmenu_click: void;\n\n dropdown_icon_click: void;\n dropdown_menu_clear: void;\n\n show_menu: void;\n hide_menu: void;\n icon_click: void;\n\n pivot_sort_click: void;\n\n tree_hierarchy_state_change: void;\n\n vchart_event_type: void;\n //datasource部分的事件\n change_order: void;\n source_length_update: void;\n legend_item_click: void;\n legend_item_hover: void;\n legend_item_unHover: void;\n legend_change: void;\n\n mouseenter_axis: void;\n mouseleave_axis: void;\n\n checkbox_state_change: void;\n radio_state_change: void;\n switch_state_change: void;\n before_init: void;\n before_set_size: void;\n after_render: void;\n initialized: void;\n\n change_cell_value: void;\n mousedown_fill_handle: void;\n drag_fill_handle_end: void;\n dblclick_fill_handle: void;\n\n scroll_vertical_end: void;\n\n scroll_horizontal_end: void;\n\n empty_tip_click: void;\n empty_tip_dblclick: void;\n\n button_click: void;\n before_cache_chart_image: void;\n pasted_data: void;\n}\n"]}
|
|
@@ -35,6 +35,7 @@ export interface IBasicColumnBodyDefine {
|
|
|
35
35
|
width?: number | string;
|
|
36
36
|
minWidth?: number | string;
|
|
37
37
|
maxWidth?: number | string;
|
|
38
|
+
levelSpan?: number;
|
|
38
39
|
tree?: boolean;
|
|
39
40
|
icon?: string | ColumnIconOption | (string | ColumnIconOption)[] | ((args: CellInfo & {
|
|
40
41
|
table: BaseTableAPI;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts-types/list-table/define/basic-define.ts"],"names":[],"mappings":"","file":"basic-define.js","sourcesContent":["import type { BaseCellInfo, CellInfo, MergeCellOption, SortOption } from '../../common';\nimport type { ICustomRender } from '../../customElement';\nimport type { ICustomLayout } from '../../customLayout';\nimport type { FieldDef, FieldFormat, FieldKeyDef } from '../../table-engine';\nimport type { ColumnIconOption } from '../../icon';\nimport type { MenuListItem } from '../../menu';\nimport type { BaseTableAPI } from '../../base-table';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { Aggregation, CustomAggregation } from '../../new-data-set';\n\n// eslint-disable-next-line no-unused-vars\nexport interface IBasicHeaderDefine {\n // 表头的标题\n title?: string | (() => string); //支持图文混合\n /** 表头Icon配置 */\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n // | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n\n // headerStyle?: HeaderStyleOption | null;\n // style?: ColumnStyleOption | null;\n // headerType?: HeaderTypeOption | headerType.BaseHeader | null;\n /** sort排序规则 */\n sort?: SortOption;\n /** 显示sort排序icon。为了仅仅显示图标,无排序逻辑 */\n showSort?: boolean;\n /** 该列不支持hover交互行为 */\n disableHover?: boolean;\n /** 该列不支持选中 */\n disableSelect?: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);\n /** 该列表头不支持hover交互行为 */\n disableHeaderHover?: boolean;\n /** 该列表头不支持选中 */\n disableHeaderSelect?: boolean;\n /** 表头hover时的描述信息 会以tooltip形式展示出来 */\n description?: string;\n /** 下拉菜单项配置 */\n dropDownMenu?: MenuListItem[];\n /** 表头自定义渲染函数 */\n headerCustomRender?: ICustomRender;\n /** 表头自定义渲染元素定义 */\n headerCustomLayout?: ICustomLayout;\n /** 是否可以拖拽表头 */\n dragHeader?: boolean;\n /**\n * 列宽计算模式,only-header只考虑表头的内容 only-body只考虑body的内容 normal能被显示出来的所有内容\n */\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n /**\n * 是否禁用调整列宽,如果是转置表格或者是透视表的指标是行方向指定 那该配置不生效\n */\n disableColumnResize?: boolean;\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n}\n\nexport interface IBasicColumnBodyDefine {\n field: FieldDef;\n /** @deprecated 已不维护 */\n fieldKey?: FieldKeyDef;\n // 列的唯一标识\n key?: string;\n fieldFormat?: FieldFormat;\n width?: number | string;\n minWidth?: number | string;\n maxWidth?: number | string;\n //是否展示为树形结构\n tree?: boolean;\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((\n args: CellInfo & { table: BaseTableAPI }\n ) => undefined | string | ColumnIconOption | (string | ColumnIconOption)[]);\n\n // cellType?: ColumnTypeOption | BaseColumn<T, any> | null;\n\n // /** 如果是绘制图表库组件的图表类型 需要将注入的组件名称 写到chartType */\n // chartModule?: string;\n // /** 如果是绘制图表库组件的图表类型 统一图表配置chartSpec */\n // chartSpec?: any | ((arg0: CellInfo) => any);\n // sparklineSpec?: SparklineSpec | ((arg0: CellInfo) => SparklineSpec);\n // style?: ColumnStyleOption | null;\n /** 是否对相同内容合并单元格 **/\n mergeCell?: MergeCellOption;\n /** 是否隐藏 */\n hide?: boolean;\n customRender?: ICustomRender;\n customLayout?: ICustomLayout;\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n aggregation?: Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ts-types/list-table/define/basic-define.ts"],"names":[],"mappings":"","file":"basic-define.js","sourcesContent":["import type { BaseCellInfo, CellInfo, MergeCellOption, SortOption } from '../../common';\nimport type { ICustomRender } from '../../customElement';\nimport type { ICustomLayout } from '../../customLayout';\nimport type { FieldDef, FieldFormat, FieldKeyDef } from '../../table-engine';\nimport type { ColumnIconOption } from '../../icon';\nimport type { MenuListItem } from '../../menu';\nimport type { BaseTableAPI } from '../../base-table';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { Aggregation, CustomAggregation } from '../../new-data-set';\n\n// eslint-disable-next-line no-unused-vars\nexport interface IBasicHeaderDefine {\n // 表头的标题\n title?: string | (() => string); //支持图文混合\n /** 表头Icon配置 */\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n // | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n\n // headerStyle?: HeaderStyleOption | null;\n // style?: ColumnStyleOption | null;\n // headerType?: HeaderTypeOption | headerType.BaseHeader | null;\n /** sort排序规则 */\n sort?: SortOption;\n /** 显示sort排序icon。为了仅仅显示图标,无排序逻辑 */\n showSort?: boolean;\n /** 该列不支持hover交互行为 */\n disableHover?: boolean;\n /** 该列不支持选中 */\n disableSelect?: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);\n /** 该列表头不支持hover交互行为 */\n disableHeaderHover?: boolean;\n /** 该列表头不支持选中 */\n disableHeaderSelect?: boolean;\n /** 表头hover时的描述信息 会以tooltip形式展示出来 */\n description?: string;\n /** 下拉菜单项配置 */\n dropDownMenu?: MenuListItem[];\n /** 表头自定义渲染函数 */\n headerCustomRender?: ICustomRender;\n /** 表头自定义渲染元素定义 */\n headerCustomLayout?: ICustomLayout;\n /** 是否可以拖拽表头 */\n dragHeader?: boolean;\n /**\n * 列宽计算模式,only-header只考虑表头的内容 only-body只考虑body的内容 normal能被显示出来的所有内容\n */\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n /**\n * 是否禁用调整列宽,如果是转置表格或者是透视表的指标是行方向指定 那该配置不生效\n */\n disableColumnResize?: boolean;\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n}\n\nexport interface IBasicColumnBodyDefine {\n field: FieldDef;\n /** @deprecated 已不维护 */\n fieldKey?: FieldKeyDef;\n // 列的唯一标识\n key?: string;\n fieldFormat?: FieldFormat;\n width?: number | string;\n minWidth?: number | string;\n maxWidth?: number | string;\n //表头跨行合并,默认为1\n levelSpan?: number;\n //是否展示为树形结构\n tree?: boolean;\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((\n args: CellInfo & { table: BaseTableAPI }\n ) => undefined | string | ColumnIconOption | (string | ColumnIconOption)[]);\n\n // cellType?: ColumnTypeOption | BaseColumn<T, any> | null;\n\n // /** 如果是绘制图表库组件的图表类型 需要将注入的组件名称 写到chartType */\n // chartModule?: string;\n // /** 如果是绘制图表库组件的图表类型 统一图表配置chartSpec */\n // chartSpec?: any | ((arg0: CellInfo) => any);\n // sparklineSpec?: SparklineSpec | ((arg0: CellInfo) => SparklineSpec);\n // style?: ColumnStyleOption | null;\n /** 是否对相同内容合并单元格 **/\n mergeCell?: MergeCellOption;\n /** 是否隐藏 */\n hide?: boolean;\n customRender?: ICustomRender;\n customLayout?: ICustomLayout;\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n aggregation?: Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[];\n}\n"]}
|
|
@@ -127,6 +127,7 @@ export interface IPivotTableDataConfig {
|
|
|
127
127
|
mappingRules?: MappingRules;
|
|
128
128
|
derivedFieldRules?: DerivedFieldRules;
|
|
129
129
|
calculatedFieldRules?: CalculateddFieldRules;
|
|
130
|
+
updateAggregationOnEditCell?: boolean;
|
|
130
131
|
}
|
|
131
132
|
export interface IPivotChartDataConfig extends IPivotTableDataConfig {
|
|
132
133
|
collectValuesBy?: Record<string, CollectValueBy>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts-types/new-data-set.ts"],"names":[],"mappings":"AAYA,MAAM,CAAN,IAAY,eAUX;AAVD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,gCAAa,CAAA;IACb,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,kCAAe,CAAA;IACf,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;AAC7B,CAAC,EAVW,eAAe,KAAf,eAAe,QAU1B;AACD,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,yBAAa,CAAA;IACb,6BAAiB,CAAA;IACjB,yBAAa,CAAA;IACb,uBAAW,CAAA;IACX,6BAAiB,CAAA;AACnB,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB","file":"new-data-set.js","sourcesContent":["import type { ColorPropertyDefine } from '.';\nimport type { Either } from '../tools/helper';\nimport type { BaseTableAPI } from './base-table';\n\n//#region 总计小计\nexport interface TotalsStatus {\n isRowTotal: boolean;\n isRowSubTotal: boolean;\n isColTotal: boolean;\n isColSubTotal: boolean;\n}\n\nexport enum AggregationType {\n RECORD = 'RECORD',\n NONE = 'NONE', //不做聚合 只获取其中一条数据作为节点的record 取其field\n SUM = 'SUM',\n MIN = 'MIN',\n MAX = 'MAX',\n AVG = 'AVG',\n COUNT = 'COUNT',\n CUSTOM = 'CUSTOM',\n RECALCULATE = 'RECALCULATE'\n}\nexport enum SortType {\n ASC = 'ASC',\n DESC = 'DESC',\n NORMAL = 'NORMAL',\n desc = 'desc',\n asc = 'asc',\n normal = 'normal'\n}\nexport interface CalcTotals {\n aggregationType?: AggregationType; // 聚合方式\n // calcFunc?: (query: Record<string, any>, arr: Record<string, any>[]) => number;\n}\n\nexport interface Total {\n /** 是否显示总计; 如果配置了total对象,showGrandTotals默认false */\n showGrandTotals: boolean;\n /** 是否显示小计; 如果配置了total对象,showSubTotals默认为true */\n showSubTotals: boolean;\n\n // // 计算总计方法\n // calcGrandTotals?: CalcTotals;\n // // 计算小计方法\n // calcSubTotals?: CalcTotals;\n /** 小计汇总维度定义 */\n subTotalsDimensions?: string[];\n /** 汇总节点显示名称 默认'总计' */\n grandTotalLabel?: string;\n /** 汇总节点显示名称 默认'小计' */\n subTotalLabel?: string;\n}\n\nexport interface Totals {\n row?: Total & {\n /** 总计显示在上 默认false */\n showGrandTotalsOnTop?: boolean;\n /** 小计显示在上 默认false */\n showSubTotalsOnTop?: boolean;\n };\n column?: Total & {\n /** 总计显示在左 默认false */\n showGrandTotalsOnLeft?: boolean;\n /** 小计显示在左 默认false */\n showSubTotalsOnLeft?: boolean;\n };\n}\n\n//#endregion 总计小计\n\n//#region 排序规则\n// export interface SortRule {\n// //排序维度\n// sortField: string;\n// //以下均为排序方法\n// //1. 指定排序类型\n// sortType?: SortType;\n// //2. 按维度成员指定排序\n// sortBy?: string[];\n// //3. 按指标值排序\n// sortByIndicator?: string;\n// //如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值\n// query?: string[];\n// //4. 自定义排序方法function\n// sortFunc?: (a: any, b: any) => number;\n// }\n//以下均为排序方法\n//1. 指定排序类型\nexport interface SortTypeRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n}\n//2. 按维度成员指定排序\nexport interface SortByRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**根据指定具体顺序排序 */\n sortBy?: string[];\n}\n//3. 按指标值排序\nexport interface SortByIndicatorRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**排序根据某个指标值 */\n sortByIndicator?: string;\n /**如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值。例如按照办公用品下的纸张 ['办公用品', '纸张'] */\n query?: string[];\n /**自定义排序函数 否则按自然排序 */\n sortFunc?: (\n value_a: string | number,\n value_b: string | number,\n path_a: string[],\n path_b: string[],\n sortType: SortType\n ) => number;\n}\n//4. 自定义排序方法function\nexport interface SortFuncRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**自定义排序函数 */\n sortFunc?: (a: any, b: any, sortType: SortType) => number;\n}\n//自定义排序方法参数\n// export interface SortFuncParam extends SortRule {\n// data: Array<string | Record<string, any>>;\n// }\nexport type SortRule = SortTypeRule | SortByRule | SortByIndicatorRule | SortFuncRule;\nexport type SortRules = SortRule[];\n//#endregion 排序规则\n\n//#region 过滤规则\nexport interface FilterFuncRule {\n filterFunc?: (row: Record<string, any>) => boolean;\n}\nexport interface FilterValueRule {\n filterKey?: string;\n filteredValues?: unknown[];\n}\nexport type FilterRules = Either<FilterFuncRule, FilterValueRule>[];\n//#endregion 过滤规则\n\n//#region 聚合规则\nexport interface AggregationRule<T extends AggregationType> {\n /** 区别于field 重新起个key值,供配置indicators使用 */\n indicatorKey: string;\n // 可以收集单个字段的聚合结果,或者收集多个字段的聚合结果\n field: string[] | string;\n aggregationType: string | T;\n /** aggregationType 配置为 AggregationType.CUSTOM 时,需要配置 aggregationFun。*/\n aggregationFun?: T extends AggregationType.CUSTOM ? (values: any[], records: any[]) => any : undefined;\n /**计算结果格式化 */\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => number | string;\n}\nexport type AggregationRules = AggregationRule<AggregationType>[];\n\n//#endregion 聚合规则\n\n//#region 映射规则\nexport interface MappingRule {\n label?: LabelMapping;\n symbol?: SymbolMapping;\n bgColor?: MappingFuncRule;\n}\nexport type MappingRules = MappingRule[];\nexport interface LabelMapping {\n text?: MappingFuncRule;\n color?: MappingFuncRule;\n}\nexport interface SymbolMapping {\n shape?: 'circle' | 'rect';\n color?: MappingFuncRule;\n size?: MappingFuncRule;\n}\n\nexport type MappingFuncRule = {\n indicatorKey: string;\n mapping?: ColorPropertyDefine;\n};\n\n//#endregion 映射规则\n\n//#region 派生字段规则\nexport interface DerivedFieldRule {\n fieldName?: string;\n derivedFunc?: (record: Record<string, any>) => any;\n}\nexport type DerivedFieldRules = DerivedFieldRule[];\n//#endregion 派生字段规则\n\n//#region 计算字段规则\nexport interface CalculateddFieldRule {\n /** 唯一标识,可以当做新指标的key,用于配置在 indicators 中在透视表中展示。 */\n key: string;\n /** 计算字段依赖的指标,可以是在 records 中具体对应的指标字段 or 不是数据records 中的字段\n * 如果依赖的指标不在 records 中,则需要在 aggregationRules 中明确配置,具体指明聚合规则和 indicatorKey 以在 dependIndicatorKeys 所使用。 */\n dependIndicatorKeys: string[];\n /** 计算字段的计算函数,依赖的指标值作为参数传入,返回值作为计算字段的值。 */\n calculateFun?: (dependFieldsValue: any) => any;\n}\n\nexport type CalculateddFieldRules = CalculateddFieldRule[];\n//#endregion 计算字段规则\n\n/**\n * 基本表数据处理配置\n */\nexport interface IListTableDataConfig {\n groupByRules?: string[]; //按照行列维度分组规则;\n // aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n // sortRules?: SortTypeRule | SortByRule | SortFuncRule; //排序规则 不能简单的将sortState挪到这里 sort的规则在column中配置的;\n filterRules?: FilterRules; //过滤规则;\n // totals?: Totals; //小计或总计;\n // derivedFieldRules?: DerivedFieldRules;\n}\n/**\n * 透视表数据处理配置\n */\nexport interface IPivotTableDataConfig {\n aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n sortRules?: SortRules; //排序规则;\n filterRules?: FilterRules; //过滤规则;\n totals?: Totals; //小计或总计;\n /**\n * 目前mappding还不太好用 不建议使用 建议先用style\n */\n mappingRules?: MappingRules;\n derivedFieldRules?: DerivedFieldRules;\n calculatedFieldRules?: CalculateddFieldRules;\n}\n\n/**\n * 透视图数据处理配置\n */\nexport interface IPivotChartDataConfig extends IPivotTableDataConfig {\n /**\n * PivotChart专有\n */\n collectValuesBy?: Record<string, CollectValueBy>;\n /**\n * PivotChart专有\n */\n isPivotChart?: boolean;\n /**\n * PivotChart专有\n */\n dimensionSortArray?: string[];\n}\n\n/** 在处理数据的过程中 去额外收集某个维度的维度值范围 可为离散值或者连续值范围 */\nexport type CollectValueBy = {\n /** 要收集的字段按什么进行分组 */\n by: string[];\n /** 是否计算一个range范围 true的话对应的收集数据的结果为{max:number,min:number} */\n range?: boolean;\n /** 收集是按照sumBy字段相同的进行分组聚合 聚合结果求最大最小值;如果不设置该值 则按单条数据求最大最小值 */\n sumBy?: string[];\n /** 帮助计算列宽使用 如果是chart图表 收集的是xFiled的维度值 可以根据维度值的个数乘于图元宽度计算一个最优列宽*/\n type?: 'xField' | 'yField' | undefined;\n /** 如果是收集的离散值,离散值的排序依据 */\n sortBy?: string[];\n /** chartSpec中设置了markLine autoRange的情况 考虑扩展轴范围 */\n extendRange?: number | 'sum' | 'max';\n};\nexport type CollectedValue = { max?: number; min?: number } | Array<string>;\n\n//#region 提供给基本表格的类型\nexport type Aggregation = {\n aggregationType: AggregationType;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n\nexport type CustomAggregation = {\n aggregationType: AggregationType.CUSTOM;\n aggregationFun: (values: any[], records: any[]) => any;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n//#endregion\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ts-types/new-data-set.ts"],"names":[],"mappings":"AAYA,MAAM,CAAN,IAAY,eAUX;AAVD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,gCAAa,CAAA;IACb,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,kCAAe,CAAA;IACf,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;AAC7B,CAAC,EAVW,eAAe,KAAf,eAAe,QAU1B;AACD,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,yBAAa,CAAA;IACb,6BAAiB,CAAA;IACjB,yBAAa,CAAA;IACb,uBAAW,CAAA;IACX,6BAAiB,CAAA;AACnB,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB","file":"new-data-set.js","sourcesContent":["import type { ColorPropertyDefine } from '.';\nimport type { Either } from '../tools/helper';\nimport type { BaseTableAPI } from './base-table';\n\n//#region 总计小计\nexport interface TotalsStatus {\n isRowTotal: boolean;\n isRowSubTotal: boolean;\n isColTotal: boolean;\n isColSubTotal: boolean;\n}\n\nexport enum AggregationType {\n RECORD = 'RECORD',\n NONE = 'NONE', //不做聚合 只获取其中一条数据作为节点的record 取其field\n SUM = 'SUM',\n MIN = 'MIN',\n MAX = 'MAX',\n AVG = 'AVG',\n COUNT = 'COUNT',\n CUSTOM = 'CUSTOM',\n RECALCULATE = 'RECALCULATE'\n}\nexport enum SortType {\n ASC = 'ASC',\n DESC = 'DESC',\n NORMAL = 'NORMAL',\n desc = 'desc',\n asc = 'asc',\n normal = 'normal'\n}\nexport interface CalcTotals {\n aggregationType?: AggregationType; // 聚合方式\n // calcFunc?: (query: Record<string, any>, arr: Record<string, any>[]) => number;\n}\n\nexport interface Total {\n /** 是否显示总计; 如果配置了total对象,showGrandTotals默认false */\n showGrandTotals: boolean;\n /** 是否显示小计; 如果配置了total对象,showSubTotals默认为true */\n showSubTotals: boolean;\n\n // // 计算总计方法\n // calcGrandTotals?: CalcTotals;\n // // 计算小计方法\n // calcSubTotals?: CalcTotals;\n /** 小计汇总维度定义 */\n subTotalsDimensions?: string[];\n /** 汇总节点显示名称 默认'总计' */\n grandTotalLabel?: string;\n /** 汇总节点显示名称 默认'小计' */\n subTotalLabel?: string;\n}\n\nexport interface Totals {\n row?: Total & {\n /** 总计显示在上 默认false */\n showGrandTotalsOnTop?: boolean;\n /** 小计显示在上 默认false */\n showSubTotalsOnTop?: boolean;\n };\n column?: Total & {\n /** 总计显示在左 默认false */\n showGrandTotalsOnLeft?: boolean;\n /** 小计显示在左 默认false */\n showSubTotalsOnLeft?: boolean;\n };\n}\n\n//#endregion 总计小计\n\n//#region 排序规则\n// export interface SortRule {\n// //排序维度\n// sortField: string;\n// //以下均为排序方法\n// //1. 指定排序类型\n// sortType?: SortType;\n// //2. 按维度成员指定排序\n// sortBy?: string[];\n// //3. 按指标值排序\n// sortByIndicator?: string;\n// //如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值\n// query?: string[];\n// //4. 自定义排序方法function\n// sortFunc?: (a: any, b: any) => number;\n// }\n//以下均为排序方法\n//1. 指定排序类型\nexport interface SortTypeRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n}\n//2. 按维度成员指定排序\nexport interface SortByRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**根据指定具体顺序排序 */\n sortBy?: string[];\n}\n//3. 按指标值排序\nexport interface SortByIndicatorRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**排序根据某个指标值 */\n sortByIndicator?: string;\n /**如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值。例如按照办公用品下的纸张 ['办公用品', '纸张'] */\n query?: string[];\n /**自定义排序函数 否则按自然排序 */\n sortFunc?: (\n value_a: string | number,\n value_b: string | number,\n path_a: string[],\n path_b: string[],\n sortType: SortType\n ) => number;\n}\n//4. 自定义排序方法function\nexport interface SortFuncRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**自定义排序函数 */\n sortFunc?: (a: any, b: any, sortType: SortType) => number;\n}\n//自定义排序方法参数\n// export interface SortFuncParam extends SortRule {\n// data: Array<string | Record<string, any>>;\n// }\nexport type SortRule = SortTypeRule | SortByRule | SortByIndicatorRule | SortFuncRule;\nexport type SortRules = SortRule[];\n//#endregion 排序规则\n\n//#region 过滤规则\nexport interface FilterFuncRule {\n filterFunc?: (row: Record<string, any>) => boolean;\n}\nexport interface FilterValueRule {\n filterKey?: string;\n filteredValues?: unknown[];\n}\nexport type FilterRules = Either<FilterFuncRule, FilterValueRule>[];\n//#endregion 过滤规则\n\n//#region 聚合规则\nexport interface AggregationRule<T extends AggregationType> {\n /** 区别于field 重新起个key值,供配置indicators使用 */\n indicatorKey: string;\n // 可以收集单个字段的聚合结果,或者收集多个字段的聚合结果\n field: string[] | string;\n aggregationType: string | T;\n /** aggregationType 配置为 AggregationType.CUSTOM 时,需要配置 aggregationFun。*/\n aggregationFun?: T extends AggregationType.CUSTOM ? (values: any[], records: any[]) => any : undefined;\n /**计算结果格式化 */\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => number | string;\n}\nexport type AggregationRules = AggregationRule<AggregationType>[];\n\n//#endregion 聚合规则\n\n//#region 映射规则\nexport interface MappingRule {\n label?: LabelMapping;\n symbol?: SymbolMapping;\n bgColor?: MappingFuncRule;\n}\nexport type MappingRules = MappingRule[];\nexport interface LabelMapping {\n text?: MappingFuncRule;\n color?: MappingFuncRule;\n}\nexport interface SymbolMapping {\n shape?: 'circle' | 'rect';\n color?: MappingFuncRule;\n size?: MappingFuncRule;\n}\n\nexport type MappingFuncRule = {\n indicatorKey: string;\n mapping?: ColorPropertyDefine;\n};\n\n//#endregion 映射规则\n\n//#region 派生字段规则\nexport interface DerivedFieldRule {\n fieldName?: string;\n derivedFunc?: (record: Record<string, any>) => any;\n}\nexport type DerivedFieldRules = DerivedFieldRule[];\n//#endregion 派生字段规则\n\n//#region 计算字段规则\nexport interface CalculateddFieldRule {\n /** 唯一标识,可以当做新指标的key,用于配置在 indicators 中在透视表中展示。 */\n key: string;\n /** 计算字段依赖的指标,可以是在 records 中具体对应的指标字段 or 不是数据records 中的字段\n * 如果依赖的指标不在 records 中,则需要在 aggregationRules 中明确配置,具体指明聚合规则和 indicatorKey 以在 dependIndicatorKeys 所使用。 */\n dependIndicatorKeys: string[];\n /** 计算字段的计算函数,依赖的指标值作为参数传入,返回值作为计算字段的值。 */\n calculateFun?: (dependFieldsValue: any) => any;\n}\n\nexport type CalculateddFieldRules = CalculateddFieldRule[];\n//#endregion 计算字段规则\n\n/**\n * 基本表数据处理配置\n */\nexport interface IListTableDataConfig {\n groupByRules?: string[]; //按照行列维度分组规则;\n // aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n // sortRules?: SortTypeRule | SortByRule | SortFuncRule; //排序规则 不能简单的将sortState挪到这里 sort的规则在column中配置的;\n filterRules?: FilterRules; //过滤规则;\n // totals?: Totals; //小计或总计;\n // derivedFieldRules?: DerivedFieldRules;\n}\n/**\n * 透视表数据处理配置\n */\nexport interface IPivotTableDataConfig {\n aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n sortRules?: SortRules; //排序规则;\n filterRules?: FilterRules; //过滤规则;\n totals?: Totals; //小计或总计;\n /**\n * 目前mappding还不太好用 不建议使用 建议先用style\n */\n mappingRules?: MappingRules;\n derivedFieldRules?: DerivedFieldRules;\n calculatedFieldRules?: CalculateddFieldRules;\n /** 编辑单元格时是否更新聚合值, 默认为false */\n updateAggregationOnEditCell?: boolean;\n}\n\n/**\n * 透视图数据处理配置\n */\nexport interface IPivotChartDataConfig extends IPivotTableDataConfig {\n /**\n * PivotChart专有\n */\n collectValuesBy?: Record<string, CollectValueBy>;\n /**\n * PivotChart专有\n */\n isPivotChart?: boolean;\n /**\n * PivotChart专有\n */\n dimensionSortArray?: string[];\n}\n\n/** 在处理数据的过程中 去额外收集某个维度的维度值范围 可为离散值或者连续值范围 */\nexport type CollectValueBy = {\n /** 要收集的字段按什么进行分组 */\n by: string[];\n /** 是否计算一个range范围 true的话对应的收集数据的结果为{max:number,min:number} */\n range?: boolean;\n /** 收集是按照sumBy字段相同的进行分组聚合 聚合结果求最大最小值;如果不设置该值 则按单条数据求最大最小值 */\n sumBy?: string[];\n /** 帮助计算列宽使用 如果是chart图表 收集的是xFiled的维度值 可以根据维度值的个数乘于图元宽度计算一个最优列宽*/\n type?: 'xField' | 'yField' | undefined;\n /** 如果是收集的离散值,离散值的排序依据 */\n sortBy?: string[];\n /** chartSpec中设置了markLine autoRange的情况 考虑扩展轴范围 */\n extendRange?: number | 'sum' | 'max';\n};\nexport type CollectedValue = { max?: number; min?: number } | Array<string>;\n\n//#region 提供给基本表格的类型\nexport type Aggregation = {\n aggregationType: AggregationType;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n\nexport type CustomAggregation = {\n aggregationType: AggregationType.CUSTOM;\n aggregationFun: (values: any[], records: any[]) => any;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n//#endregion\n"]}
|
|
@@ -67,6 +67,7 @@ export interface TableKeyboardOptions {
|
|
|
67
67
|
}
|
|
68
68
|
export interface TableEventOptions {
|
|
69
69
|
preventDefaultContextMenu?: boolean;
|
|
70
|
+
contextmenuReturnAllSelectedCells?: boolean;
|
|
70
71
|
}
|
|
71
72
|
export interface IRowSeriesNumber {
|
|
72
73
|
width?: number | 'auto';
|
|
@@ -183,7 +184,7 @@ export interface ListTableAPI extends BaseTableAPI {
|
|
|
183
184
|
isListTable: () => true;
|
|
184
185
|
isPivotTable: () => false;
|
|
185
186
|
changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell?: boolean) => void;
|
|
186
|
-
changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell?: boolean) => boolean[][];
|
|
187
|
+
changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell?: boolean) => Promise<boolean[][]> | boolean[][];
|
|
187
188
|
getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;
|
|
188
189
|
getEditor: (col: number, row: number) => IEditor;
|
|
189
190
|
startEditCell: (col?: number, row?: number, value?: string | number) => void;
|