@visactor/vtable-plugins 1.21.1 → 1.22.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.
Files changed (117) hide show
  1. package/cjs/add-row-column.js +2 -2
  2. package/cjs/add-row-column.js.map +1 -1
  3. package/cjs/auto-fill/utils/date.js +1 -1
  4. package/cjs/auto-fill/utils/fill.js +1 -1
  5. package/cjs/column-series.js +1 -1
  6. package/cjs/column-series.js.map +1 -1
  7. package/cjs/contextmenu/handle-menu-helper.js +16 -9
  8. package/cjs/contextmenu/handle-menu-helper.js.map +1 -1
  9. package/cjs/contextmenu/menu-manager.js +1 -2
  10. package/cjs/contextmenu/styles.js +2 -1
  11. package/cjs/highlight-header-when-select-cell.js +1 -1
  12. package/cjs/highlight-header-when-select-cell.js.map +1 -1
  13. package/cjs/index.d.ts +1 -0
  14. package/cjs/index.js +4 -4
  15. package/cjs/index.js.map +1 -1
  16. package/cjs/master-detail-plugin/checkbox.d.ts +5 -0
  17. package/cjs/master-detail-plugin/checkbox.js +105 -0
  18. package/cjs/master-detail-plugin/checkbox.js.map +1 -0
  19. package/cjs/master-detail-plugin/config.d.ts +17 -0
  20. package/cjs/master-detail-plugin/config.js +113 -0
  21. package/cjs/master-detail-plugin/config.js.map +1 -0
  22. package/cjs/master-detail-plugin/core.d.ts +50 -0
  23. package/cjs/master-detail-plugin/core.js +310 -0
  24. package/cjs/master-detail-plugin/core.js.map +1 -0
  25. package/cjs/master-detail-plugin/events.d.ts +59 -0
  26. package/cjs/master-detail-plugin/events.js +265 -0
  27. package/cjs/master-detail-plugin/events.js.map +1 -0
  28. package/cjs/master-detail-plugin/index.d.ts +4 -0
  29. package/cjs/master-detail-plugin/index.js +15 -0
  30. package/cjs/master-detail-plugin/index.js.map +1 -0
  31. package/cjs/master-detail-plugin/subtable.d.ts +39 -0
  32. package/cjs/master-detail-plugin/subtable.js +457 -0
  33. package/cjs/master-detail-plugin/subtable.js.map +1 -0
  34. package/cjs/master-detail-plugin/table-api-extensions.d.ts +59 -0
  35. package/cjs/master-detail-plugin/table-api-extensions.js +462 -0
  36. package/cjs/master-detail-plugin/table-api-extensions.js.map +1 -0
  37. package/cjs/master-detail-plugin/types.d.ts +61 -0
  38. package/cjs/master-detail-plugin/types.js +20 -0
  39. package/cjs/master-detail-plugin/types.js.map +1 -0
  40. package/cjs/master-detail-plugin/utils.d.ts +8 -0
  41. package/cjs/master-detail-plugin/utils.js +62 -0
  42. package/cjs/master-detail-plugin/utils.js.map +1 -0
  43. package/cjs/master-detail-plugin.d.ts +1 -0
  44. package/cjs/master-detail-plugin.js +15 -0
  45. package/cjs/master-detail-plugin.js.map +1 -0
  46. package/cjs/paste-add-row-column.js +2 -2
  47. package/cjs/paste-add-row-column.js.map +1 -1
  48. package/cjs/row-series.js +1 -2
  49. package/cjs/table-carousel-animation.js +2 -1
  50. package/cjs/table-export/csv/index.js +1 -1
  51. package/cjs/table-export/util/color.js +2 -1
  52. package/cjs/table-export/util/download.js +1 -1
  53. package/cjs/table-export/util/encode.js +1 -1
  54. package/cjs/table-export/util/indent.js +1 -1
  55. package/cjs/table-export/util/pagination.js +1 -1
  56. package/cjs/table-export/util/promise.js +1 -1
  57. package/cjs/table-export/util/type.js +1 -1
  58. package/dist/vtable-plugins.js +2885 -240
  59. package/dist/vtable-plugins.min.js +3 -3
  60. package/es/add-row-column.js +2 -2
  61. package/es/add-row-column.js.map +1 -1
  62. package/es/auto-fill/utils/date.js +1 -1
  63. package/es/auto-fill/utils/fill.js +1 -1
  64. package/es/column-series.js +1 -1
  65. package/es/column-series.js.map +1 -1
  66. package/es/contextmenu/handle-menu-helper.js +16 -9
  67. package/es/contextmenu/handle-menu-helper.js.map +1 -1
  68. package/es/contextmenu/menu-manager.js +1 -2
  69. package/es/contextmenu/styles.js +2 -1
  70. package/es/highlight-header-when-select-cell.js +1 -1
  71. package/es/highlight-header-when-select-cell.js.map +1 -1
  72. package/es/index.d.ts +1 -0
  73. package/es/index.js +2 -0
  74. package/es/index.js.map +1 -1
  75. package/es/master-detail-plugin/checkbox.d.ts +5 -0
  76. package/es/master-detail-plugin/checkbox.js +94 -0
  77. package/es/master-detail-plugin/checkbox.js.map +1 -0
  78. package/es/master-detail-plugin/config.d.ts +17 -0
  79. package/es/master-detail-plugin/config.js +80 -0
  80. package/es/master-detail-plugin/config.js.map +1 -0
  81. package/es/master-detail-plugin/core.d.ts +50 -0
  82. package/es/master-detail-plugin/core.js +285 -0
  83. package/es/master-detail-plugin/core.js.map +1 -0
  84. package/es/master-detail-plugin/events.d.ts +59 -0
  85. package/es/master-detail-plugin/events.js +232 -0
  86. package/es/master-detail-plugin/events.js.map +1 -0
  87. package/es/master-detail-plugin/index.d.ts +4 -0
  88. package/es/master-detail-plugin/index.js +4 -0
  89. package/es/master-detail-plugin/index.js.map +1 -0
  90. package/es/master-detail-plugin/subtable.d.ts +39 -0
  91. package/es/master-detail-plugin/subtable.js +426 -0
  92. package/es/master-detail-plugin/subtable.js.map +1 -0
  93. package/es/master-detail-plugin/table-api-extensions.d.ts +59 -0
  94. package/es/master-detail-plugin/table-api-extensions.js +445 -0
  95. package/es/master-detail-plugin/table-api-extensions.js.map +1 -0
  96. package/es/master-detail-plugin/types.d.ts +61 -0
  97. package/es/master-detail-plugin/types.js +12 -0
  98. package/es/master-detail-plugin/types.js.map +1 -0
  99. package/es/master-detail-plugin/utils.d.ts +8 -0
  100. package/es/master-detail-plugin/utils.js +52 -0
  101. package/es/master-detail-plugin/utils.js.map +1 -0
  102. package/es/master-detail-plugin.d.ts +1 -0
  103. package/es/master-detail-plugin.js +2 -0
  104. package/es/master-detail-plugin.js.map +1 -0
  105. package/es/paste-add-row-column.js +2 -2
  106. package/es/paste-add-row-column.js.map +1 -1
  107. package/es/row-series.js +1 -2
  108. package/es/table-carousel-animation.js +2 -1
  109. package/es/table-export/csv/index.js +1 -1
  110. package/es/table-export/util/color.js +2 -1
  111. package/es/table-export/util/download.js +1 -1
  112. package/es/table-export/util/encode.js +1 -1
  113. package/es/table-export/util/indent.js +1 -1
  114. package/es/table-export/util/pagination.js +1 -1
  115. package/es/table-export/util/promise.js +1 -1
  116. package/es/table-export/util/type.js +1 -1
  117. package/package.json +6 -6
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+
3
+ var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
4
+ void 0 === k2 && (k2 = k);
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
7
+ enumerable: !0,
8
+ get: function() {
9
+ return m[k];
10
+ }
11
+ }), Object.defineProperty(o, k2, desc);
12
+ } : function(o, m, k, k2) {
13
+ void 0 === k2 && (k2 = k), o[k2] = m[k];
14
+ }), __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function(o, v) {
15
+ Object.defineProperty(o, "default", {
16
+ enumerable: !0,
17
+ value: v
18
+ });
19
+ } : function(o, v) {
20
+ o.default = v;
21
+ }), __importStar = this && this.__importStar || function(mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k);
25
+ return __setModuleDefault(result, mod), result;
26
+ };
27
+
28
+ Object.defineProperty(exports, "__esModule", {
29
+ value: !0
30
+ }), exports.EventManager = void 0;
31
+
32
+ const VTable = __importStar(require("@visactor/vtable"));
33
+
34
+ class EventManager {
35
+ constructor(table) {
36
+ this.table = table, this.expandedRows = [], this.eventHandlers = [], this.allExpandedRowsBeforeMove = new Set,
37
+ this.isCleanedUp = !1;
38
+ }
39
+ bindEventHandlers() {
40
+ const scrollHandler = () => this.onUpdateSubTablePositions(), resizeRowHandler = () => this.onUpdateSubTablePositionsForRow();
41
+ this.table.on(VTable.TABLE_EVENT_TYPE.SCROLL, scrollHandler), this.table.on(VTable.TABLE_EVENT_TYPE.RESIZE_ROW, resizeRowHandler),
42
+ this.eventHandlers.push({
43
+ type: VTable.TABLE_EVENT_TYPE.SCROLL,
44
+ handler: scrollHandler
45
+ }, {
46
+ type: VTable.TABLE_EVENT_TYPE.RESIZE_ROW,
47
+ handler: resizeRowHandler
48
+ }), this.wrapTableResizeMethod(), this.bindTreeHierarchyStateChange(), this.bindRowMoveEvents();
49
+ }
50
+ wrapTableResizeMethod() {
51
+ const originalResize = this.table.resize.bind(this.table);
52
+ this.originalResize = originalResize, this.table.resize = () => {
53
+ originalResize(), this.onUpdateSubTablePositions();
54
+ };
55
+ }
56
+ handleAfterUpdateCellContentWidth(eventData) {
57
+ var _a;
58
+ const {col: col, row: row, cellGroup: cellGroup, cellHeight: cellHeight, padding: padding, textBaseline: textBaseline} = eventData;
59
+ if (this.isCustomMergeCell(col, row)) return void this.fixCustomMergeCellTextPosition(cellGroup, padding);
60
+ let effectiveCellHeight = cellHeight;
61
+ if (void 0 !== cellGroup.col && void 0 !== cellGroup.row) try {
62
+ const recordIndex = this.table.getRecordShowIndexByCell(cellGroup.col, cellGroup.row);
63
+ if (void 0 !== recordIndex) {
64
+ const originalHeight = (null === (_a = this.getOriginalRowHeight) || void 0 === _a ? void 0 : _a.call(this, recordIndex)) || 0;
65
+ if (originalHeight > 0) {
66
+ effectiveCellHeight = originalHeight;
67
+ const newHeight = effectiveCellHeight - (padding[0] + padding[2]);
68
+ cellGroup.forEachChildren((child => {
69
+ "rect" !== child.type && "chart" !== child.type && "custom-container" !== child.name && ("mark" === child.name ? child.setAttribute("y", 0) : "middle" === textBaseline ? child.setAttribute("y", padding[0] + (newHeight - child.AABBBounds.height()) / 2) : "bottom" === textBaseline ? child.setAttribute("y", padding[0] + newHeight - child.AABBBounds.height()) : child.setAttribute("y", padding[0]));
70
+ }));
71
+ }
72
+ }
73
+ } catch (error) {}
74
+ }
75
+ fixCustomMergeCellTextPosition(cellGroup, padding) {
76
+ const {col: col, row: row} = cellGroup, table = this.table, customMerge = table.getCustomMerge(col, row);
77
+ if (!customMerge || !customMerge.style || !customMerge.range) return;
78
+ const configuredTextAlign = customMerge.style.textAlign || "left", {start: start, end: end} = customMerge.range;
79
+ let totalMergeWidth = 0, mergeStartX = 0;
80
+ for (let c = start.col; c <= end.col; c++) totalMergeWidth += table.getColWidth(c);
81
+ for (let c = 0; c < start.col; c++) mergeStartX += table.getColWidth(c);
82
+ cellGroup.forEachChildren((child => {
83
+ if ("text" === child.name || "content" === child.name) {
84
+ let xPosition;
85
+ xPosition = "center" === configuredTextAlign ? mergeStartX + padding[3] + (totalMergeWidth - padding[1] - padding[3]) / 2 : "right" === configuredTextAlign ? mergeStartX + totalMergeWidth - padding[1] : mergeStartX + padding[3],
86
+ child.setAttribute("x", xPosition), child.setAttribute("textAlign", configuredTextAlign);
87
+ }
88
+ }));
89
+ }
90
+ isCustomMergeCell(col, row) {
91
+ try {
92
+ const table = this.table;
93
+ if (table && table.getCustomMerge) {
94
+ return !!table.getCustomMerge(col, row);
95
+ }
96
+ } catch (error) {}
97
+ return !1;
98
+ }
99
+ handleAfterUpdateSelectBorderHeight(eventData) {
100
+ var _a, _b;
101
+ const {startRow: startRow, endRow: endRow, selectComp: selectComp} = eventData, isSingleCellSelection = startRow === endRow, isLastRowExpanded = this.expandedRows.includes(endRow);
102
+ if (isSingleCellSelection) {
103
+ const bodyRowIndex = startRow - (this.table.columnHeaderLevelCount || 0), originalHeight = (null === (_a = this.getOriginalRowHeight) || void 0 === _a ? void 0 : _a.call(this, bodyRowIndex)) || 0;
104
+ if (originalHeight > 0 && originalHeight !== eventData.currentHeight && (selectComp.rect.setAttributes({
105
+ height: originalHeight
106
+ }), selectComp.fillhandle)) {
107
+ const currentY = selectComp.rect.attribute.y;
108
+ selectComp.fillhandle.setAttributes({
109
+ y: currentY + originalHeight
110
+ });
111
+ }
112
+ } else if (isLastRowExpanded) {
113
+ const lastRowBodyIndex = endRow - (this.table.columnHeaderLevelCount || 0), lastRowOriginalHeight = (null === (_b = this.getOriginalRowHeight) || void 0 === _b ? void 0 : _b.call(this, lastRowBodyIndex)) || 0;
114
+ if (lastRowOriginalHeight > 0) {
115
+ const lastRowCurrentHeight = this.table.getRowHeight(endRow), adjustedTotalHeight = eventData.currentHeight - lastRowCurrentHeight + lastRowOriginalHeight;
116
+ if (selectComp.rect.setAttributes({
117
+ height: adjustedTotalHeight
118
+ }), selectComp.fillhandle) {
119
+ const currentY = selectComp.rect.attribute.y;
120
+ selectComp.fillhandle.setAttributes({
121
+ y: currentY + adjustedTotalHeight
122
+ });
123
+ }
124
+ }
125
+ }
126
+ }
127
+ executeMasterDetailBeforeSort() {
128
+ const table = this.table;
129
+ if (table.internalProps.expandedRecordIndices && table.internalProps.expandedRecordIndices.length > 0 && (table.internalProps._tempExpandedRecordIndices = [ ...table.internalProps.expandedRecordIndices ]),
130
+ this.expandedRows.length > 0) {
131
+ [ ...this.expandedRows ].forEach((rowIndex => {
132
+ var _a, _b;
133
+ try {
134
+ const tableOptions = table.options;
135
+ tableOptions && tableOptions.pagination ? null === (_a = this.onCollapseRowToNoRealRecordIndex) || void 0 === _a || _a.call(this, rowIndex) : null === (_b = this.onCollapseRow) || void 0 === _b || _b.call(this, rowIndex);
136
+ } catch (e) {}
137
+ }));
138
+ }
139
+ }
140
+ executeMasterDetailAfterSort() {
141
+ const table = this.table, tempExpandedRecordIndices = table.internalProps._tempExpandedRecordIndices;
142
+ if (tempExpandedRecordIndices && tempExpandedRecordIndices.length > 0) {
143
+ [ ...tempExpandedRecordIndices ].forEach((recordIndex => {
144
+ var _a;
145
+ const bodyRowIndex = table.getBodyRowIndexByRecordIndex(recordIndex);
146
+ if (bodyRowIndex >= 0) try {
147
+ const targetRowIndex = bodyRowIndex + table.columnHeaderLevelCount;
148
+ null === (_a = this.onExpandRow) || void 0 === _a || _a.call(this, targetRowIndex);
149
+ } catch (e) {}
150
+ })), delete table.internalProps._tempExpandedRecordIndices;
151
+ }
152
+ }
153
+ getExpandedRows() {
154
+ return this.expandedRows;
155
+ }
156
+ setExpandedRows(rows) {
157
+ this.expandedRows = rows;
158
+ }
159
+ addExpandedRow(rowIndex) {
160
+ this.expandedRows.includes(rowIndex) || this.expandedRows.push(rowIndex);
161
+ }
162
+ removeExpandedRow(rowIndex) {
163
+ const index = this.expandedRows.indexOf(rowIndex);
164
+ index > -1 && this.expandedRows.splice(index, 1);
165
+ }
166
+ isRowExpanded(rowIndex) {
167
+ return this.expandedRows.includes(rowIndex);
168
+ }
169
+ bindTreeHierarchyStateChange() {
170
+ const hierarchyStateChangeHandler = args => {
171
+ var _a;
172
+ const {col: col, row: row} = args, record = this.getRecordByRowIndex(row - this.table.columnHeaderLevelCount);
173
+ record && "object" == typeof record && "children" in record && !0 === record.children || null === (_a = this.onToggleRowExpand) || void 0 === _a || _a.call(this, row, col);
174
+ };
175
+ this.table.on(VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, hierarchyStateChangeHandler),
176
+ this.eventHandlers.push({
177
+ type: VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE,
178
+ handler: hierarchyStateChangeHandler
179
+ });
180
+ }
181
+ getRecordByRowIndex(bodyRowIndex) {
182
+ try {
183
+ const table = this.table, recordIndex = table.getRecordShowIndexByCell(0, bodyRowIndex + table.columnHeaderLevelCount);
184
+ return table.dataSource.get(recordIndex);
185
+ } catch (error) {
186
+ return null;
187
+ }
188
+ }
189
+ bindRowMoveEvents() {
190
+ const moveStartHandler = args => {
191
+ var _a, _b;
192
+ if (!args || "number" != typeof args.col || "number" != typeof args.row) return;
193
+ const {col: col, row: row} = args;
194
+ if (!("rowHeader" === this.table.getCellLocation(col, row) || (null === (_b = (_a = this.table.internalProps.layoutMap).isSeriesNumberInBody) || void 0 === _b ? void 0 : _b.call(_a, col, row)))) return;
195
+ this.allExpandedRowsBeforeMove.clear();
196
+ const currentExpandedRows = [ ...this.expandedRows ];
197
+ currentExpandedRows.forEach((rowIndex => {
198
+ this.allExpandedRowsBeforeMove.add(rowIndex);
199
+ })), currentExpandedRows.forEach((rowIndex => {
200
+ var _a;
201
+ null === (_a = this.onCollapseRow) || void 0 === _a || _a.call(this, rowIndex);
202
+ }));
203
+ }, moveSuccessHandler = args => {
204
+ var _a;
205
+ if (0 === this.allExpandedRowsBeforeMove.size) return;
206
+ const columnMoveState = null === (_a = this.table.stateManager) || void 0 === _a ? void 0 : _a.columnMove, {colSource: colSource, rowSource: rowSource, colTarget: colTarget, rowTarget: rowTarget} = columnMoveState;
207
+ setTimeout((() => {
208
+ const sourceRowIndex = rowSource, targetRowIndex = rowTarget, moveDirection = targetRowIndex > sourceRowIndex ? "down" : "up";
209
+ this.allExpandedRowsBeforeMove.forEach((originalRowIndex => {
210
+ var _a;
211
+ let newRowIndex = originalRowIndex;
212
+ sourceRowIndex === originalRowIndex ? newRowIndex = targetRowIndex : "down" === moveDirection ? originalRowIndex <= targetRowIndex && originalRowIndex > sourceRowIndex && (newRowIndex = originalRowIndex - 1) : "up" === moveDirection && originalRowIndex >= targetRowIndex && originalRowIndex < sourceRowIndex && (newRowIndex = originalRowIndex + 1),
213
+ null === (_a = this.onExpandRow) || void 0 === _a || _a.call(this, newRowIndex);
214
+ })), this.allExpandedRowsBeforeMove.clear();
215
+ }), 0);
216
+ }, moveFailHandler = args => {
217
+ 0 !== this.allExpandedRowsBeforeMove.size && setTimeout((() => {
218
+ this.allExpandedRowsBeforeMove.forEach((originalRowIndex => {
219
+ var _a;
220
+ null === (_a = this.onExpandRow) || void 0 === _a || _a.call(this, originalRowIndex);
221
+ })), this.allExpandedRowsBeforeMove.clear();
222
+ }), 0);
223
+ };
224
+ this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, moveStartHandler),
225
+ this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, moveSuccessHandler),
226
+ this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, moveFailHandler),
227
+ this.eventHandlers.push({
228
+ type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START,
229
+ handler: moveStartHandler
230
+ }, {
231
+ type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION,
232
+ handler: moveSuccessHandler
233
+ }, {
234
+ type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL,
235
+ handler: moveFailHandler
236
+ });
237
+ }
238
+ cleanup() {
239
+ if (!this.isCleanedUp) {
240
+ if (this.isCleanedUp = !0, this.expandedRows.length = 0, this.allExpandedRowsBeforeMove.clear(),
241
+ this.originalResize && this.table) try {
242
+ this.table.resize = this.originalResize, this.originalResize = void 0;
243
+ } catch (error) {}
244
+ try {
245
+ this.table && (this.eventHandlers.forEach((({type: type, handler: handler}) => {
246
+ try {
247
+ this.table.off(type, handler);
248
+ } catch (error) {}
249
+ })), this.eventHandlers.length = 0);
250
+ } catch (error) {}
251
+ this.onUpdateSubTablePositions = void 0, this.onUpdateSubTablePositionsForRow = void 0,
252
+ this.onExpandRow = void 0, this.onCollapseRow = void 0, this.onCollapseRowToNoRealRecordIndex = void 0,
253
+ this.onToggleRowExpand = void 0, this.getOriginalRowHeight = void 0, this.table = null;
254
+ }
255
+ }
256
+ setCallbacks(callbacks) {
257
+ this.onUpdateSubTablePositions = callbacks.onUpdateSubTablePositions, this.onUpdateSubTablePositionsForRow = callbacks.onUpdateSubTablePositionsForRow,
258
+ this.onExpandRow = callbacks.onExpandRow, this.onCollapseRow = callbacks.onCollapseRow,
259
+ this.onCollapseRowToNoRealRecordIndex = callbacks.onCollapseRowToNoRealRecordIndex,
260
+ this.onToggleRowExpand = callbacks.onToggleRowExpand, this.getOriginalRowHeight = callbacks.getOriginalRowHeight;
261
+ }
262
+ }
263
+
264
+ exports.EventManager = EventManager;
265
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/master-detail-plugin/events.ts"],"names":[],"mappings":"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","file":"events.js","sourcesContent":["import * as VTable from '@visactor/vtable';\r\n\r\n/**\r\n * 事件处理相关功能\r\n */\r\nexport class EventManager {\r\n private expandedRows: number[] = [];\r\n private originalResize: (() => void) | undefined;\r\n private eventHandlers: Array<{ type: string; handler: (...args: unknown[]) => unknown }> = [];\r\n private allExpandedRowsBeforeMove: Set<number> = new Set();\r\n private isCleanedUp = false;\r\n\r\n constructor(private table: VTable.ListTable) {}\r\n\r\n /**\r\n * 绑定事件处理器\r\n */\r\n bindEventHandlers(): void {\r\n const scrollHandler = () => this.onUpdateSubTablePositions();\r\n const resizeRowHandler = () => this.onUpdateSubTablePositionsForRow();\r\n this.table.on(VTable.TABLE_EVENT_TYPE.SCROLL, scrollHandler);\r\n this.table.on(VTable.TABLE_EVENT_TYPE.RESIZE_ROW, resizeRowHandler);\r\n this.eventHandlers.push(\r\n { type: VTable.TABLE_EVENT_TYPE.SCROLL, handler: scrollHandler },\r\n { type: VTable.TABLE_EVENT_TYPE.RESIZE_ROW, handler: resizeRowHandler }\r\n );\r\n this.wrapTableResizeMethod();\r\n this.bindTreeHierarchyStateChange();\r\n this.bindRowMoveEvents();\r\n }\r\n\r\n /**\r\n * 包装表格resize方法\r\n */\r\n private wrapTableResizeMethod(): void {\r\n const originalResize = this.table.resize.bind(this.table);\r\n this.originalResize = originalResize;\r\n this.table.resize = () => {\r\n originalResize();\r\n this.onUpdateSubTablePositions();\r\n };\r\n }\r\n\r\n /**\r\n * 处理单元格内容宽度更新后的事件\r\n */\r\n handleAfterUpdateCellContentWidth(eventData: {\r\n col: number;\r\n row: number;\r\n cellHeight: number;\r\n cellGroup: any;\r\n padding: [number, number, number, number];\r\n textBaseline: CanvasTextBaseline;\r\n }): void {\r\n const { col, row, cellGroup, cellHeight, padding, textBaseline } = eventData;\r\n // 检查是否为 customMergeCell,如果是则修正文字位置\r\n if (this.isCustomMergeCell(col, row)) {\r\n this.fixCustomMergeCellTextPosition(cellGroup, padding);\r\n return;\r\n }\r\n let effectiveCellHeight = cellHeight;\r\n if (cellGroup.col !== undefined && cellGroup.row !== undefined) {\r\n try {\r\n const recordIndex = this.table.getRecordShowIndexByCell(cellGroup.col, cellGroup.row);\r\n if (recordIndex !== undefined) {\r\n const originalHeight = this.getOriginalRowHeight?.(recordIndex) || 0;\r\n if (originalHeight > 0) {\r\n effectiveCellHeight = originalHeight;\r\n // 重新调整单元格内容的纵向位置,使用原始高度\r\n const newHeight = effectiveCellHeight - (padding[0] + padding[2]);\r\n cellGroup.forEachChildren((child: any) => {\r\n if (child.type === 'rect' || child.type === 'chart' || child.name === 'custom-container') {\r\n return;\r\n }\r\n if (child.name === 'mark') {\r\n child.setAttribute('y', 0);\r\n } else if (textBaseline === 'middle') {\r\n child.setAttribute('y', padding[0] + (newHeight - child.AABBBounds.height()) / 2);\r\n } else if (textBaseline === 'bottom') {\r\n child.setAttribute('y', padding[0] + newHeight - child.AABBBounds.height());\r\n } else {\r\n child.setAttribute('y', padding[0]);\r\n }\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.warn(\r\n 'Failed to get original row height in masterDetail mode (handleAfterUpdateCellContentWidth):',\r\n error\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 修正 customMergeCell 的文字位置\r\n */\r\n private fixCustomMergeCellTextPosition(cellGroup: any, padding: [number, number, number, number]): void {\r\n const { col, row } = cellGroup;\r\n const table = this.table as any;\r\n const customMerge = table.getCustomMerge(col, row);\r\n if (!customMerge || !customMerge.style || !customMerge.range) {\r\n return;\r\n }\r\n // 获取配置的 textAlign,默认为 'left'\r\n const configuredTextAlign = customMerge.style.textAlign || 'left';\r\n const { start, end } = customMerge.range;\r\n let totalMergeWidth = 0;\r\n let mergeStartX = 0;\r\n for (let c = start.col; c <= end.col; c++) {\r\n totalMergeWidth += table.getColWidth(c);\r\n }\r\n for (let c = 0; c < start.col; c++) {\r\n mergeStartX += table.getColWidth(c);\r\n }\r\n cellGroup.forEachChildren((child: any) => {\r\n if (child.name === 'text' || child.name === 'content') {\r\n let xPosition: number;\r\n if (configuredTextAlign === 'center') {\r\n // 居中对齐:合并区域起始位置 + padding + 合并区域宽度的一半\r\n xPosition = mergeStartX + padding[3] + (totalMergeWidth - padding[1] - padding[3]) / 2;\r\n } else if (configuredTextAlign === 'right') {\r\n // 右对齐:合并区域起始位置 + 合并区域总宽度 - 右padding\r\n xPosition = mergeStartX + totalMergeWidth - padding[1];\r\n } else {\r\n // 左对齐:合并区域起始位置 + 左padding\r\n xPosition = mergeStartX + padding[3];\r\n }\r\n child.setAttribute('x', xPosition);\r\n child.setAttribute('textAlign', configuredTextAlign);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 检查是否为 customMergeCell\r\n */\r\n private isCustomMergeCell(col: number, row: number): boolean {\r\n try {\r\n const table = this.table;\r\n if (table && table.getCustomMerge) {\r\n const customMerge = table.getCustomMerge(col, row);\r\n return !!customMerge;\r\n }\r\n } catch (error) {\r\n console.warn('Error checking custom merge cell:', error);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * 处理选择边框高度更新后的事件\r\n */\r\n handleAfterUpdateSelectBorderHeight(eventData: {\r\n startRow: number;\r\n endRow: number;\r\n currentHeight: number;\r\n selectComp: { rect: any; fillhandle?: any; role: string };\r\n }): void {\r\n const { startRow, endRow, selectComp } = eventData;\r\n // 判断是否为单选一个单元格\r\n const isSingleCellSelection = startRow === endRow;\r\n // 判断选中区域的最后一行是否为展开行\r\n const isLastRowExpanded = this.expandedRows.includes(endRow);\r\n if (isSingleCellSelection) {\r\n // 单选一个CellGroup,使用原始高度\r\n const headerCount = this.table.columnHeaderLevelCount || 0;\r\n const bodyRowIndex = startRow - headerCount;\r\n const originalHeight = this.getOriginalRowHeight?.(bodyRowIndex) || 0;\r\n if (originalHeight > 0 && originalHeight !== eventData.currentHeight) {\r\n selectComp.rect.setAttributes({\r\n height: originalHeight\r\n });\r\n if (selectComp.fillhandle) {\r\n const currentY = selectComp.rect.attribute.y;\r\n selectComp.fillhandle.setAttributes({\r\n y: currentY + originalHeight\r\n });\r\n }\r\n }\r\n } else if (isLastRowExpanded) {\r\n // 多行选中且最后一行是展开行,需要调整总高度\r\n const headerCount = this.table.columnHeaderLevelCount || 0;\r\n const lastRowBodyIndex = endRow - headerCount;\r\n const lastRowOriginalHeight = this.getOriginalRowHeight?.(lastRowBodyIndex) || 0;\r\n if (lastRowOriginalHeight > 0) {\r\n // 获取最后一行的当前逻辑高度\r\n const lastRowCurrentHeight = this.table.getRowHeight(endRow);\r\n // 计算调整后的总高度:当前总高度 - 最后一行当前高度 + 最后一行原始高度\r\n const adjustedTotalHeight = eventData.currentHeight - lastRowCurrentHeight + lastRowOriginalHeight;\r\n selectComp.rect.setAttributes({\r\n height: adjustedTotalHeight\r\n });\r\n if (selectComp.fillhandle) {\r\n const currentY = selectComp.rect.attribute.y;\r\n selectComp.fillhandle.setAttributes({\r\n y: currentY + adjustedTotalHeight\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 排序前的操作\r\n */\r\n executeMasterDetailBeforeSort(): void {\r\n const table = this.table as any;\r\n if (table.internalProps.expandedRecordIndices && table.internalProps.expandedRecordIndices.length > 0) {\r\n table.internalProps._tempExpandedRecordIndices = [...table.internalProps.expandedRecordIndices];\r\n }\r\n if (this.expandedRows.length > 0) {\r\n const expandedRowIndices = [...this.expandedRows];\r\n expandedRowIndices.forEach(rowIndex => {\r\n try {\r\n const tableOptions = (table as any).options;\r\n if (tableOptions && tableOptions.pagination) {\r\n this.onCollapseRowToNoRealRecordIndex?.(rowIndex);\r\n } else {\r\n this.onCollapseRow?.(rowIndex);\r\n }\r\n } catch (e) {\r\n // 收起失败\r\n console.warn(`Failed to collapse row ${rowIndex} before sort:`, e);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * 排序后的操作\r\n */\r\n executeMasterDetailAfterSort(): void {\r\n const table = this.table as any;\r\n const tempExpandedRecordIndices = table.internalProps._tempExpandedRecordIndices;\r\n if (tempExpandedRecordIndices && tempExpandedRecordIndices.length > 0) {\r\n const recordIndicesArray = [...tempExpandedRecordIndices];\r\n recordIndicesArray.forEach(recordIndex => {\r\n const bodyRowIndex = table.getBodyRowIndexByRecordIndex(recordIndex);\r\n if (bodyRowIndex >= 0) {\r\n try {\r\n const targetRowIndex = bodyRowIndex + table.columnHeaderLevelCount;\r\n this.onExpandRow?.(targetRowIndex);\r\n } catch (e) {\r\n console.warn(`Failed to expand row ${bodyRowIndex + table.columnHeaderLevelCount} after sort:`, e);\r\n }\r\n }\r\n });\r\n // 清理临时变量\r\n delete table.internalProps._tempExpandedRecordIndices;\r\n }\r\n }\r\n /**\r\n * 获取展开的行数组\r\n */\r\n getExpandedRows(): number[] {\r\n return this.expandedRows;\r\n }\r\n\r\n /**\r\n * 设置展开的行数组\r\n */\r\n setExpandedRows(rows: number[]): void {\r\n this.expandedRows = rows;\r\n }\r\n\r\n /**\r\n * 添加展开行\r\n */\r\n addExpandedRow(rowIndex: number): void {\r\n if (!this.expandedRows.includes(rowIndex)) {\r\n this.expandedRows.push(rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 移除展开行\r\n */\r\n removeExpandedRow(rowIndex: number): void {\r\n const index = this.expandedRows.indexOf(rowIndex);\r\n if (index > -1) {\r\n this.expandedRows.splice(index, 1);\r\n }\r\n }\r\n\r\n /**\r\n * 检查行是否展开\r\n */\r\n isRowExpanded(rowIndex: number): boolean {\r\n return this.expandedRows.includes(rowIndex);\r\n }\r\n\r\n /**\r\n * 绑定树状态变化事件\r\n */\r\n private bindTreeHierarchyStateChange(): void {\r\n const hierarchyStateChangeHandler = (args: unknown) => {\r\n const { col, row } = args as {\r\n col: number;\r\n row: number;\r\n };\r\n const record = this.getRecordByRowIndex(row - this.table.columnHeaderLevelCount);\r\n if (record && typeof record === 'object' && 'children' in record && record.children === true) {\r\n return;\r\n }\r\n this.onToggleRowExpand?.(row, col);\r\n };\r\n this.table.on(VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, hierarchyStateChangeHandler);\r\n this.eventHandlers.push({\r\n type: VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE,\r\n handler: hierarchyStateChangeHandler\r\n });\r\n }\r\n\r\n /**\r\n * 获取指定行的记录数据\r\n */\r\n private getRecordByRowIndex(bodyRowIndex: number): unknown {\r\n try {\r\n const table = this.table;\r\n const recordIndex = table.getRecordShowIndexByCell(0, bodyRowIndex + table.columnHeaderLevelCount);\r\n return table.dataSource.get(recordIndex);\r\n } catch (error) {\r\n console.warn('Error getting record by row index:', error);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * 绑定行移动事件处理\r\n */\r\n private bindRowMoveEvents(): void {\r\n const moveStartHandler = (args: any) => {\r\n if (!args || typeof args.col !== 'number' || typeof args.row !== 'number') {\r\n return;\r\n }\r\n const { col, row } = args;\r\n const cellLocation = this.table.getCellLocation(col, row);\r\n const isRowMove =\r\n cellLocation === 'rowHeader' || (this.table.internalProps.layoutMap as any).isSeriesNumberInBody?.(col, row);\r\n if (!isRowMove) {\r\n return;\r\n }\r\n this.allExpandedRowsBeforeMove.clear();\r\n const currentExpandedRows = [...this.expandedRows];\r\n currentExpandedRows.forEach(rowIndex => {\r\n this.allExpandedRowsBeforeMove.add(rowIndex);\r\n });\r\n currentExpandedRows.forEach(rowIndex => {\r\n this.onCollapseRow?.(rowIndex);\r\n });\r\n };\r\n\r\n const moveSuccessHandler = (args: any) => {\r\n // 如果没有记录的展开状态,说明不是行移动或没有展开的行\r\n if (this.allExpandedRowsBeforeMove.size === 0) {\r\n return;\r\n }\r\n\r\n // 直接从columnMove状态获取原始的移动参数\r\n const columnMoveState = this.table.stateManager?.columnMove;\r\n const { colSource, rowSource, colTarget, rowTarget } = columnMoveState;\r\n // 移动成功后,恢复所有之前展开的行\r\n setTimeout(() => {\r\n const sourceRowIndex = rowSource;\r\n const targetRowIndex = rowTarget;\r\n const moveDirection = targetRowIndex > sourceRowIndex ? 'down' : 'up';\r\n // 计算移动后各行的新位置并重新展开\r\n this.allExpandedRowsBeforeMove.forEach(originalRowIndex => {\r\n let newRowIndex = originalRowIndex;\r\n\r\n if (sourceRowIndex === originalRowIndex) {\r\n newRowIndex = targetRowIndex;\r\n } else if (moveDirection === 'down') {\r\n if (originalRowIndex <= targetRowIndex && originalRowIndex > sourceRowIndex) {\r\n newRowIndex = originalRowIndex - 1;\r\n }\r\n } else if (moveDirection === 'up') {\r\n if (originalRowIndex >= targetRowIndex && originalRowIndex < sourceRowIndex) {\r\n newRowIndex = originalRowIndex + 1;\r\n }\r\n }\r\n this.onExpandRow?.(newRowIndex);\r\n });\r\n // 清空状态记录\r\n this.allExpandedRowsBeforeMove.clear();\r\n }, 0);\r\n };\r\n\r\n const moveFailHandler = (args: any) => {\r\n // 如果没有记录的展开状态,说明不是行移动或没有展开的行\r\n if (this.allExpandedRowsBeforeMove.size === 0) {\r\n return;\r\n }\r\n\r\n // 移动失败时,在原位置恢复所有展开的行\r\n setTimeout(() => {\r\n this.allExpandedRowsBeforeMove.forEach(originalRowIndex => {\r\n this.onExpandRow?.(originalRowIndex);\r\n });\r\n this.allExpandedRowsBeforeMove.clear();\r\n }, 0);\r\n };\r\n\r\n this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, moveStartHandler);\r\n this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, moveSuccessHandler);\r\n this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, moveFailHandler);\r\n this.eventHandlers.push(\r\n { type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, handler: moveStartHandler },\r\n { type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, handler: moveSuccessHandler },\r\n { type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, handler: moveFailHandler }\r\n );\r\n }\r\n\r\n /**\r\n * 清理事件处理器\r\n */\r\n cleanup(): void {\r\n if (this.isCleanedUp) {\r\n return; // 防止重复清理\r\n }\r\n this.isCleanedUp = true;\r\n // 清理展开状态数组\r\n this.expandedRows.length = 0;\r\n // 清理行移动状态\r\n this.allExpandedRowsBeforeMove.clear();\r\n // 恢复原始的resize方法\r\n if (this.originalResize && this.table) {\r\n try {\r\n this.table.resize = this.originalResize;\r\n this.originalResize = undefined;\r\n } catch (error) {\r\n console.warn('Error restoring original resize method:', error);\r\n }\r\n }\r\n // 移除所有事件监听器\r\n try {\r\n if (this.table) {\r\n this.eventHandlers.forEach(({ type, handler }) => {\r\n try {\r\n (this.table.off as (type: string, handler: unknown) => void)(type, handler);\r\n } catch (error) {\r\n console.warn(`Error removing event listener ${type}:`, error);\r\n }\r\n });\r\n this.eventHandlers.length = 0;\r\n }\r\n } catch (error) {\r\n console.warn('Error removing event listeners:', error);\r\n }\r\n // 清理回调函数引用\r\n this.onUpdateSubTablePositions = undefined;\r\n this.onUpdateSubTablePositionsForRow = undefined;\r\n this.onExpandRow = undefined;\r\n this.onCollapseRow = undefined;\r\n this.onCollapseRowToNoRealRecordIndex = undefined;\r\n this.onToggleRowExpand = undefined;\r\n this.getOriginalRowHeight = undefined;\r\n // 清理表格引用,避免循环引用\r\n (this as unknown as { table: unknown }).table = null;\r\n }\r\n\r\n // 回调函数,需要从外部注入\r\n private onUpdateSubTablePositions?: () => void;\r\n private onUpdateSubTablePositionsForRow?: () => void;\r\n private onExpandRow?: (rowIndex: number, colIndex?: number) => void;\r\n private onCollapseRow?: (rowIndex: number, colIndex?: number) => void;\r\n private onCollapseRowToNoRealRecordIndex?: (rowIndex: number) => void;\r\n private onToggleRowExpand?: (rowIndex: number, colIndex?: number) => void;\r\n private getOriginalRowHeight?: (bodyRowIndex: number) => number;\r\n\r\n /**\r\n * 设置回调函数\r\n */\r\n setCallbacks(callbacks: {\r\n onUpdateSubTablePositions?: () => void;\r\n onUpdateSubTablePositionsForRow?: () => void;\r\n onExpandRow?: (rowIndex: number, colIndex?: number) => void;\r\n onCollapseRow?: (rowIndex: number, colIndex?: number) => void;\r\n onCollapseRowToNoRealRecordIndex?: (rowIndex: number) => void;\r\n onToggleRowExpand?: (rowIndex: number, colIndex?: number) => void;\r\n getOriginalRowHeight?: (bodyRowIndex: number) => number;\r\n }): void {\r\n this.onUpdateSubTablePositions = callbacks.onUpdateSubTablePositions;\r\n this.onUpdateSubTablePositionsForRow = callbacks.onUpdateSubTablePositionsForRow;\r\n this.onExpandRow = callbacks.onExpandRow;\r\n this.onCollapseRow = callbacks.onCollapseRow;\r\n this.onCollapseRowToNoRealRecordIndex = callbacks.onCollapseRowToNoRealRecordIndex;\r\n this.onToggleRowExpand = callbacks.onToggleRowExpand;\r\n this.getOriginalRowHeight = callbacks.getOriginalRowHeight;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,4 @@
1
+ import { MasterDetailPlugin } from './core';
2
+ import type { MasterDetailPluginOptions, DetailTableOptions } from './types';
3
+ export { MasterDetailPlugin };
4
+ export type { MasterDetailPluginOptions, DetailTableOptions };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.MasterDetailPlugin = void 0;
6
+
7
+ const core_1 = require("./core");
8
+
9
+ Object.defineProperty(exports, "MasterDetailPlugin", {
10
+ enumerable: !0,
11
+ get: function() {
12
+ return core_1.MasterDetailPlugin;
13
+ }
14
+ });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/master-detail-plugin/index.ts"],"names":[],"mappings":";;;AAAA,iCAA4C;AAGnC,mGAHA,yBAAkB,OAGA","file":"index.js","sourcesContent":["import { MasterDetailPlugin } from './core';\r\nimport type { MasterDetailPluginOptions, DetailTableOptions } from './types';\r\n\r\nexport { MasterDetailPlugin };\r\nexport type { MasterDetailPluginOptions, DetailTableOptions };\r\n"]}
@@ -0,0 +1,39 @@
1
+ import * as VTable from '@visactor/vtable';
2
+ import type { DetailTableOptions } from './types';
3
+ export declare class SubTableManager {
4
+ private table;
5
+ private enableCheckboxCascade;
6
+ private timers;
7
+ constructor(table: VTable.ListTable, enableCheckboxCascade?: boolean);
8
+ private saveSubTableCheckboxState;
9
+ private restoreSubTableCheckboxState;
10
+ private safeSetTimeout;
11
+ private cleanupAllTimers;
12
+ private updateSubTableCheckboxVisualState;
13
+ renderSubTable(bodyRowIndex: number, childrenData: unknown[], getDetailConfig: (record: unknown, bodyRowIndex: number) => DetailTableOptions | null): void;
14
+ private columnRangeCache;
15
+ private getColumnRange;
16
+ private calculateSubTableViewBox;
17
+ removeSubTable(bodyRowIndex: number): void;
18
+ private cleanupSubTableEventHandlers;
19
+ private setupScrollEventIsolation;
20
+ private setupUnifiedSelectionManagement;
21
+ private calculateGroupLevelOffset;
22
+ private isAncestorGroup;
23
+ private setupSubTableCanvasClipping;
24
+ private setupAntiFlickerMechanism;
25
+ updateSubTablePositionsForRowResize(): void;
26
+ recalculateAllSubTablePositions(start?: number, end?: number, getDetailConfig?: (record: unknown, bodyRowIndex: number) => DetailTableOptions | null): void;
27
+ cleanup(): void;
28
+ getAllSubTableInstances(): Map<number, VTable.ListTable> | undefined;
29
+ getSubTableInstance(bodyRowIndex: number): VTable.ListTable | null;
30
+ private getDetailConfigForRecord?;
31
+ setCallbacks(callbacks: {
32
+ getDetailConfigForRecord?: (record: unknown, bodyRowIndex: number) => DetailTableOptions | null;
33
+ }): void;
34
+ private setupSubTableEventForwarding;
35
+ private forwardSubTableEvent;
36
+ private clearMainTableSelectionInternal;
37
+ private clearAllSelectionsExcept;
38
+ private cleanupSubTableEventForwarding;
39
+ }