@visactor/vtable-plugins 1.21.1 → 1.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) 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/context-menu.js +1 -1
  8. package/cjs/context-menu.js.map +1 -1
  9. package/cjs/contextmenu/handle-menu-helper.d.ts +1 -1
  10. package/cjs/contextmenu/handle-menu-helper.js +33 -14
  11. package/cjs/contextmenu/handle-menu-helper.js.map +1 -1
  12. package/cjs/contextmenu/menu-manager.js +1 -2
  13. package/cjs/contextmenu/styles.js +2 -1
  14. package/cjs/gantt-export-image.js +2 -2
  15. package/cjs/gantt-export-image.js.map +1 -1
  16. package/cjs/highlight-header-when-select-cell.js +1 -1
  17. package/cjs/highlight-header-when-select-cell.js.map +1 -1
  18. package/cjs/index.d.ts +1 -0
  19. package/cjs/index.js +4 -4
  20. package/cjs/index.js.map +1 -1
  21. package/cjs/master-detail-plugin/checkbox.d.ts +5 -0
  22. package/cjs/master-detail-plugin/checkbox.js +105 -0
  23. package/cjs/master-detail-plugin/checkbox.js.map +1 -0
  24. package/cjs/master-detail-plugin/config.d.ts +17 -0
  25. package/cjs/master-detail-plugin/config.js +113 -0
  26. package/cjs/master-detail-plugin/config.js.map +1 -0
  27. package/cjs/master-detail-plugin/core.d.ts +50 -0
  28. package/cjs/master-detail-plugin/core.js +310 -0
  29. package/cjs/master-detail-plugin/core.js.map +1 -0
  30. package/cjs/master-detail-plugin/events.d.ts +59 -0
  31. package/cjs/master-detail-plugin/events.js +265 -0
  32. package/cjs/master-detail-plugin/events.js.map +1 -0
  33. package/cjs/master-detail-plugin/index.d.ts +4 -0
  34. package/cjs/master-detail-plugin/index.js +15 -0
  35. package/cjs/master-detail-plugin/index.js.map +1 -0
  36. package/cjs/master-detail-plugin/subtable.d.ts +39 -0
  37. package/cjs/master-detail-plugin/subtable.js +457 -0
  38. package/cjs/master-detail-plugin/subtable.js.map +1 -0
  39. package/cjs/master-detail-plugin/table-api-extensions.d.ts +59 -0
  40. package/cjs/master-detail-plugin/table-api-extensions.js +462 -0
  41. package/cjs/master-detail-plugin/table-api-extensions.js.map +1 -0
  42. package/cjs/master-detail-plugin/types.d.ts +61 -0
  43. package/cjs/master-detail-plugin/types.js +20 -0
  44. package/cjs/master-detail-plugin/types.js.map +1 -0
  45. package/cjs/master-detail-plugin/utils.d.ts +8 -0
  46. package/cjs/master-detail-plugin/utils.js +62 -0
  47. package/cjs/master-detail-plugin/utils.js.map +1 -0
  48. package/cjs/master-detail-plugin.d.ts +1 -0
  49. package/cjs/master-detail-plugin.js +15 -0
  50. package/cjs/master-detail-plugin.js.map +1 -0
  51. package/cjs/paste-add-row-column.js +2 -2
  52. package/cjs/paste-add-row-column.js.map +1 -1
  53. package/cjs/row-series.js +1 -2
  54. package/cjs/table-carousel-animation.js +2 -1
  55. package/cjs/table-export/csv/index.js +1 -1
  56. package/cjs/table-export/util/color.js +2 -1
  57. package/cjs/table-export/util/download.js +1 -1
  58. package/cjs/table-export/util/encode.js +1 -1
  59. package/cjs/table-export/util/indent.js +1 -1
  60. package/cjs/table-export/util/pagination.js +1 -1
  61. package/cjs/table-export/util/promise.js +1 -1
  62. package/cjs/table-export/util/type.js +1 -1
  63. package/cjs/table-series-number.d.ts +3 -0
  64. package/cjs/table-series-number.js +18 -3
  65. package/cjs/table-series-number.js.map +1 -1
  66. package/dist/vtable-plugins.js +2918 -254
  67. package/dist/vtable-plugins.min.js +3 -3
  68. package/es/add-row-column.js +2 -2
  69. package/es/add-row-column.js.map +1 -1
  70. package/es/auto-fill/utils/date.js +1 -1
  71. package/es/auto-fill/utils/fill.js +1 -1
  72. package/es/column-series.js +1 -1
  73. package/es/column-series.js.map +1 -1
  74. package/es/context-menu.js +1 -1
  75. package/es/context-menu.js.map +1 -1
  76. package/es/contextmenu/handle-menu-helper.d.ts +1 -1
  77. package/es/contextmenu/handle-menu-helper.js +33 -14
  78. package/es/contextmenu/handle-menu-helper.js.map +1 -1
  79. package/es/contextmenu/menu-manager.js +1 -2
  80. package/es/contextmenu/styles.js +2 -1
  81. package/es/gantt-export-image.js +3 -1
  82. package/es/gantt-export-image.js.map +1 -1
  83. package/es/highlight-header-when-select-cell.js +1 -1
  84. package/es/highlight-header-when-select-cell.js.map +1 -1
  85. package/es/index.d.ts +1 -0
  86. package/es/index.js +2 -0
  87. package/es/index.js.map +1 -1
  88. package/es/master-detail-plugin/checkbox.d.ts +5 -0
  89. package/es/master-detail-plugin/checkbox.js +94 -0
  90. package/es/master-detail-plugin/checkbox.js.map +1 -0
  91. package/es/master-detail-plugin/config.d.ts +17 -0
  92. package/es/master-detail-plugin/config.js +80 -0
  93. package/es/master-detail-plugin/config.js.map +1 -0
  94. package/es/master-detail-plugin/core.d.ts +50 -0
  95. package/es/master-detail-plugin/core.js +285 -0
  96. package/es/master-detail-plugin/core.js.map +1 -0
  97. package/es/master-detail-plugin/events.d.ts +59 -0
  98. package/es/master-detail-plugin/events.js +232 -0
  99. package/es/master-detail-plugin/events.js.map +1 -0
  100. package/es/master-detail-plugin/index.d.ts +4 -0
  101. package/es/master-detail-plugin/index.js +4 -0
  102. package/es/master-detail-plugin/index.js.map +1 -0
  103. package/es/master-detail-plugin/subtable.d.ts +39 -0
  104. package/es/master-detail-plugin/subtable.js +426 -0
  105. package/es/master-detail-plugin/subtable.js.map +1 -0
  106. package/es/master-detail-plugin/table-api-extensions.d.ts +59 -0
  107. package/es/master-detail-plugin/table-api-extensions.js +445 -0
  108. package/es/master-detail-plugin/table-api-extensions.js.map +1 -0
  109. package/es/master-detail-plugin/types.d.ts +61 -0
  110. package/es/master-detail-plugin/types.js +12 -0
  111. package/es/master-detail-plugin/types.js.map +1 -0
  112. package/es/master-detail-plugin/utils.d.ts +8 -0
  113. package/es/master-detail-plugin/utils.js +52 -0
  114. package/es/master-detail-plugin/utils.js.map +1 -0
  115. package/es/master-detail-plugin.d.ts +1 -0
  116. package/es/master-detail-plugin.js +2 -0
  117. package/es/master-detail-plugin.js.map +1 -0
  118. package/es/paste-add-row-column.js +2 -2
  119. package/es/paste-add-row-column.js.map +1 -1
  120. package/es/row-series.js +1 -2
  121. package/es/table-carousel-animation.js +2 -1
  122. package/es/table-export/csv/index.js +1 -1
  123. package/es/table-export/util/color.js +2 -1
  124. package/es/table-export/util/download.js +1 -1
  125. package/es/table-export/util/encode.js +1 -1
  126. package/es/table-export/util/indent.js +1 -1
  127. package/es/table-export/util/pagination.js +1 -1
  128. package/es/table-export/util/promise.js +1 -1
  129. package/es/table-export/util/type.js +1 -1
  130. package/es/table-series-number.d.ts +3 -0
  131. package/es/table-series-number.js +17 -3
  132. package/es/table-series-number.js.map +1 -1
  133. package/package.json +7 -7
@@ -0,0 +1,232 @@
1
+ import * as VTable from "@visactor/vtable";
2
+
3
+ export class EventManager {
4
+ constructor(table) {
5
+ this.table = table, this.expandedRows = [], this.eventHandlers = [], this.allExpandedRowsBeforeMove = new Set,
6
+ this.isCleanedUp = !1;
7
+ }
8
+ bindEventHandlers() {
9
+ const scrollHandler = () => this.onUpdateSubTablePositions(), resizeRowHandler = () => this.onUpdateSubTablePositionsForRow();
10
+ this.table.on(VTable.TABLE_EVENT_TYPE.SCROLL, scrollHandler), this.table.on(VTable.TABLE_EVENT_TYPE.RESIZE_ROW, resizeRowHandler),
11
+ this.eventHandlers.push({
12
+ type: VTable.TABLE_EVENT_TYPE.SCROLL,
13
+ handler: scrollHandler
14
+ }, {
15
+ type: VTable.TABLE_EVENT_TYPE.RESIZE_ROW,
16
+ handler: resizeRowHandler
17
+ }), this.wrapTableResizeMethod(), this.bindTreeHierarchyStateChange(), this.bindRowMoveEvents();
18
+ }
19
+ wrapTableResizeMethod() {
20
+ const originalResize = this.table.resize.bind(this.table);
21
+ this.originalResize = originalResize, this.table.resize = () => {
22
+ originalResize(), this.onUpdateSubTablePositions();
23
+ };
24
+ }
25
+ handleAfterUpdateCellContentWidth(eventData) {
26
+ var _a;
27
+ const {col: col, row: row, cellGroup: cellGroup, cellHeight: cellHeight, padding: padding, textBaseline: textBaseline} = eventData;
28
+ if (this.isCustomMergeCell(col, row)) return void this.fixCustomMergeCellTextPosition(cellGroup, padding);
29
+ let effectiveCellHeight = cellHeight;
30
+ if (void 0 !== cellGroup.col && void 0 !== cellGroup.row) try {
31
+ const recordIndex = this.table.getRecordShowIndexByCell(cellGroup.col, cellGroup.row);
32
+ if (void 0 !== recordIndex) {
33
+ const originalHeight = (null === (_a = this.getOriginalRowHeight) || void 0 === _a ? void 0 : _a.call(this, recordIndex)) || 0;
34
+ if (originalHeight > 0) {
35
+ effectiveCellHeight = originalHeight;
36
+ const newHeight = effectiveCellHeight - (padding[0] + padding[2]);
37
+ cellGroup.forEachChildren((child => {
38
+ "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]));
39
+ }));
40
+ }
41
+ }
42
+ } catch (error) {}
43
+ }
44
+ fixCustomMergeCellTextPosition(cellGroup, padding) {
45
+ const {col: col, row: row} = cellGroup, table = this.table, customMerge = table.getCustomMerge(col, row);
46
+ if (!customMerge || !customMerge.style || !customMerge.range) return;
47
+ const configuredTextAlign = customMerge.style.textAlign || "left", {start: start, end: end} = customMerge.range;
48
+ let totalMergeWidth = 0, mergeStartX = 0;
49
+ for (let c = start.col; c <= end.col; c++) totalMergeWidth += table.getColWidth(c);
50
+ for (let c = 0; c < start.col; c++) mergeStartX += table.getColWidth(c);
51
+ cellGroup.forEachChildren((child => {
52
+ if ("text" === child.name || "content" === child.name) {
53
+ let xPosition;
54
+ xPosition = "center" === configuredTextAlign ? mergeStartX + padding[3] + (totalMergeWidth - padding[1] - padding[3]) / 2 : "right" === configuredTextAlign ? mergeStartX + totalMergeWidth - padding[1] : mergeStartX + padding[3],
55
+ child.setAttribute("x", xPosition), child.setAttribute("textAlign", configuredTextAlign);
56
+ }
57
+ }));
58
+ }
59
+ isCustomMergeCell(col, row) {
60
+ try {
61
+ const table = this.table;
62
+ if (table && table.getCustomMerge) {
63
+ return !!table.getCustomMerge(col, row);
64
+ }
65
+ } catch (error) {}
66
+ return !1;
67
+ }
68
+ handleAfterUpdateSelectBorderHeight(eventData) {
69
+ var _a, _b;
70
+ const {startRow: startRow, endRow: endRow, selectComp: selectComp} = eventData, isSingleCellSelection = startRow === endRow, isLastRowExpanded = this.expandedRows.includes(endRow);
71
+ if (isSingleCellSelection) {
72
+ const bodyRowIndex = startRow - (this.table.columnHeaderLevelCount || 0), originalHeight = (null === (_a = this.getOriginalRowHeight) || void 0 === _a ? void 0 : _a.call(this, bodyRowIndex)) || 0;
73
+ if (originalHeight > 0 && originalHeight !== eventData.currentHeight && (selectComp.rect.setAttributes({
74
+ height: originalHeight
75
+ }), selectComp.fillhandle)) {
76
+ const currentY = selectComp.rect.attribute.y;
77
+ selectComp.fillhandle.setAttributes({
78
+ y: currentY + originalHeight
79
+ });
80
+ }
81
+ } else if (isLastRowExpanded) {
82
+ const lastRowBodyIndex = endRow - (this.table.columnHeaderLevelCount || 0), lastRowOriginalHeight = (null === (_b = this.getOriginalRowHeight) || void 0 === _b ? void 0 : _b.call(this, lastRowBodyIndex)) || 0;
83
+ if (lastRowOriginalHeight > 0) {
84
+ const lastRowCurrentHeight = this.table.getRowHeight(endRow), adjustedTotalHeight = eventData.currentHeight - lastRowCurrentHeight + lastRowOriginalHeight;
85
+ if (selectComp.rect.setAttributes({
86
+ height: adjustedTotalHeight
87
+ }), selectComp.fillhandle) {
88
+ const currentY = selectComp.rect.attribute.y;
89
+ selectComp.fillhandle.setAttributes({
90
+ y: currentY + adjustedTotalHeight
91
+ });
92
+ }
93
+ }
94
+ }
95
+ }
96
+ executeMasterDetailBeforeSort() {
97
+ const table = this.table;
98
+ if (table.internalProps.expandedRecordIndices && table.internalProps.expandedRecordIndices.length > 0 && (table.internalProps._tempExpandedRecordIndices = [ ...table.internalProps.expandedRecordIndices ]),
99
+ this.expandedRows.length > 0) {
100
+ [ ...this.expandedRows ].forEach((rowIndex => {
101
+ var _a, _b;
102
+ try {
103
+ const tableOptions = table.options;
104
+ 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);
105
+ } catch (e) {}
106
+ }));
107
+ }
108
+ }
109
+ executeMasterDetailAfterSort() {
110
+ const table = this.table, tempExpandedRecordIndices = table.internalProps._tempExpandedRecordIndices;
111
+ if (tempExpandedRecordIndices && tempExpandedRecordIndices.length > 0) {
112
+ [ ...tempExpandedRecordIndices ].forEach((recordIndex => {
113
+ var _a;
114
+ const bodyRowIndex = table.getBodyRowIndexByRecordIndex(recordIndex);
115
+ if (bodyRowIndex >= 0) try {
116
+ const targetRowIndex = bodyRowIndex + table.columnHeaderLevelCount;
117
+ null === (_a = this.onExpandRow) || void 0 === _a || _a.call(this, targetRowIndex);
118
+ } catch (e) {}
119
+ })), delete table.internalProps._tempExpandedRecordIndices;
120
+ }
121
+ }
122
+ getExpandedRows() {
123
+ return this.expandedRows;
124
+ }
125
+ setExpandedRows(rows) {
126
+ this.expandedRows = rows;
127
+ }
128
+ addExpandedRow(rowIndex) {
129
+ this.expandedRows.includes(rowIndex) || this.expandedRows.push(rowIndex);
130
+ }
131
+ removeExpandedRow(rowIndex) {
132
+ const index = this.expandedRows.indexOf(rowIndex);
133
+ index > -1 && this.expandedRows.splice(index, 1);
134
+ }
135
+ isRowExpanded(rowIndex) {
136
+ return this.expandedRows.includes(rowIndex);
137
+ }
138
+ bindTreeHierarchyStateChange() {
139
+ const hierarchyStateChangeHandler = args => {
140
+ var _a;
141
+ const {col: col, row: row} = args, record = this.getRecordByRowIndex(row - this.table.columnHeaderLevelCount);
142
+ record && "object" == typeof record && "children" in record && !0 === record.children || null === (_a = this.onToggleRowExpand) || void 0 === _a || _a.call(this, row, col);
143
+ };
144
+ this.table.on(VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, hierarchyStateChangeHandler),
145
+ this.eventHandlers.push({
146
+ type: VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE,
147
+ handler: hierarchyStateChangeHandler
148
+ });
149
+ }
150
+ getRecordByRowIndex(bodyRowIndex) {
151
+ try {
152
+ const table = this.table, recordIndex = table.getRecordShowIndexByCell(0, bodyRowIndex + table.columnHeaderLevelCount);
153
+ return table.dataSource.get(recordIndex);
154
+ } catch (error) {
155
+ return null;
156
+ }
157
+ }
158
+ bindRowMoveEvents() {
159
+ const moveStartHandler = args => {
160
+ var _a, _b;
161
+ if (!args || "number" != typeof args.col || "number" != typeof args.row) return;
162
+ const {col: col, row: row} = args;
163
+ 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;
164
+ this.allExpandedRowsBeforeMove.clear();
165
+ const currentExpandedRows = [ ...this.expandedRows ];
166
+ currentExpandedRows.forEach((rowIndex => {
167
+ this.allExpandedRowsBeforeMove.add(rowIndex);
168
+ })), currentExpandedRows.forEach((rowIndex => {
169
+ var _a;
170
+ null === (_a = this.onCollapseRow) || void 0 === _a || _a.call(this, rowIndex);
171
+ }));
172
+ }, moveSuccessHandler = args => {
173
+ var _a;
174
+ if (0 === this.allExpandedRowsBeforeMove.size) return;
175
+ const columnMoveState = null === (_a = this.table.stateManager) || void 0 === _a ? void 0 : _a.columnMove, {colSource: colSource, rowSource: rowSource, colTarget: colTarget, rowTarget: rowTarget} = columnMoveState;
176
+ setTimeout((() => {
177
+ const sourceRowIndex = rowSource, targetRowIndex = rowTarget, moveDirection = targetRowIndex > sourceRowIndex ? "down" : "up";
178
+ this.allExpandedRowsBeforeMove.forEach((originalRowIndex => {
179
+ var _a;
180
+ let newRowIndex = originalRowIndex;
181
+ sourceRowIndex === originalRowIndex ? newRowIndex = targetRowIndex : "down" === moveDirection ? originalRowIndex <= targetRowIndex && originalRowIndex > sourceRowIndex && (newRowIndex = originalRowIndex - 1) : "up" === moveDirection && originalRowIndex >= targetRowIndex && originalRowIndex < sourceRowIndex && (newRowIndex = originalRowIndex + 1),
182
+ null === (_a = this.onExpandRow) || void 0 === _a || _a.call(this, newRowIndex);
183
+ })), this.allExpandedRowsBeforeMove.clear();
184
+ }), 0);
185
+ }, moveFailHandler = args => {
186
+ 0 !== this.allExpandedRowsBeforeMove.size && setTimeout((() => {
187
+ this.allExpandedRowsBeforeMove.forEach((originalRowIndex => {
188
+ var _a;
189
+ null === (_a = this.onExpandRow) || void 0 === _a || _a.call(this, originalRowIndex);
190
+ })), this.allExpandedRowsBeforeMove.clear();
191
+ }), 0);
192
+ };
193
+ this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, moveStartHandler),
194
+ this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, moveSuccessHandler),
195
+ this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, moveFailHandler),
196
+ this.eventHandlers.push({
197
+ type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START,
198
+ handler: moveStartHandler
199
+ }, {
200
+ type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION,
201
+ handler: moveSuccessHandler
202
+ }, {
203
+ type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL,
204
+ handler: moveFailHandler
205
+ });
206
+ }
207
+ cleanup() {
208
+ if (!this.isCleanedUp) {
209
+ if (this.isCleanedUp = !0, this.expandedRows.length = 0, this.allExpandedRowsBeforeMove.clear(),
210
+ this.originalResize && this.table) try {
211
+ this.table.resize = this.originalResize, this.originalResize = void 0;
212
+ } catch (error) {}
213
+ try {
214
+ this.table && (this.eventHandlers.forEach((({type: type, handler: handler}) => {
215
+ try {
216
+ this.table.off(type, handler);
217
+ } catch (error) {}
218
+ })), this.eventHandlers.length = 0);
219
+ } catch (error) {}
220
+ this.onUpdateSubTablePositions = void 0, this.onUpdateSubTablePositionsForRow = void 0,
221
+ this.onExpandRow = void 0, this.onCollapseRow = void 0, this.onCollapseRowToNoRealRecordIndex = void 0,
222
+ this.onToggleRowExpand = void 0, this.getOriginalRowHeight = void 0, this.table = null;
223
+ }
224
+ }
225
+ setCallbacks(callbacks) {
226
+ this.onUpdateSubTablePositions = callbacks.onUpdateSubTablePositions, this.onUpdateSubTablePositionsForRow = callbacks.onUpdateSubTablePositionsForRow,
227
+ this.onExpandRow = callbacks.onExpandRow, this.onCollapseRow = callbacks.onCollapseRow,
228
+ this.onCollapseRowToNoRealRecordIndex = callbacks.onCollapseRowToNoRealRecordIndex,
229
+ this.onToggleRowExpand = callbacks.onToggleRowExpand, this.getOriginalRowHeight = callbacks.getOriginalRowHeight;
230
+ }
231
+ }
232
+ //# 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,4 @@
1
+ import { MasterDetailPlugin } from "./core";
2
+
3
+ export { MasterDetailPlugin };
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/master-detail-plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAG5C,OAAO,EAAE,kBAAkB,EAAE,CAAC","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
+ }