@visactor/vtable-plugins 1.23.1-alpha.2 → 1.23.2
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/excel-edit-cell-keyboard.d.ts +2 -0
- package/cjs/excel-edit-cell-keyboard.js +8 -4
- package/cjs/excel-edit-cell-keyboard.js.map +1 -1
- package/cjs/master-detail-plugin/core.d.ts +2 -1
- package/cjs/master-detail-plugin/core.js +1 -3
- package/cjs/master-detail-plugin/core.js.map +1 -1
- package/cjs/table-export/csv/index.js +1 -1
- package/cjs/table-export/csv/index.js.map +1 -1
- package/dist/vtable-plugins.js +13 -9
- package/dist/vtable-plugins.min.js +1 -1
- package/es/excel-edit-cell-keyboard.d.ts +2 -0
- package/es/excel-edit-cell-keyboard.js +8 -4
- package/es/excel-edit-cell-keyboard.js.map +1 -1
- package/es/master-detail-plugin/core.d.ts +2 -1
- package/es/master-detail-plugin/core.js +1 -3
- package/es/master-detail-plugin/core.js.map +1 -1
- package/es/table-export/csv/index.js +1 -1
- package/es/table-export/csv/index.js.map +1 -1
- package/package.json +8 -8
|
@@ -15,6 +15,7 @@ export type IExcelEditCellKeyboardPluginOptions = {
|
|
|
15
15
|
id?: string;
|
|
16
16
|
responseKeyboard?: ExcelEditCellKeyboardResponse[];
|
|
17
17
|
deleteWorkOnEditableCell?: boolean;
|
|
18
|
+
batchCallChangeCellValuesApi?: boolean;
|
|
18
19
|
};
|
|
19
20
|
export declare class ExcelEditCellKeyboardPlugin implements pluginsDefinition.IVTablePlugin {
|
|
20
21
|
id: string;
|
|
@@ -23,6 +24,7 @@ export declare class ExcelEditCellKeyboardPlugin implements pluginsDefinition.IV
|
|
|
23
24
|
table: ListTable;
|
|
24
25
|
pluginOptions: IExcelEditCellKeyboardPluginOptions;
|
|
25
26
|
responseKeyboard: ExcelEditCellKeyboardResponse[];
|
|
27
|
+
batchCallChangeCellValuesApi: boolean;
|
|
26
28
|
constructor(pluginOptions?: IExcelEditCellKeyboardPluginOptions);
|
|
27
29
|
run(...args: [EventArg, TableEvents[keyof TableEvents] | TableEvents[keyof TableEvents][], BaseTableAPI]): void;
|
|
28
30
|
bindEvent(): void;
|
|
@@ -11,10 +11,11 @@ export var ExcelEditCellKeyboardResponse;
|
|
|
11
11
|
|
|
12
12
|
export class ExcelEditCellKeyboardPlugin {
|
|
13
13
|
constructor(pluginOptions) {
|
|
14
|
-
var _a, _b;
|
|
14
|
+
var _a, _b, _c;
|
|
15
15
|
this.id = "excel-edit-cell-keyboard", this.name = "Excel Edit Cell Keyboard", this.runTime = [ TABLE_EVENT_TYPE.INITIALIZED ],
|
|
16
16
|
this.id = null !== (_a = null == pluginOptions ? void 0 : pluginOptions.id) && void 0 !== _a ? _a : this.id,
|
|
17
17
|
this.pluginOptions = pluginOptions, this.responseKeyboard = null !== (_b = null == pluginOptions ? void 0 : pluginOptions.responseKeyboard) && void 0 !== _b ? _b : [ ExcelEditCellKeyboardResponse.ENTER, ExcelEditCellKeyboardResponse.TAB, ExcelEditCellKeyboardResponse.ARROW_LEFT, ExcelEditCellKeyboardResponse.ARROW_RIGHT, ExcelEditCellKeyboardResponse.ARROW_DOWN, ExcelEditCellKeyboardResponse.ARROW_UP, ExcelEditCellKeyboardResponse.DELETE, ExcelEditCellKeyboardResponse.BACKSPACE ],
|
|
18
|
+
this.batchCallChangeCellValuesApi = null !== (_c = null == pluginOptions ? void 0 : pluginOptions.batchCallChangeCellValuesApi) && void 0 !== _c && _c,
|
|
18
19
|
this.bindEvent();
|
|
19
20
|
}
|
|
20
21
|
run(...args) {
|
|
@@ -41,7 +42,7 @@ export class ExcelEditCellKeyboardPlugin {
|
|
|
41
42
|
(null == selectCells ? void 0 : selectCells.length) > 0 && (document.activeElement === this.table.getElement() || Object.values(this.table.editorManager.cacheLastSelectedCellEditor || {}).some((editor => {
|
|
42
43
|
var _a;
|
|
43
44
|
return (null === (_a = editor.getInputElement) || void 0 === _a ? void 0 : _a.call(editor)) === document.activeElement;
|
|
44
|
-
}))) && (deleteSelectRange(selectCells, this.table, null === (_c = null === (_b = this.pluginOptions) || void 0 === _b ? void 0 : _b.deleteWorkOnEditableCell) || void 0 === _c || _c),
|
|
45
|
+
}))) && (deleteSelectRange(selectCells, this.table, null === (_c = null === (_b = this.pluginOptions) || void 0 === _b ? void 0 : _b.deleteWorkOnEditableCell) || void 0 === _c || _c, this.batchCallChangeCellValuesApi),
|
|
45
46
|
event.stopPropagation(), event.preventDefault());
|
|
46
47
|
}
|
|
47
48
|
} else this.table.editorManager.completeEdit(), this.table.getElement().focus(),
|
|
@@ -67,7 +68,10 @@ export class ExcelEditCellKeyboardPlugin {
|
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
function deleteSelectRange(selectCells, tableInstance, workOnEditableCell = !1) {
|
|
71
|
-
|
|
71
|
+
function deleteSelectRange(selectCells, tableInstance, workOnEditableCell = !1, batchCallChangeCellValuesApi = !1) {
|
|
72
|
+
if (batchCallChangeCellValuesApi) {
|
|
73
|
+
const ranges = tableInstance.stateManager.select.ranges;
|
|
74
|
+
(null == ranges ? void 0 : ranges.length) && tableInstance.changeCellValuesByRanges(ranges, "", workOnEditableCell, !0);
|
|
75
|
+
} else for (let i = 0; i < selectCells.length; i++) for (let j = 0; j < selectCells[i].length; j++) tableInstance.changeCellValue(selectCells[i][j].col, selectCells[i][j].row, "", workOnEditableCell);
|
|
72
76
|
}
|
|
73
77
|
//# sourceMappingURL=excel-edit-cell-keyboard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/excel-edit-cell-keyboard.ts"],"names":[],"mappings":"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","file":"excel-edit-cell-keyboard.js","sourcesContent":["import type { ListTable, BaseTableAPI, TYPES, pluginsDefinition } from '@visactor/vtable';\nimport { TABLE_EVENT_TYPE } from '@visactor/vtable';\nimport type { TableEvents } from '@visactor/vtable/src/core/TABLE_EVENT_TYPE';\nimport type { EventArg } from './types';\nimport type { IEditor } from '@visactor/vtable-editors';\nexport enum ExcelEditCellKeyboardResponse {\n ENTER = 'enter',\n TAB = 'tab',\n ARROW_LEFT = 'arrowLeft',\n ARROW_RIGHT = 'arrowRight',\n ARROW_DOWN = 'arrowDown',\n ARROW_UP = 'arrowUp',\n DELETE = 'delete',\n BACKSPACE = 'backspace'\n}\n//备用 插件配置项 目前感觉都走默认逻辑就行\nexport type IExcelEditCellKeyboardPluginOptions = {\n id?: string;\n /** 该插件响应的键盘事件列表 */\n responseKeyboard?: ExcelEditCellKeyboardResponse[];\n /** 删除能力是否只应用到可编辑单元格 */\n deleteWorkOnEditableCell?: boolean;\n // keyDown_before?: (event: KeyboardEvent) => void;\n // keyDown_after?: (event: KeyboardEvent) => void;\n};\n\nexport class ExcelEditCellKeyboardPlugin implements pluginsDefinition.IVTablePlugin {\n id = `excel-edit-cell-keyboard`;\n name = 'Excel Edit Cell Keyboard';\n runTime = [TABLE_EVENT_TYPE.INITIALIZED];\n table: ListTable;\n pluginOptions: IExcelEditCellKeyboardPluginOptions;\n responseKeyboard: ExcelEditCellKeyboardResponse[];\n constructor(pluginOptions?: IExcelEditCellKeyboardPluginOptions) {\n this.id = pluginOptions?.id ?? this.id;\n this.pluginOptions = pluginOptions;\n this.responseKeyboard = pluginOptions?.responseKeyboard ?? [\n ExcelEditCellKeyboardResponse.ENTER,\n ExcelEditCellKeyboardResponse.TAB,\n ExcelEditCellKeyboardResponse.ARROW_LEFT,\n ExcelEditCellKeyboardResponse.ARROW_RIGHT,\n ExcelEditCellKeyboardResponse.ARROW_DOWN,\n ExcelEditCellKeyboardResponse.ARROW_UP,\n ExcelEditCellKeyboardResponse.DELETE,\n ExcelEditCellKeyboardResponse.BACKSPACE\n ];\n\n this.bindEvent();\n }\n run(...args: [EventArg, TableEvents[keyof TableEvents] | TableEvents[keyof TableEvents][], BaseTableAPI]) {\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable;\n }\n\n bindEvent() {\n //监听document全局的keydown事件 捕获阶段监听 可以及时阻止事件传播和默认行为\n document.addEventListener('keydown', this.handleKeyDown.bind(this), true);\n // this.table.on('selected_cell', () => {\n // this.updateHighlight();\n // });\n\n // this.table.on('selected_clear', () => {\n // this.clearHighlight();\n // });\n\n // this.table.on('mousemove_table', () => {\n // if (this.table.stateManager.select.selecting) {\n // this.updateHighlight();\n // }\n // });\n }\n handleKeyDown(event: KeyboardEvent) {\n // this.pluginOptions?.keyDown_before?.(event);\n if (this.table?.editorManager && this.isExcelShortcutKey(event)) {\n const eventKey = event.key.toLowerCase() as ExcelEditCellKeyboardResponse;\n //判断是键盘触发编辑单元格的情况下,那么在编辑状态中切换方向需要选中下一个继续编辑\n if (this.table.editorManager.editingEditor && this.table.editorManager.beginTriggerEditCellMode === 'keydown') {\n const { col, row } = this.table.editorManager.editCell;\n if (eventKey !== ExcelEditCellKeyboardResponse.BACKSPACE && eventKey !== ExcelEditCellKeyboardResponse.DELETE) {\n this.table.editorManager.completeEdit();\n } else {\n //如果输入了删除或退格键,应正常删除输入框内容\n return;\n }\n this.table.getElement().focus();\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n //有这些配合键,则不进行选中下一个单元格的行为 执行vtable内部逻辑\n if (eventKey === ExcelEditCellKeyboardResponse.ENTER) {\n this.table.selectCell(col, row + 1);\n } else if (eventKey === ExcelEditCellKeyboardResponse.TAB) {\n this.table.selectCell(col + 1, row);\n } else if (eventKey === ExcelEditCellKeyboardResponse.ARROW_LEFT) {\n this.table.selectCell(col - 1, row);\n } else if (eventKey === ExcelEditCellKeyboardResponse.ARROW_RIGHT) {\n this.table.selectCell(col + 1, row);\n } else if (eventKey === ExcelEditCellKeyboardResponse.ARROW_DOWN) {\n this.table.selectCell(col, row + 1);\n } else if (eventKey === ExcelEditCellKeyboardResponse.ARROW_UP) {\n this.table.selectCell(col, row - 1);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n }\n } else {\n const { col, row } = this.table.stateManager.select.cellPos;\n if (\n this.table.editorManager.editingEditor &&\n (eventKey === ExcelEditCellKeyboardResponse.ENTER || eventKey === ExcelEditCellKeyboardResponse.TAB)\n ) {\n this.table.editorManager.completeEdit();\n this.table.getElement().focus();\n if (eventKey === ExcelEditCellKeyboardResponse.ENTER) {\n this.table.selectCell(col, row + 1);\n } else if (eventKey === ExcelEditCellKeyboardResponse.TAB) {\n this.table.selectCell(col + 1, row);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n } else if (\n !this.table.editorManager.editingEditor &&\n (eventKey === ExcelEditCellKeyboardResponse.DELETE || eventKey === ExcelEditCellKeyboardResponse.BACKSPACE)\n ) {\n //响应删除键,删除\n const selectCells = this.table.getSelectedCellInfos();\n if (\n selectCells?.length > 0 &&\n (document.activeElement === this.table.getElement() ||\n Object.values(this.table.editorManager.cacheLastSelectedCellEditor || {}).some(\n // 处理情况:没有开始编辑但编辑器及编辑输入框已经存在的情况下(editCellTrigger为keydown)判断当前激活的是cacheLastSelectedCellEditor中的input也应该响应删除单元格\n (editor: IEditor) => editor.getInputElement?.() === document.activeElement\n ))\n ) {\n // 如果选中的是范围,则删除范围内的所有单元格\n deleteSelectRange(selectCells, this.table, this.pluginOptions?.deleteWorkOnEditableCell ?? true);\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n }\n }\n }\n }\n // this.pluginOptions?.keyDown_after?.apply(this, [event]);\n }\n // 判断event的keyCode是否是excel的快捷键\n isExcelShortcutKey(event: KeyboardEvent) {\n return this.responseKeyboard.includes(event.key.toLowerCase() as ExcelEditCellKeyboardResponse);\n }\n setResponseKeyboard(responseKeyboard: ExcelEditCellKeyboardResponse[]) {\n this.responseKeyboard = responseKeyboard;\n }\n deleteResponseKeyboard(responseKeyboard: ExcelEditCellKeyboardResponse[]) {\n this.responseKeyboard = this.responseKeyboard.filter(key => !responseKeyboard.includes(key));\n }\n addResponseKeyboard(responseKeyboard: ExcelEditCellKeyboardResponse[]) {\n this.responseKeyboard = [...this.responseKeyboard, ...responseKeyboard];\n }\n release() {\n document.removeEventListener('keydown', this.handleKeyDown, true);\n }\n}\n//将选中单元格的值设置为空\nfunction deleteSelectRange(\n selectCells: TYPES.CellInfo[][],\n tableInstance: ListTable,\n workOnEditableCell: boolean = false\n) {\n for (let i = 0; i < selectCells.length; i++) {\n for (let j = 0; j < selectCells[i].length; j++) {\n tableInstance.changeCellValue(selectCells[i][j].col, selectCells[i][j].row, '', workOnEditableCell);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/excel-edit-cell-keyboard.ts"],"names":[],"mappings":"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","file":"excel-edit-cell-keyboard.js","sourcesContent":["import type { ListTable, BaseTableAPI, TYPES, pluginsDefinition } from '@visactor/vtable';\nimport { TABLE_EVENT_TYPE } from '@visactor/vtable';\nimport type { TableEvents } from '@visactor/vtable/src/core/TABLE_EVENT_TYPE';\nimport type { EventArg } from './types';\nimport type { IEditor } from '@visactor/vtable-editors';\nexport enum ExcelEditCellKeyboardResponse {\n ENTER = 'enter',\n TAB = 'tab',\n ARROW_LEFT = 'arrowLeft',\n ARROW_RIGHT = 'arrowRight',\n ARROW_DOWN = 'arrowDown',\n ARROW_UP = 'arrowUp',\n DELETE = 'delete',\n BACKSPACE = 'backspace'\n}\n//备用 插件配置项 目前感觉都走默认逻辑就行\nexport type IExcelEditCellKeyboardPluginOptions = {\n id?: string;\n /** 该插件响应的键盘事件列表 */\n responseKeyboard?: ExcelEditCellKeyboardResponse[];\n /** 删除能力是否只应用到可编辑单元格 */\n deleteWorkOnEditableCell?: boolean;\n /** 删除范围时通过 changeCellValuesByRanges 批量更新,从而聚合成一次 change_cell_values 事件 */\n batchCallChangeCellValuesApi?: boolean;\n // keyDown_before?: (event: KeyboardEvent) => void;\n // keyDown_after?: (event: KeyboardEvent) => void;\n};\n\nexport class ExcelEditCellKeyboardPlugin implements pluginsDefinition.IVTablePlugin {\n id = `excel-edit-cell-keyboard`;\n name = 'Excel Edit Cell Keyboard';\n runTime = [TABLE_EVENT_TYPE.INITIALIZED];\n table: ListTable;\n pluginOptions: IExcelEditCellKeyboardPluginOptions;\n responseKeyboard: ExcelEditCellKeyboardResponse[];\n batchCallChangeCellValuesApi: boolean;\n constructor(pluginOptions?: IExcelEditCellKeyboardPluginOptions) {\n this.id = pluginOptions?.id ?? this.id;\n this.pluginOptions = pluginOptions;\n this.responseKeyboard = pluginOptions?.responseKeyboard ?? [\n ExcelEditCellKeyboardResponse.ENTER,\n ExcelEditCellKeyboardResponse.TAB,\n ExcelEditCellKeyboardResponse.ARROW_LEFT,\n ExcelEditCellKeyboardResponse.ARROW_RIGHT,\n ExcelEditCellKeyboardResponse.ARROW_DOWN,\n ExcelEditCellKeyboardResponse.ARROW_UP,\n ExcelEditCellKeyboardResponse.DELETE,\n ExcelEditCellKeyboardResponse.BACKSPACE\n ];\n\n this.batchCallChangeCellValuesApi = pluginOptions?.batchCallChangeCellValuesApi ?? false;\n\n this.bindEvent();\n }\n run(...args: [EventArg, TableEvents[keyof TableEvents] | TableEvents[keyof TableEvents][], BaseTableAPI]) {\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable;\n }\n\n bindEvent() {\n //监听document全局的keydown事件 捕获阶段监听 可以及时阻止事件传播和默认行为\n document.addEventListener('keydown', this.handleKeyDown.bind(this), true);\n // this.table.on('selected_cell', () => {\n // this.updateHighlight();\n // });\n\n // this.table.on('selected_clear', () => {\n // this.clearHighlight();\n // });\n\n // this.table.on('mousemove_table', () => {\n // if (this.table.stateManager.select.selecting) {\n // this.updateHighlight();\n // }\n // });\n }\n handleKeyDown(event: KeyboardEvent) {\n // this.pluginOptions?.keyDown_before?.(event);\n if (this.table?.editorManager && this.isExcelShortcutKey(event)) {\n const eventKey = event.key.toLowerCase() as ExcelEditCellKeyboardResponse;\n //判断是键盘触发编辑单元格的情况下,那么在编辑状态中切换方向需要选中下一个继续编辑\n if (this.table.editorManager.editingEditor && this.table.editorManager.beginTriggerEditCellMode === 'keydown') {\n const { col, row } = this.table.editorManager.editCell;\n if (eventKey !== ExcelEditCellKeyboardResponse.BACKSPACE && eventKey !== ExcelEditCellKeyboardResponse.DELETE) {\n this.table.editorManager.completeEdit();\n } else {\n //如果输入了删除或退格键,应正常删除输入框内容\n return;\n }\n this.table.getElement().focus();\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n //有这些配合键,则不进行选中下一个单元格的行为 执行vtable内部逻辑\n if (eventKey === ExcelEditCellKeyboardResponse.ENTER) {\n this.table.selectCell(col, row + 1);\n } else if (eventKey === ExcelEditCellKeyboardResponse.TAB) {\n this.table.selectCell(col + 1, row);\n } else if (eventKey === ExcelEditCellKeyboardResponse.ARROW_LEFT) {\n this.table.selectCell(col - 1, row);\n } else if (eventKey === ExcelEditCellKeyboardResponse.ARROW_RIGHT) {\n this.table.selectCell(col + 1, row);\n } else if (eventKey === ExcelEditCellKeyboardResponse.ARROW_DOWN) {\n this.table.selectCell(col, row + 1);\n } else if (eventKey === ExcelEditCellKeyboardResponse.ARROW_UP) {\n this.table.selectCell(col, row - 1);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n }\n } else {\n const { col, row } = this.table.stateManager.select.cellPos;\n if (\n this.table.editorManager.editingEditor &&\n (eventKey === ExcelEditCellKeyboardResponse.ENTER || eventKey === ExcelEditCellKeyboardResponse.TAB)\n ) {\n this.table.editorManager.completeEdit();\n this.table.getElement().focus();\n if (eventKey === ExcelEditCellKeyboardResponse.ENTER) {\n this.table.selectCell(col, row + 1);\n } else if (eventKey === ExcelEditCellKeyboardResponse.TAB) {\n this.table.selectCell(col + 1, row);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n } else if (\n !this.table.editorManager.editingEditor &&\n (eventKey === ExcelEditCellKeyboardResponse.DELETE || eventKey === ExcelEditCellKeyboardResponse.BACKSPACE)\n ) {\n //响应删除键,删除\n const selectCells = this.table.getSelectedCellInfos();\n if (\n selectCells?.length > 0 &&\n (document.activeElement === this.table.getElement() ||\n Object.values(this.table.editorManager.cacheLastSelectedCellEditor || {}).some(\n // 处理情况:没有开始编辑但编辑器及编辑输入框已经存在的情况下(editCellTrigger为keydown)判断当前激活的是cacheLastSelectedCellEditor中的input也应该响应删除单元格\n (editor: IEditor) => editor.getInputElement?.() === document.activeElement\n ))\n ) {\n // 如果选中的是范围,则删除范围内的所有单元格\n deleteSelectRange(\n selectCells,\n this.table,\n this.pluginOptions?.deleteWorkOnEditableCell ?? true,\n this.batchCallChangeCellValuesApi\n );\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n }\n }\n }\n }\n // this.pluginOptions?.keyDown_after?.apply(this, [event]);\n }\n // 判断event的keyCode是否是excel的快捷键\n isExcelShortcutKey(event: KeyboardEvent) {\n return this.responseKeyboard.includes(event.key.toLowerCase() as ExcelEditCellKeyboardResponse);\n }\n setResponseKeyboard(responseKeyboard: ExcelEditCellKeyboardResponse[]) {\n this.responseKeyboard = responseKeyboard;\n }\n deleteResponseKeyboard(responseKeyboard: ExcelEditCellKeyboardResponse[]) {\n this.responseKeyboard = this.responseKeyboard.filter(key => !responseKeyboard.includes(key));\n }\n addResponseKeyboard(responseKeyboard: ExcelEditCellKeyboardResponse[]) {\n this.responseKeyboard = [...this.responseKeyboard, ...responseKeyboard];\n }\n release() {\n document.removeEventListener('keydown', this.handleKeyDown, true);\n }\n}\n//将选中单元格的值设置为空\nfunction deleteSelectRange(\n selectCells: TYPES.CellInfo[][],\n tableInstance: ListTable,\n workOnEditableCell: boolean = false,\n batchCallChangeCellValuesApi: boolean = false\n) {\n if (batchCallChangeCellValuesApi) {\n const ranges = tableInstance.stateManager.select.ranges;\n if (ranges?.length) {\n tableInstance.changeCellValuesByRanges(ranges, '', workOnEditableCell, true);\n }\n return;\n }\n\n for (let i = 0; i < selectCells.length; i++) {\n for (let j = 0; j < selectCells[i].length; j++) {\n tableInstance.changeCellValue(selectCells[i][j].col, selectCells[i][j].row, '', workOnEditableCell);\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as VTable from '@visactor/vtable';
|
|
2
2
|
import type { MasterDetailPluginOptions } from './types';
|
|
3
|
-
|
|
3
|
+
import type { pluginsDefinition } from '@visactor/vtable';
|
|
4
|
+
export declare class MasterDetailPlugin implements pluginsDefinition.IVTablePlugin {
|
|
4
5
|
id: string;
|
|
5
6
|
name: string;
|
|
6
7
|
runTime: ("sort_click" | "after_sort" | "before_init" | "initialized" | "after_update_cell_content_width" | "after_update_select_border_height")[];
|
|
@@ -222,9 +222,7 @@ export class MasterDetailPlugin {
|
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
setRecordChildren(children, col, row) {
|
|
225
|
-
const
|
|
226
|
-
if (null == recordIndex) return;
|
|
227
|
-
const realRecordIndex = "number" == typeof recordIndex ? recordIndex : recordIndex[0], record = this.table.dataSource.get(realRecordIndex);
|
|
225
|
+
const record = this.table.getCellOriginRecord(col, row);
|
|
228
226
|
record && (record.children = children, this.expandRow(row, col), this.table.scenegraph.updateCellContent(col, row));
|
|
229
227
|
}
|
|
230
228
|
release() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/master-detail-plugin/core.ts"],"names":[],"mappings":"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","file":"core.js","sourcesContent":["import * as VTable from '@visactor/vtable';\r\nimport type { Group } from '@visactor/vtable/es/scenegraph/graphic/group';\r\nimport type { MasterDetailPluginOptions } from './types';\r\nimport { includesRecordIndex, findRecordIndexPosition } from './types';\r\nimport { getInternalProps, getRecordByRowIndex, getOriginalRowHeight } from './utils';\r\nimport { ConfigManager } from './config';\r\nimport { EventManager } from './events';\r\nimport { SubTableManager } from './subtable';\r\nimport { TableAPIExtensions } from './table-api-extensions';\r\nimport { bindMasterDetailCheckboxChange } from './checkbox';\r\n\r\n/**\r\n * 主从表插件核心类\r\n */\r\nexport class MasterDetailPlugin implements VTable.plugins.IVTablePlugin {\r\n id = `Master Detail Plugin`;\r\n name = 'Master Detail Plugin';\r\n runTime = [\r\n VTable.TABLE_EVENT_TYPE.BEFORE_INIT,\r\n VTable.TABLE_EVENT_TYPE.INITIALIZED,\r\n VTable.TABLE_EVENT_TYPE.SORT_CLICK,\r\n VTable.TABLE_EVENT_TYPE.AFTER_SORT,\r\n VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_CELL_CONTENT_WIDTH,\r\n VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_SELECT_BORDER_HEIGHT\r\n ];\r\n\r\n pluginOptions: MasterDetailPluginOptions;\r\n table: VTable.ListTable;\r\n private configManager: ConfigManager;\r\n private eventManager: EventManager;\r\n private subTableManager: SubTableManager;\r\n private tableAPIExtensions: TableAPIExtensions;\r\n private resizeObserver?: ResizeObserver;\r\n private checkboxCascadeCleanup: () => void;\r\n\r\n constructor(pluginOptions: MasterDetailPluginOptions = {}) {\r\n this.pluginOptions = pluginOptions;\r\n }\r\n run(...args: unknown[]): boolean | void {\r\n const eventArgs = args[0];\r\n const runTime = args[1];\r\n const table = args[2] as VTable.ListTable;\r\n\r\n if (runTime === VTable.TABLE_EVENT_TYPE.BEFORE_INIT) {\r\n this.table = table;\r\n this.initializeManagers();\r\n this.configManager.injectMasterDetailOptions(\r\n (eventArgs as { options: VTable.ListTableConstructorOptions }).options\r\n );\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.INITIALIZED) {\r\n this.setupMasterDetailFeatures();\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.SORT_CLICK) {\r\n // 排序前处理:保存展开状态并收起所有行\r\n this.eventManager.executeMasterDetailBeforeSort();\r\n return true;\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_SORT) {\r\n // 排序后处理:恢复展开状态\r\n this.eventManager.executeMasterDetailAfterSort();\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_CELL_CONTENT_WIDTH) {\r\n // 单元格内容处理\r\n this.eventManager.handleAfterUpdateCellContentWidth(eventArgs as any);\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_SELECT_BORDER_HEIGHT) {\r\n // 高亮处理\r\n this.eventManager.handleAfterUpdateSelectBorderHeight(eventArgs as any);\r\n }\r\n }\r\n /**\r\n * 初始化管理器\r\n */\r\n private initializeManagers(): void {\r\n this.configManager = new ConfigManager(this.pluginOptions, this.table);\r\n this.eventManager = new EventManager(this.table);\r\n const enableCheckboxCascade = this.pluginOptions.enableCheckboxCascade ?? true;\r\n this.subTableManager = new SubTableManager(this.table, enableCheckboxCascade);\r\n\r\n // 设置配置管理器的行展开状态检查函数\r\n this.configManager.setRowExpandedChecker((row: number) => this.eventManager.isRowExpanded(row));\r\n // 设置配置管理器的展开行回调函数\r\n this.configManager.setExpandRowCallback((rowIndex: number) => this.expandRow(rowIndex));\r\n\r\n // 设置事件管理器的回调函数\r\n this.eventManager.setCallbacks({\r\n onUpdateSubTablePositions: () => this.subTableManager.recalculateAllSubTablePositions(),\r\n onUpdateSubTablePositionsForRow: () => this.subTableManager.updateSubTablePositionsForRowResize(),\r\n onExpandRow: (rowIndex: number, colIndex?: number) => this.expandRow(rowIndex, colIndex),\r\n onCollapseRow: (rowIndex: number, colIndex?: number) => this.collapseRow(rowIndex, colIndex),\r\n onCollapseRowToNoRealRecordIndex: (rowIndex: number) => this.collapseRowToNoRealRecordIndex(rowIndex),\r\n onToggleRowExpand: (rowIndex: number, colIndex?: number) => this.toggleRowExpand(rowIndex, colIndex),\r\n getOriginalRowHeight: (bodyRowIndex: number) => getOriginalRowHeight(this.table, bodyRowIndex)\r\n });\r\n\r\n // 设置子表管理器的回调函数\r\n this.subTableManager.setCallbacks({\r\n getDetailConfigForRecord: (record, bodyRowIndex) =>\r\n this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n });\r\n\r\n // 设置auto高度计算完成的回调\r\n this.subTableManager.setAutoHeightCallback((bodyRowIndex: number, newTotalHeight: number) => {\r\n this.handleAutoHeightUpdate(bodyRowIndex, newTotalHeight);\r\n });\r\n }\r\n\r\n /**\r\n * 设置主从表功能\r\n */\r\n private setupMasterDetailFeatures(): void {\r\n // 初始化内部属性\r\n this.initInternalProps();\r\n // 绑定事件处理器\r\n this.eventManager.bindEventHandlers();\r\n // 设置统一选择状态管理\r\n this.setupUnifiedSelectionManagement();\r\n // 扩展表格 API\r\n this.extendTableAPI();\r\n // 初始化checkbox联动功能\r\n this.initCheckboxCascade();\r\n }\r\n\r\n // 主表点击事件处理器引用\r\n private mainTableClickHandler?: () => void;\r\n\r\n /**\r\n * 设置统一选中状态管理\r\n */\r\n private setupUnifiedSelectionManagement(): void {\r\n // 绑定主表的点击事件,清除所有子表选中状态\r\n this.mainTableClickHandler = () => {\r\n this.clearAllSubTableVisibleSelections();\r\n };\r\n this.table.on('click_cell', this.mainTableClickHandler);\r\n }\r\n\r\n /**\r\n * 初始化checkbox联动功能\r\n * 设置主从表之间的复选框状态同步,并保存清理函数以便后续释放资源\r\n */\r\n private initCheckboxCascade(): void {\r\n // 检查是否启用checkbox级联功能,默认为 true\r\n const enableCheckboxCascade = this.pluginOptions.enableCheckboxCascade ?? true;\r\n if (enableCheckboxCascade) {\r\n // 设置checkbox联动并保存清理函数\r\n this.checkboxCascadeCleanup = bindMasterDetailCheckboxChange(this.table, this.eventManager);\r\n }\r\n }\r\n\r\n /**\r\n * 初始化内部属性\r\n */\r\n private initInternalProps(): void {\r\n const internalProps = getInternalProps(this.table);\r\n internalProps.expandedRecordIndices = [];\r\n internalProps.subTableInstances = new Map();\r\n internalProps.originalRowHeights = new Map();\r\n internalProps.subTableCheckboxStates = new Map();\r\n }\r\n\r\n /**\r\n * 扩展表格 API\r\n */\r\n private extendTableAPI(): void {\r\n // 创建 TableAPIExtensions 实例\r\n this.tableAPIExtensions = new TableAPIExtensions(this.table, this.configManager, this.eventManager, {\r\n addUnderlineToCell: (cellGroup: Group) => this.addUnderlineToCell(cellGroup),\r\n updateOriginalHeightsAfterAdaptive: (\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ) => this.updateOriginalHeightsAfterAdaptive(expandedRowsInfo),\r\n collapseRowToNoRealRecordIndex: (rowIndex: number) => this.collapseRowToNoRealRecordIndex(rowIndex),\r\n expandRow: (rowIndex: number) => this.expandRow(rowIndex),\r\n restoreExpandedStatesAfter: () => this.restoreExpandedStatesAfter(),\r\n collapseRow: (rowIndex: number) => this.collapseRow(rowIndex),\r\n updateSubTablePositions: () => this.subTableManager.recalculateAllSubTablePositions(),\r\n updateRowHeightForExpand: (rowIndex: number, deltaHeight: number) =>\r\n this.updateRowHeightForExpand(rowIndex, deltaHeight)\r\n });\r\n\r\n // 执行API扩展\r\n this.tableAPIExtensions.extendTableAPI();\r\n }\r\n\r\n /**\r\n * 在 adaptive 处理后更新原始高度缓存\r\n */\r\n private updateOriginalHeightsAfterAdaptive(\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ): void {\r\n const internalProps = getInternalProps(this.table);\r\n // 更新展开行的原始高度缓存\r\n for (const [rowIndex, info] of expandedRowsInfo) {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n if (internalProps.originalRowHeights) {\r\n // 将新的基础高度设置为原始高度\r\n internalProps.originalRowHeights.set(bodyRowIndex, info.baseHeight);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 分页后恢复展开状态\r\n */\r\n private restoreExpandedStatesAfter(): void {\r\n const internalProps = getInternalProps(this.table);\r\n if (!internalProps.expandedRecordIndices || internalProps.expandedRecordIndices.length === 0) {\r\n return;\r\n }\r\n const currentPagerData = this.table.dataSource._currentPagerIndexedData;\r\n if (!currentPagerData) {\r\n return;\r\n }\r\n internalProps.expandedRecordIndices.forEach(recordIndex => {\r\n try {\r\n const bodyRowIndex = this.table.getBodyRowIndexByRecordIndex(recordIndex);\r\n if (bodyRowIndex >= 0) {\r\n const targetRowIndex = bodyRowIndex + this.table.columnHeaderLevelCount;\r\n this.expandRow(targetRowIndex);\r\n }\r\n } catch (error) {\r\n console.warn(`处理记录索引 ${recordIndex} 时出错:`, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 展开行\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n expandRow(rowIndex: number, colIndex?: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n if (this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n\r\n const realRecordIndex = this.table.getRecordIndexByCell(0, rowIndex);\r\n if (realRecordIndex === undefined || realRecordIndex === null) {\r\n return;\r\n }\r\n // 更新展开行的数据源\r\n if (internalProps.expandedRecordIndices) {\r\n if (!includesRecordIndex(internalProps.expandedRecordIndices, realRecordIndex)) {\r\n internalProps.expandedRecordIndices.push(realRecordIndex);\r\n }\r\n }\r\n // 更新展开状态数组\r\n this.eventManager.addExpandedRow(rowIndex);\r\n\r\n const originalHeight = this.table.getRowHeight(rowIndex);\r\n if (internalProps.originalRowHeights) {\r\n const oldCellGroup = this.table.scenegraph.getCell(colIndex, rowIndex);\r\n // console.log(bodyRowIndex,oldCellGroup)\r\n internalProps.originalRowHeights.set(bodyRowIndex, originalHeight);\r\n }\r\n const record = getRecordByRowIndex(this.table, bodyRowIndex);\r\n const detailConfig = this.configManager.getDetailConfigForRecord(record, bodyRowIndex);\r\n const height = detailConfig?.style?.height || 300;\r\n\r\n const childrenData = Array.isArray(record.children) ? record.children : [];\r\n\r\n // 处理初始高度:如果是auto,先用默认值300展开\r\n const isAutoHeight = height === 'auto';\r\n const deltaHeight = isAutoHeight ? 300 : typeof height === 'number' ? height : 300;\r\n this.updateRowHeightForExpand(rowIndex, deltaHeight);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, deltaHeight);\r\n internalProps._heightResizedRowMap.add(rowIndex);\r\n if (rowIndex === 96) {\r\n console.log('wokk');\r\n }\r\n this.subTableManager.renderSubTable(bodyRowIndex, childrenData, (record, bodyRowIndex) =>\r\n this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n );\r\n\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.drawUnderlineForRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex, colIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n // 更新冻结线高度\r\n this.updateFrozenColumnShadowHeight();\r\n }\r\n\r\n /**\r\n * 处理auto高度更新\r\n * 当子表计算出实际内容高度后,更新主表行高\r\n */\r\n private handleAutoHeightUpdate(bodyRowIndex: number, newTotalHeight: number): void {\r\n try {\r\n const rowIndex = bodyRowIndex + this.table.columnHeaderLevelCount;\r\n // 获取当前行高\r\n const currentRowHeight = this.table.getRowHeight(rowIndex);\r\n const internalProps = getInternalProps(this.table);\r\n const originalHeight = internalProps.originalRowHeights?.get(bodyRowIndex) || 0;\r\n const currentDetailHeight = currentRowHeight - originalHeight;\r\n // 计算需要调整的高度差\r\n const heightDifference = newTotalHeight - currentDetailHeight;\r\n this.updateRowHeightForExpand(rowIndex, heightDifference);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, heightDifference);\r\n } catch (error) {\r\n console.warn('Error in auto height update:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 收起行\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n collapseRow(rowIndex: number, colIndex?: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n\r\n if (!this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n\r\n const realRecordIndex = this.table.getRecordIndexByCell(0, rowIndex);\r\n if (realRecordIndex === undefined || realRecordIndex === null) {\r\n return;\r\n }\r\n // 更新展开行的数据源\r\n this.subTableManager.removeSubTable(bodyRowIndex);\r\n if (internalProps.expandedRecordIndices) {\r\n const index = findRecordIndexPosition(internalProps.expandedRecordIndices, realRecordIndex);\r\n if (index > -1) {\r\n internalProps.expandedRecordIndices.splice(index, 1);\r\n }\r\n }\r\n\r\n // 更新展开状态数组\r\n this.eventManager.removeExpandedRow(rowIndex);\r\n\r\n const currentHeight = this.table.getRowHeight(rowIndex);\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const deltaHeight = currentHeight - originalHeight;\r\n this.updateRowHeightForExpand(rowIndex, -deltaHeight);\r\n internalProps._heightResizedRowMap.delete(rowIndex);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, -deltaHeight);\r\n if (internalProps.originalRowHeights) {\r\n internalProps.originalRowHeights.delete(bodyRowIndex);\r\n }\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.removeUnderlineFromRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex, colIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n // 更新冻结线高度\r\n this.updateFrozenColumnShadowHeight();\r\n }\r\n\r\n /**\r\n * 收起行(不修改expandedRecordIndices)\r\n */\r\n private collapseRowToNoRealRecordIndex(rowIndex: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n\r\n if (!this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n this.subTableManager.removeSubTable(bodyRowIndex);\r\n this.eventManager.removeExpandedRow(rowIndex);\r\n const currentHeight = this.table.getRowHeight(rowIndex);\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const deltaHeight = currentHeight - originalHeight;\r\n this.updateRowHeightForExpand(rowIndex, -deltaHeight);\r\n internalProps._heightResizedRowMap.delete(rowIndex);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, -deltaHeight);\r\n if (internalProps.originalRowHeights) {\r\n internalProps.originalRowHeights.delete(bodyRowIndex);\r\n }\r\n\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.removeUnderlineFromRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n // 更新冻结线高度\r\n this.updateFrozenColumnShadowHeight();\r\n }\r\n\r\n /**\r\n * 切换行展开状态\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n toggleRowExpand(rowIndex: number, colIndex?: number): void {\r\n if (this.eventManager.isRowExpanded(rowIndex)) {\r\n this.collapseRow(rowIndex, colIndex);\r\n } else {\r\n this.expandRow(rowIndex, colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 更新行高用于展开\r\n */\r\n private updateRowHeightForExpand(rowIndex: number, deltaHeight: number): void {\r\n this.table._setRowHeight(rowIndex, this.table.getRowHeight(rowIndex) + deltaHeight, true);\r\n\r\n // 更新以下行的位置\r\n const rowStart = rowIndex + 1;\r\n let rowEnd = 0;\r\n\r\n if (rowIndex < this.table.frozenRowCount) {\r\n rowEnd = this.table.frozenRowCount - 1;\r\n } else if (rowIndex >= this.table.rowCount - this.table.bottomFrozenRowCount) {\r\n rowEnd = this.table.rowCount - 1;\r\n } else {\r\n rowEnd = Math.min(\r\n (this.table.scenegraph as { proxy: { rowEnd: number } }).proxy.rowEnd,\r\n this.table.rowCount - this.table.bottomFrozenRowCount - 1\r\n );\r\n }\r\n\r\n for (let colIndex = 0; colIndex < this.table.colCount; colIndex++) {\r\n for (let rowIdx = rowStart; rowIdx <= rowEnd; rowIdx++) {\r\n const cellGroup = this.table.scenegraph.highPerformanceGetCell(colIndex, rowIdx);\r\n if (cellGroup.role === 'cell') {\r\n cellGroup.setAttribute('y', cellGroup.attribute.y + deltaHeight);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 为指定行绘制下划线\r\n */\r\n private drawUnderlineForRow(rowIndex: number): void {\r\n const sceneGraph = this.table.scenegraph;\r\n if (!sceneGraph) {\r\n return;\r\n }\r\n // 获取指定行的所有cell\r\n const rowCells = this.getRowCells(rowIndex);\r\n if (rowCells.length === 0) {\r\n return;\r\n }\r\n rowCells.forEach((cellGroup: Group, index: number) => {\r\n if (cellGroup && cellGroup.attribute) {\r\n this.addUnderlineToCell(cellGroup);\r\n }\r\n });\r\n // 触发重新渲染\r\n this.table.scenegraph.updateNextFrame();\r\n }\r\n\r\n /**\r\n * 获取指定行的所有cell元素\r\n */\r\n private getRowCells(rowIndex: number): Group[] {\r\n const cells: Group[] = [];\r\n for (let col = 0; col < this.table.colCount; col++) {\r\n const cellGroup = this.table.scenegraph.getCell(col, rowIndex);\r\n if (cellGroup && cellGroup.role === 'cell') {\r\n cells.push(cellGroup);\r\n }\r\n }\r\n return cells;\r\n }\r\n\r\n /**\r\n * 为cell添加下划线\r\n */\r\n private addUnderlineToCell(cellGroup: any): void {\r\n const currentAttr = cellGroup.attribute;\r\n const currentStrokeArrayWidth =\r\n currentAttr.strokeArrayWidth ||\r\n (currentAttr.lineWidth\r\n ? [currentAttr.lineWidth, currentAttr.lineWidth, currentAttr.lineWidth, currentAttr.lineWidth]\r\n : [1, 1, 1, 1]);\r\n const currentStrokeArrayColor =\r\n currentAttr.strokeArrayColor ||\r\n (currentAttr.stroke\r\n ? [currentAttr.stroke, currentAttr.stroke, currentAttr.stroke, currentAttr.stroke]\r\n : ['transparent', 'transparent', 'transparent', 'transparent']);\r\n const isAlreadyEnhanced = cellGroup._hasUnderline;\r\n if (!isAlreadyEnhanced) {\r\n cellGroup._originalStrokeArrayWidth = [...currentStrokeArrayWidth];\r\n cellGroup._originalStrokeArrayColor = [...currentStrokeArrayColor];\r\n cellGroup._hasUnderline = true;\r\n }\r\n const originalStrokeArrayWidth = cellGroup._originalStrokeArrayWidth || currentStrokeArrayWidth;\r\n const originalStrokeArrayColor = cellGroup._originalStrokeArrayColor || currentStrokeArrayColor;\r\n const enhancedStrokeArrayWidth = [...originalStrokeArrayWidth];\r\n const enhancedStrokeArrayColor = [...originalStrokeArrayColor];\r\n const enhancedWidth = ((originalStrokeArrayWidth[2] || 1) * 0.75 + (originalStrokeArrayWidth[0] || 1) * 0.75) * 2;\r\n enhancedStrokeArrayWidth[2] = enhancedWidth;\r\n if (originalStrokeArrayColor[2] === 'transparent' || !originalStrokeArrayColor[2]) {\r\n const theme = this.table.theme;\r\n enhancedStrokeArrayColor[2] = theme?.bodyStyle?.borderColor || '#e1e4e8';\r\n } else {\r\n enhancedStrokeArrayColor[2] = originalStrokeArrayColor[2];\r\n }\r\n cellGroup.setAttributes({\r\n strokeArrayWidth: enhancedStrokeArrayWidth,\r\n strokeArrayColor: enhancedStrokeArrayColor,\r\n stroke: true\r\n });\r\n }\r\n\r\n /**\r\n * 删除展开行的下划线\r\n */\r\n private removeUnderlineFromRow(rowIndex: number): void {\r\n const rowCells = this.getRowCells(rowIndex);\r\n rowCells.forEach((cellGroup: any, index: number) => {\r\n if (cellGroup && cellGroup._hasUnderline) {\r\n this.removeUnderlineFromCell(cellGroup);\r\n }\r\n });\r\n this.table.scenegraph.updateNextFrame();\r\n }\r\n\r\n /**\r\n * 从cell中删除下划线\r\n */\r\n private removeUnderlineFromCell(cellGroup: any): void {\r\n if (cellGroup._hasUnderline) {\r\n // 恢复原始的strokeArray样式\r\n if (cellGroup._originalStrokeArrayWidth && cellGroup._originalStrokeArrayColor) {\r\n cellGroup.setAttributes({\r\n strokeArrayWidth: cellGroup._originalStrokeArrayWidth,\r\n strokeArrayColor: cellGroup._originalStrokeArrayColor\r\n });\r\n delete cellGroup._originalStrokeArrayWidth;\r\n delete cellGroup._originalStrokeArrayColor;\r\n }\r\n // 清除下划线标记\r\n cellGroup._hasUnderline = false;\r\n }\r\n }\r\n\r\n /**\r\n * 刷新行图标\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n private refreshRowIcon(rowIndex: number, colIndex?: number): void {\r\n let targetColumnIndex: number;\r\n if (typeof colIndex === 'number') {\r\n targetColumnIndex = colIndex;\r\n } else {\r\n const hasRowSeriesNumber = !!this.table.options.rowSeriesNumber;\r\n targetColumnIndex = hasRowSeriesNumber ? 1 : 0;\r\n }\r\n\r\n const record = this.table.getCellOriginRecord(targetColumnIndex, rowIndex);\r\n if (record && typeof record === 'object') {\r\n const recordObj = record as Record<string, unknown>;\r\n const HierarchyState = VTable.TYPES.HierarchyState;\r\n const isExpanded = this.eventManager.isRowExpanded(rowIndex);\r\n recordObj.hierarchyState = isExpanded ? HierarchyState.expand : HierarchyState.collapse;\r\n this.table.scenegraph.updateHierarchyIcon(targetColumnIndex, rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 设置记录的子数据并展开\r\n */\r\n setRecordChildren(children: unknown[], col: number, row: number): void {\r\n // 获取原始记录数据\r\n const recordIndex = this.table.getRecordIndexByCell(col, row);\r\n if (recordIndex === undefined || recordIndex === null) {\r\n console.warn('Invalid row, cannot get record index');\r\n return;\r\n }\r\n\r\n const realRecordIndex = typeof recordIndex === 'number' ? recordIndex : recordIndex[0];\r\n const record = this.table.dataSource.get(realRecordIndex);\r\n if (!record) {\r\n console.warn('Cannot find record for index:', realRecordIndex);\r\n return;\r\n }\r\n\r\n // 直接修改原始记录的 children 属性\r\n (record as Record<string, unknown>).children = children;\r\n this.expandRow(row, col);\r\n this.table.scenegraph.updateCellContent(col, row);\r\n }\r\n\r\n release(): void {\r\n // 设置释放标志\r\n const internalProps = getInternalProps(this.table);\r\n if (internalProps) {\r\n (internalProps as { _isReleasing?: boolean })._isReleasing = true;\r\n }\r\n\r\n try {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = undefined;\r\n }\r\n\r\n // 清理checkbox联动功能\r\n if (this.checkboxCascadeCleanup) {\r\n try {\r\n this.checkboxCascadeCleanup();\r\n } catch (error) {\r\n console.warn('Error during checkbox cascade cleanup:', error);\r\n }\r\n this.checkboxCascadeCleanup = undefined;\r\n }\r\n\r\n // 清理事件管理器\r\n if (this.eventManager) {\r\n try {\r\n this.eventManager.cleanup();\r\n } catch (error) {\r\n console.warn('Error during event manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理子表管理器\r\n if (this.subTableManager) {\r\n try {\r\n this.subTableManager.cleanup();\r\n } catch (error) {\r\n console.warn('Error during sub table manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理配置管理器\r\n if (this.configManager) {\r\n try {\r\n this.configManager.release();\r\n } catch (error) {\r\n console.warn('Error during config manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理主从表功能\r\n this.cleanupMasterDetailFeatures();\r\n\r\n // 清理内部属性\r\n if (this.table && internalProps) {\r\n try {\r\n // 清理Map和Set,防止内存泄露\r\n internalProps.expandedRecordIndices?.splice(0);\r\n internalProps.subTableInstances?.clear();\r\n internalProps.originalRowHeights?.clear();\r\n internalProps.subTableCheckboxStates?.clear();\r\n internalProps._heightResizedRowMap?.clear();\r\n } catch (error) {\r\n console.warn('Error clearing internal props:', error);\r\n }\r\n }\r\n } catch (error) {\r\n console.warn('Error during release:', error);\r\n } finally {\r\n // 避免循环引用\r\n try {\r\n (this as unknown as { configManager: unknown }).configManager = null;\r\n (this as unknown as { eventManager: unknown }).eventManager = null;\r\n (this as unknown as { subTableManager: unknown }).subTableManager = null;\r\n (this as unknown as { tableAPIExtensions: unknown }).tableAPIExtensions = null;\r\n (this as unknown as { table: unknown }).table = null;\r\n (this as unknown as { pluginOptions: unknown }).pluginOptions = null;\r\n } catch (error) {\r\n console.warn('Error clearing references:', error);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 清除所有子表的可见选中状态\r\n */\r\n private clearAllSubTableVisibleSelections(): void {\r\n const internalProps = getInternalProps(this.table);\r\n internalProps.subTableInstances?.forEach(subTable => {\r\n if (subTable && typeof (subTable as { clearSelected?: () => void }).clearSelected === 'function') {\r\n (subTable as { clearSelected: () => void }).clearSelected();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 获取所有子表实例\r\n * @returns 子表实例的Map,键为bodyRowIndex,值为VTable实例\r\n */\r\n getAllSubTableInstances(): Map<number, VTable.ListTable> | null {\r\n return this.subTableManager.getAllSubTableInstances();\r\n }\r\n\r\n /**\r\n * 根据主表行号获取子表实例\r\n * @param rowIndex 主表行索引(包含表头)\r\n * @returns 子表实例,如果不存在则返回null\r\n */\r\n getSubTableByRowIndex(rowIndex: number): VTable.ListTable | null {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n return this.subTableManager.getSubTableInstance(bodyRowIndex);\r\n }\r\n\r\n /**\r\n * 根据主表body行号获取子表实例\r\n * @param bodyRowIndex 主表body行索引(不包含表头)\r\n * @returns 子表实例,如果不存在则返回null\r\n */\r\n getSubTableByBodyRowIndex(bodyRowIndex: number): VTable.ListTable | null {\r\n return this.subTableManager.getSubTableInstance(bodyRowIndex);\r\n }\r\n\r\n /**\r\n * 根据条件筛选子表实例\r\n * @param predicate 筛选条件函数\r\n * @returns 符合条件的子表实例数组\r\n */\r\n filterSubTables(\r\n predicate: (bodyRowIndex: number, subTable: VTable.ListTable, record?: unknown) => boolean\r\n ): Array<{ bodyRowIndex: number; subTable: VTable.ListTable; record?: unknown }> {\r\n const result: Array<{ bodyRowIndex: number; subTable: VTable.ListTable }> = [];\r\n const allSubTables = this.subTableManager.getAllSubTableInstances();\r\n if (!allSubTables) {\r\n return result;\r\n }\r\n\r\n for (const [bodyRowIndex, subTable] of allSubTables) {\r\n try {\r\n const record = getRecordByRowIndex(this.table, bodyRowIndex);\r\n if (predicate(bodyRowIndex, subTable, record)) {\r\n result.push({ bodyRowIndex, subTable });\r\n }\r\n } catch (error) {\r\n console.warn(`筛选子表时出错:`, error);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新冻结列阴影高度\r\n * 当行展开/收起导致表格总高度变化时,需要更新冻结列的阴影高度\r\n */\r\n private updateFrozenColumnShadowHeight(): void {\r\n try {\r\n // 获取当前冻结列数量\r\n const frozenColCount = this.table.frozenColCount;\r\n if (frozenColCount > 0) {\r\n this.table.scenegraph.component.setFrozenColumnShadow(frozenColCount - 1);\r\n }\r\n } catch (error) {\r\n console.warn('更新冻结列阴影高度失败:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 清理主从表功能\r\n */\r\n private cleanupMasterDetailFeatures(): void {\r\n // 清理主表事件处理器\r\n if (this.mainTableClickHandler) {\r\n this.table.off('click_cell', this.mainTableClickHandler);\r\n this.mainTableClickHandler = undefined;\r\n }\r\n // 清理表格 API 扩展\r\n if (this.tableAPIExtensions) {\r\n this.tableAPIExtensions.cleanup();\r\n this.tableAPIExtensions = undefined;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/master-detail-plugin/core.ts"],"names":[],"mappings":"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","file":"core.js","sourcesContent":["import * as VTable from '@visactor/vtable';\r\nimport type { Group } from '@visactor/vtable/es/scenegraph/graphic/group';\r\nimport type { MasterDetailPluginOptions } from './types';\r\nimport { includesRecordIndex, findRecordIndexPosition } from './types';\r\nimport { getInternalProps, getRecordByRowIndex, getOriginalRowHeight } from './utils';\r\nimport { ConfigManager } from './config';\r\nimport { EventManager } from './events';\r\nimport { SubTableManager } from './subtable';\r\nimport { TableAPIExtensions } from './table-api-extensions';\r\nimport { bindMasterDetailCheckboxChange } from './checkbox';\r\nimport type { pluginsDefinition } from '@visactor/vtable';\r\n/**\r\n * 主从表插件核心类\r\n */\r\nexport class MasterDetailPlugin implements pluginsDefinition.IVTablePlugin {\r\n id = `Master Detail Plugin`;\r\n name = 'Master Detail Plugin';\r\n runTime = [\r\n VTable.TABLE_EVENT_TYPE.BEFORE_INIT,\r\n VTable.TABLE_EVENT_TYPE.INITIALIZED,\r\n VTable.TABLE_EVENT_TYPE.SORT_CLICK,\r\n VTable.TABLE_EVENT_TYPE.AFTER_SORT,\r\n VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_CELL_CONTENT_WIDTH,\r\n VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_SELECT_BORDER_HEIGHT\r\n ];\r\n\r\n pluginOptions: MasterDetailPluginOptions;\r\n table: VTable.ListTable;\r\n private configManager: ConfigManager;\r\n private eventManager: EventManager;\r\n private subTableManager: SubTableManager;\r\n private tableAPIExtensions: TableAPIExtensions;\r\n private resizeObserver?: ResizeObserver;\r\n private checkboxCascadeCleanup: () => void;\r\n\r\n constructor(pluginOptions: MasterDetailPluginOptions = {}) {\r\n this.pluginOptions = pluginOptions;\r\n }\r\n run(...args: unknown[]): boolean | void {\r\n const eventArgs = args[0];\r\n const runTime = args[1];\r\n const table = args[2] as VTable.ListTable;\r\n\r\n if (runTime === VTable.TABLE_EVENT_TYPE.BEFORE_INIT) {\r\n this.table = table;\r\n this.initializeManagers();\r\n this.configManager.injectMasterDetailOptions(\r\n (eventArgs as { options: VTable.ListTableConstructorOptions }).options\r\n );\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.INITIALIZED) {\r\n this.setupMasterDetailFeatures();\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.SORT_CLICK) {\r\n // 排序前处理:保存展开状态并收起所有行\r\n this.eventManager.executeMasterDetailBeforeSort();\r\n return true;\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_SORT) {\r\n // 排序后处理:恢复展开状态\r\n this.eventManager.executeMasterDetailAfterSort();\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_CELL_CONTENT_WIDTH) {\r\n // 单元格内容处理\r\n this.eventManager.handleAfterUpdateCellContentWidth(eventArgs as any);\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_SELECT_BORDER_HEIGHT) {\r\n // 高亮处理\r\n this.eventManager.handleAfterUpdateSelectBorderHeight(eventArgs as any);\r\n }\r\n }\r\n /**\r\n * 初始化管理器\r\n */\r\n private initializeManagers(): void {\r\n this.configManager = new ConfigManager(this.pluginOptions, this.table);\r\n this.eventManager = new EventManager(this.table);\r\n const enableCheckboxCascade = this.pluginOptions.enableCheckboxCascade ?? true;\r\n this.subTableManager = new SubTableManager(this.table, enableCheckboxCascade);\r\n\r\n // 设置配置管理器的行展开状态检查函数\r\n this.configManager.setRowExpandedChecker((row: number) => this.eventManager.isRowExpanded(row));\r\n // 设置配置管理器的展开行回调函数\r\n this.configManager.setExpandRowCallback((rowIndex: number) => this.expandRow(rowIndex));\r\n\r\n // 设置事件管理器的回调函数\r\n this.eventManager.setCallbacks({\r\n onUpdateSubTablePositions: () => this.subTableManager.recalculateAllSubTablePositions(),\r\n onUpdateSubTablePositionsForRow: () => this.subTableManager.updateSubTablePositionsForRowResize(),\r\n onExpandRow: (rowIndex: number, colIndex?: number) => this.expandRow(rowIndex, colIndex),\r\n onCollapseRow: (rowIndex: number, colIndex?: number) => this.collapseRow(rowIndex, colIndex),\r\n onCollapseRowToNoRealRecordIndex: (rowIndex: number) => this.collapseRowToNoRealRecordIndex(rowIndex),\r\n onToggleRowExpand: (rowIndex: number, colIndex?: number) => this.toggleRowExpand(rowIndex, colIndex),\r\n getOriginalRowHeight: (bodyRowIndex: number) => getOriginalRowHeight(this.table, bodyRowIndex)\r\n });\r\n\r\n // 设置子表管理器的回调函数\r\n this.subTableManager.setCallbacks({\r\n getDetailConfigForRecord: (record, bodyRowIndex) =>\r\n this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n });\r\n\r\n // 设置auto高度计算完成的回调\r\n this.subTableManager.setAutoHeightCallback((bodyRowIndex: number, newTotalHeight: number) => {\r\n this.handleAutoHeightUpdate(bodyRowIndex, newTotalHeight);\r\n });\r\n }\r\n\r\n /**\r\n * 设置主从表功能\r\n */\r\n private setupMasterDetailFeatures(): void {\r\n // 初始化内部属性\r\n this.initInternalProps();\r\n // 绑定事件处理器\r\n this.eventManager.bindEventHandlers();\r\n // 设置统一选择状态管理\r\n this.setupUnifiedSelectionManagement();\r\n // 扩展表格 API\r\n this.extendTableAPI();\r\n // 初始化checkbox联动功能\r\n this.initCheckboxCascade();\r\n }\r\n\r\n // 主表点击事件处理器引用\r\n private mainTableClickHandler?: () => void;\r\n\r\n /**\r\n * 设置统一选中状态管理\r\n */\r\n private setupUnifiedSelectionManagement(): void {\r\n // 绑定主表的点击事件,清除所有子表选中状态\r\n this.mainTableClickHandler = () => {\r\n this.clearAllSubTableVisibleSelections();\r\n };\r\n this.table.on('click_cell', this.mainTableClickHandler);\r\n }\r\n\r\n /**\r\n * 初始化checkbox联动功能\r\n * 设置主从表之间的复选框状态同步,并保存清理函数以便后续释放资源\r\n */\r\n private initCheckboxCascade(): void {\r\n // 检查是否启用checkbox级联功能,默认为 true\r\n const enableCheckboxCascade = this.pluginOptions.enableCheckboxCascade ?? true;\r\n if (enableCheckboxCascade) {\r\n // 设置checkbox联动并保存清理函数\r\n this.checkboxCascadeCleanup = bindMasterDetailCheckboxChange(this.table, this.eventManager);\r\n }\r\n }\r\n\r\n /**\r\n * 初始化内部属性\r\n */\r\n private initInternalProps(): void {\r\n const internalProps = getInternalProps(this.table);\r\n internalProps.expandedRecordIndices = [];\r\n internalProps.subTableInstances = new Map();\r\n internalProps.originalRowHeights = new Map();\r\n internalProps.subTableCheckboxStates = new Map();\r\n }\r\n\r\n /**\r\n * 扩展表格 API\r\n */\r\n private extendTableAPI(): void {\r\n // 创建 TableAPIExtensions 实例\r\n this.tableAPIExtensions = new TableAPIExtensions(this.table, this.configManager, this.eventManager, {\r\n addUnderlineToCell: (cellGroup: Group) => this.addUnderlineToCell(cellGroup),\r\n updateOriginalHeightsAfterAdaptive: (\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ) => this.updateOriginalHeightsAfterAdaptive(expandedRowsInfo),\r\n collapseRowToNoRealRecordIndex: (rowIndex: number) => this.collapseRowToNoRealRecordIndex(rowIndex),\r\n expandRow: (rowIndex: number) => this.expandRow(rowIndex),\r\n restoreExpandedStatesAfter: () => this.restoreExpandedStatesAfter(),\r\n collapseRow: (rowIndex: number) => this.collapseRow(rowIndex),\r\n updateSubTablePositions: () => this.subTableManager.recalculateAllSubTablePositions(),\r\n updateRowHeightForExpand: (rowIndex: number, deltaHeight: number) =>\r\n this.updateRowHeightForExpand(rowIndex, deltaHeight)\r\n });\r\n\r\n // 执行API扩展\r\n this.tableAPIExtensions.extendTableAPI();\r\n }\r\n\r\n /**\r\n * 在 adaptive 处理后更新原始高度缓存\r\n */\r\n private updateOriginalHeightsAfterAdaptive(\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ): void {\r\n const internalProps = getInternalProps(this.table);\r\n // 更新展开行的原始高度缓存\r\n for (const [rowIndex, info] of expandedRowsInfo) {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n if (internalProps.originalRowHeights) {\r\n // 将新的基础高度设置为原始高度\r\n internalProps.originalRowHeights.set(bodyRowIndex, info.baseHeight);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 分页后恢复展开状态\r\n */\r\n private restoreExpandedStatesAfter(): void {\r\n const internalProps = getInternalProps(this.table);\r\n if (!internalProps.expandedRecordIndices || internalProps.expandedRecordIndices.length === 0) {\r\n return;\r\n }\r\n const currentPagerData = this.table.dataSource._currentPagerIndexedData;\r\n if (!currentPagerData) {\r\n return;\r\n }\r\n internalProps.expandedRecordIndices.forEach(recordIndex => {\r\n try {\r\n const bodyRowIndex = this.table.getBodyRowIndexByRecordIndex(recordIndex);\r\n if (bodyRowIndex >= 0) {\r\n const targetRowIndex = bodyRowIndex + this.table.columnHeaderLevelCount;\r\n this.expandRow(targetRowIndex);\r\n }\r\n } catch (error) {\r\n console.warn(`处理记录索引 ${recordIndex} 时出错:`, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 展开行\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n expandRow(rowIndex: number, colIndex?: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n if (this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n\r\n const realRecordIndex = this.table.getRecordIndexByCell(0, rowIndex);\r\n if (realRecordIndex === undefined || realRecordIndex === null) {\r\n return;\r\n }\r\n // 更新展开行的数据源\r\n if (internalProps.expandedRecordIndices) {\r\n if (!includesRecordIndex(internalProps.expandedRecordIndices, realRecordIndex)) {\r\n internalProps.expandedRecordIndices.push(realRecordIndex);\r\n }\r\n }\r\n // 更新展开状态数组\r\n this.eventManager.addExpandedRow(rowIndex);\r\n\r\n const originalHeight = this.table.getRowHeight(rowIndex);\r\n if (internalProps.originalRowHeights) {\r\n const oldCellGroup = this.table.scenegraph.getCell(colIndex, rowIndex);\r\n // console.log(bodyRowIndex,oldCellGroup)\r\n internalProps.originalRowHeights.set(bodyRowIndex, originalHeight);\r\n }\r\n const record = getRecordByRowIndex(this.table, bodyRowIndex);\r\n const detailConfig = this.configManager.getDetailConfigForRecord(record, bodyRowIndex);\r\n const height = detailConfig?.style?.height || 300;\r\n\r\n const childrenData = Array.isArray(record.children) ? record.children : [];\r\n\r\n // 处理初始高度:如果是auto,先用默认值300展开\r\n const isAutoHeight = height === 'auto';\r\n const deltaHeight = isAutoHeight ? 300 : typeof height === 'number' ? height : 300;\r\n this.updateRowHeightForExpand(rowIndex, deltaHeight);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, deltaHeight);\r\n internalProps._heightResizedRowMap.add(rowIndex);\r\n if (rowIndex === 96) {\r\n console.log('wokk');\r\n }\r\n this.subTableManager.renderSubTable(bodyRowIndex, childrenData, (record, bodyRowIndex) =>\r\n this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n );\r\n\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.drawUnderlineForRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex, colIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n // 更新冻结线高度\r\n this.updateFrozenColumnShadowHeight();\r\n }\r\n\r\n /**\r\n * 处理auto高度更新\r\n * 当子表计算出实际内容高度后,更新主表行高\r\n */\r\n private handleAutoHeightUpdate(bodyRowIndex: number, newTotalHeight: number): void {\r\n try {\r\n const rowIndex = bodyRowIndex + this.table.columnHeaderLevelCount;\r\n // 获取当前行高\r\n const currentRowHeight = this.table.getRowHeight(rowIndex);\r\n const internalProps = getInternalProps(this.table);\r\n const originalHeight = internalProps.originalRowHeights?.get(bodyRowIndex) || 0;\r\n const currentDetailHeight = currentRowHeight - originalHeight;\r\n // 计算需要调整的高度差\r\n const heightDifference = newTotalHeight - currentDetailHeight;\r\n this.updateRowHeightForExpand(rowIndex, heightDifference);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, heightDifference);\r\n } catch (error) {\r\n console.warn('Error in auto height update:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 收起行\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n collapseRow(rowIndex: number, colIndex?: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n\r\n if (!this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n\r\n const realRecordIndex = this.table.getRecordIndexByCell(0, rowIndex);\r\n if (realRecordIndex === undefined || realRecordIndex === null) {\r\n return;\r\n }\r\n // 更新展开行的数据源\r\n this.subTableManager.removeSubTable(bodyRowIndex);\r\n if (internalProps.expandedRecordIndices) {\r\n const index = findRecordIndexPosition(internalProps.expandedRecordIndices, realRecordIndex);\r\n if (index > -1) {\r\n internalProps.expandedRecordIndices.splice(index, 1);\r\n }\r\n }\r\n\r\n // 更新展开状态数组\r\n this.eventManager.removeExpandedRow(rowIndex);\r\n\r\n const currentHeight = this.table.getRowHeight(rowIndex);\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const deltaHeight = currentHeight - originalHeight;\r\n this.updateRowHeightForExpand(rowIndex, -deltaHeight);\r\n internalProps._heightResizedRowMap.delete(rowIndex);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, -deltaHeight);\r\n if (internalProps.originalRowHeights) {\r\n internalProps.originalRowHeights.delete(bodyRowIndex);\r\n }\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.removeUnderlineFromRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex, colIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n // 更新冻结线高度\r\n this.updateFrozenColumnShadowHeight();\r\n }\r\n\r\n /**\r\n * 收起行(不修改expandedRecordIndices)\r\n */\r\n private collapseRowToNoRealRecordIndex(rowIndex: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n\r\n if (!this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n this.subTableManager.removeSubTable(bodyRowIndex);\r\n this.eventManager.removeExpandedRow(rowIndex);\r\n const currentHeight = this.table.getRowHeight(rowIndex);\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const deltaHeight = currentHeight - originalHeight;\r\n this.updateRowHeightForExpand(rowIndex, -deltaHeight);\r\n internalProps._heightResizedRowMap.delete(rowIndex);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, -deltaHeight);\r\n if (internalProps.originalRowHeights) {\r\n internalProps.originalRowHeights.delete(bodyRowIndex);\r\n }\r\n\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.removeUnderlineFromRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n // 更新冻结线高度\r\n this.updateFrozenColumnShadowHeight();\r\n }\r\n\r\n /**\r\n * 切换行展开状态\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n toggleRowExpand(rowIndex: number, colIndex?: number): void {\r\n if (this.eventManager.isRowExpanded(rowIndex)) {\r\n this.collapseRow(rowIndex, colIndex);\r\n } else {\r\n this.expandRow(rowIndex, colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 更新行高用于展开\r\n */\r\n private updateRowHeightForExpand(rowIndex: number, deltaHeight: number): void {\r\n this.table._setRowHeight(rowIndex, this.table.getRowHeight(rowIndex) + deltaHeight, true);\r\n\r\n // 更新以下行的位置\r\n const rowStart = rowIndex + 1;\r\n let rowEnd = 0;\r\n\r\n if (rowIndex < this.table.frozenRowCount) {\r\n rowEnd = this.table.frozenRowCount - 1;\r\n } else if (rowIndex >= this.table.rowCount - this.table.bottomFrozenRowCount) {\r\n rowEnd = this.table.rowCount - 1;\r\n } else {\r\n rowEnd = Math.min(\r\n (this.table.scenegraph as { proxy: { rowEnd: number } }).proxy.rowEnd,\r\n this.table.rowCount - this.table.bottomFrozenRowCount - 1\r\n );\r\n }\r\n\r\n for (let colIndex = 0; colIndex < this.table.colCount; colIndex++) {\r\n for (let rowIdx = rowStart; rowIdx <= rowEnd; rowIdx++) {\r\n const cellGroup = this.table.scenegraph.highPerformanceGetCell(colIndex, rowIdx);\r\n if (cellGroup.role === 'cell') {\r\n cellGroup.setAttribute('y', cellGroup.attribute.y + deltaHeight);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 为指定行绘制下划线\r\n */\r\n private drawUnderlineForRow(rowIndex: number): void {\r\n const sceneGraph = this.table.scenegraph;\r\n if (!sceneGraph) {\r\n return;\r\n }\r\n // 获取指定行的所有cell\r\n const rowCells = this.getRowCells(rowIndex);\r\n if (rowCells.length === 0) {\r\n return;\r\n }\r\n rowCells.forEach((cellGroup: Group, index: number) => {\r\n if (cellGroup && cellGroup.attribute) {\r\n this.addUnderlineToCell(cellGroup);\r\n }\r\n });\r\n // 触发重新渲染\r\n this.table.scenegraph.updateNextFrame();\r\n }\r\n\r\n /**\r\n * 获取指定行的所有cell元素\r\n */\r\n private getRowCells(rowIndex: number): Group[] {\r\n const cells: Group[] = [];\r\n for (let col = 0; col < this.table.colCount; col++) {\r\n const cellGroup = this.table.scenegraph.getCell(col, rowIndex);\r\n if (cellGroup && cellGroup.role === 'cell') {\r\n cells.push(cellGroup);\r\n }\r\n }\r\n return cells;\r\n }\r\n\r\n /**\r\n * 为cell添加下划线\r\n */\r\n private addUnderlineToCell(cellGroup: any): void {\r\n const currentAttr = cellGroup.attribute;\r\n const currentStrokeArrayWidth =\r\n currentAttr.strokeArrayWidth ||\r\n (currentAttr.lineWidth\r\n ? [currentAttr.lineWidth, currentAttr.lineWidth, currentAttr.lineWidth, currentAttr.lineWidth]\r\n : [1, 1, 1, 1]);\r\n const currentStrokeArrayColor =\r\n currentAttr.strokeArrayColor ||\r\n (currentAttr.stroke\r\n ? [currentAttr.stroke, currentAttr.stroke, currentAttr.stroke, currentAttr.stroke]\r\n : ['transparent', 'transparent', 'transparent', 'transparent']);\r\n const isAlreadyEnhanced = cellGroup._hasUnderline;\r\n if (!isAlreadyEnhanced) {\r\n cellGroup._originalStrokeArrayWidth = [...currentStrokeArrayWidth];\r\n cellGroup._originalStrokeArrayColor = [...currentStrokeArrayColor];\r\n cellGroup._hasUnderline = true;\r\n }\r\n const originalStrokeArrayWidth = cellGroup._originalStrokeArrayWidth || currentStrokeArrayWidth;\r\n const originalStrokeArrayColor = cellGroup._originalStrokeArrayColor || currentStrokeArrayColor;\r\n const enhancedStrokeArrayWidth = [...originalStrokeArrayWidth];\r\n const enhancedStrokeArrayColor = [...originalStrokeArrayColor];\r\n const enhancedWidth = ((originalStrokeArrayWidth[2] || 1) * 0.75 + (originalStrokeArrayWidth[0] || 1) * 0.75) * 2;\r\n enhancedStrokeArrayWidth[2] = enhancedWidth;\r\n if (originalStrokeArrayColor[2] === 'transparent' || !originalStrokeArrayColor[2]) {\r\n const theme = this.table.theme;\r\n enhancedStrokeArrayColor[2] = theme?.bodyStyle?.borderColor || '#e1e4e8';\r\n } else {\r\n enhancedStrokeArrayColor[2] = originalStrokeArrayColor[2];\r\n }\r\n cellGroup.setAttributes({\r\n strokeArrayWidth: enhancedStrokeArrayWidth,\r\n strokeArrayColor: enhancedStrokeArrayColor,\r\n stroke: true\r\n });\r\n }\r\n\r\n /**\r\n * 删除展开行的下划线\r\n */\r\n private removeUnderlineFromRow(rowIndex: number): void {\r\n const rowCells = this.getRowCells(rowIndex);\r\n rowCells.forEach((cellGroup: any, index: number) => {\r\n if (cellGroup && cellGroup._hasUnderline) {\r\n this.removeUnderlineFromCell(cellGroup);\r\n }\r\n });\r\n this.table.scenegraph.updateNextFrame();\r\n }\r\n\r\n /**\r\n * 从cell中删除下划线\r\n */\r\n private removeUnderlineFromCell(cellGroup: any): void {\r\n if (cellGroup._hasUnderline) {\r\n // 恢复原始的strokeArray样式\r\n if (cellGroup._originalStrokeArrayWidth && cellGroup._originalStrokeArrayColor) {\r\n cellGroup.setAttributes({\r\n strokeArrayWidth: cellGroup._originalStrokeArrayWidth,\r\n strokeArrayColor: cellGroup._originalStrokeArrayColor\r\n });\r\n delete cellGroup._originalStrokeArrayWidth;\r\n delete cellGroup._originalStrokeArrayColor;\r\n }\r\n // 清除下划线标记\r\n cellGroup._hasUnderline = false;\r\n }\r\n }\r\n\r\n /**\r\n * 刷新行图标\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n private refreshRowIcon(rowIndex: number, colIndex?: number): void {\r\n let targetColumnIndex: number;\r\n if (typeof colIndex === 'number') {\r\n targetColumnIndex = colIndex;\r\n } else {\r\n const hasRowSeriesNumber = !!this.table.options.rowSeriesNumber;\r\n targetColumnIndex = hasRowSeriesNumber ? 1 : 0;\r\n }\r\n\r\n const record = this.table.getCellOriginRecord(targetColumnIndex, rowIndex);\r\n if (record && typeof record === 'object') {\r\n const recordObj = record as Record<string, unknown>;\r\n const HierarchyState = VTable.TYPES.HierarchyState;\r\n const isExpanded = this.eventManager.isRowExpanded(rowIndex);\r\n recordObj.hierarchyState = isExpanded ? HierarchyState.expand : HierarchyState.collapse;\r\n this.table.scenegraph.updateHierarchyIcon(targetColumnIndex, rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 设置记录的子数据并展开\r\n */\r\n setRecordChildren(children: unknown[], col: number, row: number): void {\r\n // 获取当前单元格对应的源数据记录,避免排序后索引不一致 #4986\r\n const record = this.table.getCellOriginRecord(col, row);\r\n if (!record) {\r\n console.warn('Cannot find record for cell:', col, row);\r\n return;\r\n }\r\n\r\n // 直接修改原始记录的 children 属性\r\n (record as Record<string, unknown>).children = children;\r\n this.expandRow(row, col);\r\n this.table.scenegraph.updateCellContent(col, row);\r\n }\r\n\r\n release(): void {\r\n // 设置释放标志\r\n const internalProps = getInternalProps(this.table);\r\n if (internalProps) {\r\n (internalProps as { _isReleasing?: boolean })._isReleasing = true;\r\n }\r\n\r\n try {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = undefined;\r\n }\r\n\r\n // 清理checkbox联动功能\r\n if (this.checkboxCascadeCleanup) {\r\n try {\r\n this.checkboxCascadeCleanup();\r\n } catch (error) {\r\n console.warn('Error during checkbox cascade cleanup:', error);\r\n }\r\n this.checkboxCascadeCleanup = undefined;\r\n }\r\n\r\n // 清理事件管理器\r\n if (this.eventManager) {\r\n try {\r\n this.eventManager.cleanup();\r\n } catch (error) {\r\n console.warn('Error during event manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理子表管理器\r\n if (this.subTableManager) {\r\n try {\r\n this.subTableManager.cleanup();\r\n } catch (error) {\r\n console.warn('Error during sub table manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理配置管理器\r\n if (this.configManager) {\r\n try {\r\n this.configManager.release();\r\n } catch (error) {\r\n console.warn('Error during config manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理主从表功能\r\n this.cleanupMasterDetailFeatures();\r\n\r\n // 清理内部属性\r\n if (this.table && internalProps) {\r\n try {\r\n // 清理Map和Set,防止内存泄露\r\n internalProps.expandedRecordIndices?.splice(0);\r\n internalProps.subTableInstances?.clear();\r\n internalProps.originalRowHeights?.clear();\r\n internalProps.subTableCheckboxStates?.clear();\r\n internalProps._heightResizedRowMap?.clear();\r\n } catch (error) {\r\n console.warn('Error clearing internal props:', error);\r\n }\r\n }\r\n } catch (error) {\r\n console.warn('Error during release:', error);\r\n } finally {\r\n // 避免循环引用\r\n try {\r\n (this as unknown as { configManager: unknown }).configManager = null;\r\n (this as unknown as { eventManager: unknown }).eventManager = null;\r\n (this as unknown as { subTableManager: unknown }).subTableManager = null;\r\n (this as unknown as { tableAPIExtensions: unknown }).tableAPIExtensions = null;\r\n (this as unknown as { table: unknown }).table = null;\r\n (this as unknown as { pluginOptions: unknown }).pluginOptions = null;\r\n } catch (error) {\r\n console.warn('Error clearing references:', error);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 清除所有子表的可见选中状态\r\n */\r\n private clearAllSubTableVisibleSelections(): void {\r\n const internalProps = getInternalProps(this.table);\r\n internalProps.subTableInstances?.forEach(subTable => {\r\n if (subTable && typeof (subTable as { clearSelected?: () => void }).clearSelected === 'function') {\r\n (subTable as { clearSelected: () => void }).clearSelected();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 获取所有子表实例\r\n * @returns 子表实例的Map,键为bodyRowIndex,值为VTable实例\r\n */\r\n getAllSubTableInstances(): Map<number, VTable.ListTable> | null {\r\n return this.subTableManager.getAllSubTableInstances();\r\n }\r\n\r\n /**\r\n * 根据主表行号获取子表实例\r\n * @param rowIndex 主表行索引(包含表头)\r\n * @returns 子表实例,如果不存在则返回null\r\n */\r\n getSubTableByRowIndex(rowIndex: number): VTable.ListTable | null {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n return this.subTableManager.getSubTableInstance(bodyRowIndex);\r\n }\r\n\r\n /**\r\n * 根据主表body行号获取子表实例\r\n * @param bodyRowIndex 主表body行索引(不包含表头)\r\n * @returns 子表实例,如果不存在则返回null\r\n */\r\n getSubTableByBodyRowIndex(bodyRowIndex: number): VTable.ListTable | null {\r\n return this.subTableManager.getSubTableInstance(bodyRowIndex);\r\n }\r\n\r\n /**\r\n * 根据条件筛选子表实例\r\n * @param predicate 筛选条件函数\r\n * @returns 符合条件的子表实例数组\r\n */\r\n filterSubTables(\r\n predicate: (bodyRowIndex: number, subTable: VTable.ListTable, record?: unknown) => boolean\r\n ): Array<{ bodyRowIndex: number; subTable: VTable.ListTable; record?: unknown }> {\r\n const result: Array<{ bodyRowIndex: number; subTable: VTable.ListTable }> = [];\r\n const allSubTables = this.subTableManager.getAllSubTableInstances();\r\n if (!allSubTables) {\r\n return result;\r\n }\r\n\r\n for (const [bodyRowIndex, subTable] of allSubTables) {\r\n try {\r\n const record = getRecordByRowIndex(this.table, bodyRowIndex);\r\n if (predicate(bodyRowIndex, subTable, record)) {\r\n result.push({ bodyRowIndex, subTable });\r\n }\r\n } catch (error) {\r\n console.warn(`筛选子表时出错:`, error);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新冻结列阴影高度\r\n * 当行展开/收起导致表格总高度变化时,需要更新冻结列的阴影高度\r\n */\r\n private updateFrozenColumnShadowHeight(): void {\r\n try {\r\n // 获取当前冻结列数量\r\n const frozenColCount = this.table.frozenColCount;\r\n if (frozenColCount > 0) {\r\n this.table.scenegraph.component.setFrozenColumnShadow(frozenColCount - 1);\r\n }\r\n } catch (error) {\r\n console.warn('更新冻结列阴影高度失败:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 清理主从表功能\r\n */\r\n private cleanupMasterDetailFeatures(): void {\r\n // 清理主表事件处理器\r\n if (this.mainTableClickHandler) {\r\n this.table.off('click_cell', this.mainTableClickHandler);\r\n this.mainTableClickHandler = undefined;\r\n }\r\n // 清理表格 API 扩展\r\n if (this.tableAPIExtensions) {\r\n this.tableAPIExtensions.cleanup();\r\n this.tableAPIExtensions = undefined;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -35,7 +35,7 @@ function getCopyCellValue(col, row, tableInstance, option) {
|
|
|
35
35
|
const cellRange = tableInstance.getCellRange(col, row), copyStartCol = cellRange.start.col, copyStartRow = cellRange.start.row;
|
|
36
36
|
if (copyStartCol !== col || copyStartRow !== row) return "";
|
|
37
37
|
let value = cellValue;
|
|
38
|
-
return (null == option ? void 0 : option.escape) ? value = escapeForCSV(value) : "string" == typeof value && (value = '"' + value + '"'),
|
|
38
|
+
return !1 !== (null == option ? void 0 : option.escape) ? value = escapeForCSV(value) : "string" == typeof value && (value = '"' + value + '"'),
|
|
39
39
|
value;
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/table-export/csv/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../src/table-export/csv/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { ListTable, PivotTable, PivotChart, TYPES } from '@visactor/vtable';\nimport type { CellInfo } from '../excel';\nimport { handlePaginationExport } from '../util/pagination';\n\ntype IVTable = ListTable | PivotTable | PivotChart;\ntype CellRange = TYPES.CellRange;\n\nconst newLine = '\\r\\n';\nconst separator = ',';\n\nexport type ExportVTableToCsvOptions = {\n formatExportOutput?: (cellInfo: CellInfo) => string | undefined;\n escape?: boolean;\n exportAllData?: boolean;\n downloadFile?: boolean;\n fileName?: string;\n};\n\nexport function exportVTableToCsv(\n tableInstance: ListTable | PivotTable | PivotChart,\n option?: ExportVTableToCsvOptions\n): string {\n const exportAllData = !!option?.exportAllData;\n const { handleRowCount, reset } = handlePaginationExport(tableInstance, exportAllData);\n const minRow = 0;\n const maxRow = handleRowCount();\n const minCol = 0;\n const maxCol = tableInstance.colCount - 1;\n\n let copyValue = '';\n for (let row = minRow; row <= maxRow; row++) {\n for (let col = minCol; col <= maxCol; col++) {\n const copyCellValue = getCopyCellValue(col, row, tableInstance, option);\n if (typeof Promise !== 'undefined' && copyCellValue instanceof Promise) {\n // not support async\n } else {\n const strCellValue = `${copyCellValue === undefined ? '' : copyCellValue}`;\n if (/^\\[object .*\\]$/.exec(strCellValue)) {\n // ignore object\n } else {\n copyValue += strCellValue;\n }\n }\n if (col !== maxCol) {\n copyValue += separator;\n }\n }\n copyValue += newLine;\n }\n // 恢复透视表的pagination配置\n reset();\n return copyValue;\n}\n\nfunction getCopyCellValue(\n col: number,\n row: number,\n tableInstance: ListTable | PivotTable | PivotChart,\n option?: ExportVTableToCsvOptions\n): string | Promise<string> | void {\n const rawRecord = tableInstance.getCellRawRecord(col, row);\n const cellValue = (rawRecord && rawRecord.vtableMergeName) ?? tableInstance.getCellValue(col, row, false);\n\n if (option?.formatExportOutput) {\n const cellType = tableInstance.getCellType(col, row);\n const cellInfo = { cellType, cellValue, table: tableInstance, col, row };\n const formattedValue = option.formatExportOutput(cellInfo);\n if (formattedValue !== undefined) {\n if (typeof formattedValue === 'string') {\n return '\"' + formattedValue + '\"';\n }\n return formattedValue;\n }\n }\n const cellRange: CellRange = tableInstance.getCellRange(col, row);\n const copyStartCol = cellRange.start.col;\n const copyStartRow = cellRange.start.row;\n\n if (copyStartCol !== col || copyStartRow !== row) {\n return '';\n }\n\n let value = cellValue;\n if (option?.escape !== false) {\n //escape默认逻辑改为true,进行转义\n value = escapeForCSV(value);\n } else if (typeof value === 'string') {\n value = '\"' + value + '\"';\n }\n return value;\n}\n\n/**\n * 将字符串中的特殊符号进行转义,以避免干扰CSV解析\n * @param {string} str - 需要处理的字符串\n * @return {string} - 已处理的字符串\n */\nfunction escapeForCSV(str: any) {\n if (typeof str !== 'string') {\n return str;\n }\n\n // 替换双引号为两个双引号\n let escapedStr = str.replace(/\"/g, '\"\"');\n\n // 如果字符串中包含逗号、换行符或双引号,则需要用双引号包裹\n if (/[,\"\\r\\n]/.test(escapedStr)) {\n escapedStr = `\"${escapedStr}\"`;\n }\n\n return escapedStr;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vtable-plugins",
|
|
3
|
-
"version": "1.23.
|
|
3
|
+
"version": "1.23.2",
|
|
4
4
|
"description": "The search util of VTable",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "VisActor",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"@types/file-saver": "2.0.7"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
|
-
"@visactor/vtable
|
|
46
|
-
"@visactor/vtable": "1.23.
|
|
45
|
+
"@visactor/vtable": "1.23.2",
|
|
46
|
+
"@visactor/vtable-gantt": "1.23.2"
|
|
47
47
|
},
|
|
48
48
|
"peerDependenciesMeta": {
|
|
49
49
|
"@visactor/vtable-gantt": {
|
|
@@ -53,9 +53,6 @@
|
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"cross-env": "^7.0.3",
|
|
55
55
|
"increase-memory-limit": "^1.0.7",
|
|
56
|
-
"@visactor/vtable": "1.23.1-alpha.2",
|
|
57
|
-
"@visactor/vtable-editors": "1.23.1-alpha.2",
|
|
58
|
-
"@visactor/vtable-gantt": "1.23.1-alpha.2",
|
|
59
56
|
"@visactor/vchart": "2.0.13-alpha.10",
|
|
60
57
|
"@rushstack/eslint-patch": "~1.1.4",
|
|
61
58
|
"react": "^18.0.0",
|
|
@@ -98,9 +95,12 @@
|
|
|
98
95
|
"@types/react-is": "^17.0.3",
|
|
99
96
|
"rollup-plugin-node-resolve": "5.2.0",
|
|
100
97
|
"@types/lodash": "4.14.182",
|
|
98
|
+
"@visactor/vtable": "1.23.2",
|
|
99
|
+
"@visactor/vtable-gantt": "1.23.2",
|
|
100
|
+
"@visactor/vtable-editors": "1.23.2",
|
|
101
101
|
"@internal/bundler": "0.0.1",
|
|
102
|
-
"@internal/
|
|
103
|
-
"@internal/
|
|
102
|
+
"@internal/eslint-config": "0.0.1",
|
|
103
|
+
"@internal/ts-config": "0.0.1"
|
|
104
104
|
},
|
|
105
105
|
"scripts": {
|
|
106
106
|
"demo": "vite ./demo",
|