@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.
- package/cjs/add-row-column.js +2 -2
- package/cjs/add-row-column.js.map +1 -1
- package/cjs/auto-fill/utils/date.js +1 -1
- package/cjs/auto-fill/utils/fill.js +1 -1
- package/cjs/column-series.js +1 -1
- package/cjs/column-series.js.map +1 -1
- package/cjs/contextmenu/handle-menu-helper.js +16 -9
- package/cjs/contextmenu/handle-menu-helper.js.map +1 -1
- package/cjs/contextmenu/menu-manager.js +1 -2
- package/cjs/contextmenu/styles.js +2 -1
- package/cjs/highlight-header-when-select-cell.js +1 -1
- package/cjs/highlight-header-when-select-cell.js.map +1 -1
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +4 -4
- package/cjs/index.js.map +1 -1
- package/cjs/master-detail-plugin/checkbox.d.ts +5 -0
- package/cjs/master-detail-plugin/checkbox.js +105 -0
- package/cjs/master-detail-plugin/checkbox.js.map +1 -0
- package/cjs/master-detail-plugin/config.d.ts +17 -0
- package/cjs/master-detail-plugin/config.js +113 -0
- package/cjs/master-detail-plugin/config.js.map +1 -0
- package/cjs/master-detail-plugin/core.d.ts +50 -0
- package/cjs/master-detail-plugin/core.js +310 -0
- package/cjs/master-detail-plugin/core.js.map +1 -0
- package/cjs/master-detail-plugin/events.d.ts +59 -0
- package/cjs/master-detail-plugin/events.js +265 -0
- package/cjs/master-detail-plugin/events.js.map +1 -0
- package/cjs/master-detail-plugin/index.d.ts +4 -0
- package/cjs/master-detail-plugin/index.js +15 -0
- package/cjs/master-detail-plugin/index.js.map +1 -0
- package/cjs/master-detail-plugin/subtable.d.ts +39 -0
- package/cjs/master-detail-plugin/subtable.js +457 -0
- package/cjs/master-detail-plugin/subtable.js.map +1 -0
- package/cjs/master-detail-plugin/table-api-extensions.d.ts +59 -0
- package/cjs/master-detail-plugin/table-api-extensions.js +462 -0
- package/cjs/master-detail-plugin/table-api-extensions.js.map +1 -0
- package/cjs/master-detail-plugin/types.d.ts +61 -0
- package/cjs/master-detail-plugin/types.js +20 -0
- package/cjs/master-detail-plugin/types.js.map +1 -0
- package/cjs/master-detail-plugin/utils.d.ts +8 -0
- package/cjs/master-detail-plugin/utils.js +62 -0
- package/cjs/master-detail-plugin/utils.js.map +1 -0
- package/cjs/master-detail-plugin.d.ts +1 -0
- package/cjs/master-detail-plugin.js +15 -0
- package/cjs/master-detail-plugin.js.map +1 -0
- package/cjs/paste-add-row-column.js +2 -2
- package/cjs/paste-add-row-column.js.map +1 -1
- package/cjs/row-series.js +1 -2
- package/cjs/table-carousel-animation.js +2 -1
- package/cjs/table-export/csv/index.js +1 -1
- package/cjs/table-export/util/color.js +2 -1
- package/cjs/table-export/util/download.js +1 -1
- package/cjs/table-export/util/encode.js +1 -1
- package/cjs/table-export/util/indent.js +1 -1
- package/cjs/table-export/util/pagination.js +1 -1
- package/cjs/table-export/util/promise.js +1 -1
- package/cjs/table-export/util/type.js +1 -1
- package/dist/vtable-plugins.js +2885 -240
- package/dist/vtable-plugins.min.js +3 -3
- package/es/add-row-column.js +2 -2
- package/es/add-row-column.js.map +1 -1
- package/es/auto-fill/utils/date.js +1 -1
- package/es/auto-fill/utils/fill.js +1 -1
- package/es/column-series.js +1 -1
- package/es/column-series.js.map +1 -1
- package/es/contextmenu/handle-menu-helper.js +16 -9
- package/es/contextmenu/handle-menu-helper.js.map +1 -1
- package/es/contextmenu/menu-manager.js +1 -2
- package/es/contextmenu/styles.js +2 -1
- package/es/highlight-header-when-select-cell.js +1 -1
- package/es/highlight-header-when-select-cell.js.map +1 -1
- package/es/index.d.ts +1 -0
- package/es/index.js +2 -0
- package/es/index.js.map +1 -1
- package/es/master-detail-plugin/checkbox.d.ts +5 -0
- package/es/master-detail-plugin/checkbox.js +94 -0
- package/es/master-detail-plugin/checkbox.js.map +1 -0
- package/es/master-detail-plugin/config.d.ts +17 -0
- package/es/master-detail-plugin/config.js +80 -0
- package/es/master-detail-plugin/config.js.map +1 -0
- package/es/master-detail-plugin/core.d.ts +50 -0
- package/es/master-detail-plugin/core.js +285 -0
- package/es/master-detail-plugin/core.js.map +1 -0
- package/es/master-detail-plugin/events.d.ts +59 -0
- package/es/master-detail-plugin/events.js +232 -0
- package/es/master-detail-plugin/events.js.map +1 -0
- package/es/master-detail-plugin/index.d.ts +4 -0
- package/es/master-detail-plugin/index.js +4 -0
- package/es/master-detail-plugin/index.js.map +1 -0
- package/es/master-detail-plugin/subtable.d.ts +39 -0
- package/es/master-detail-plugin/subtable.js +426 -0
- package/es/master-detail-plugin/subtable.js.map +1 -0
- package/es/master-detail-plugin/table-api-extensions.d.ts +59 -0
- package/es/master-detail-plugin/table-api-extensions.js +445 -0
- package/es/master-detail-plugin/table-api-extensions.js.map +1 -0
- package/es/master-detail-plugin/types.d.ts +61 -0
- package/es/master-detail-plugin/types.js +12 -0
- package/es/master-detail-plugin/types.js.map +1 -0
- package/es/master-detail-plugin/utils.d.ts +8 -0
- package/es/master-detail-plugin/utils.js +52 -0
- package/es/master-detail-plugin/utils.js.map +1 -0
- package/es/master-detail-plugin.d.ts +1 -0
- package/es/master-detail-plugin.js +2 -0
- package/es/master-detail-plugin.js.map +1 -0
- package/es/paste-add-row-column.js +2 -2
- package/es/paste-add-row-column.js.map +1 -1
- package/es/row-series.js +1 -2
- package/es/table-carousel-animation.js +2 -1
- package/es/table-export/csv/index.js +1 -1
- package/es/table-export/util/color.js +2 -1
- package/es/table-export/util/download.js +1 -1
- package/es/table-export/util/encode.js +1 -1
- package/es/table-export/util/indent.js +1 -1
- package/es/table-export/util/pagination.js +1 -1
- package/es/table-export/util/promise.js +1 -1
- package/es/table-export/util/type.js +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
import { TABLE_EVENT_TYPE } from "@visactor/vtable";
|
|
2
|
+
|
|
3
|
+
import { getOriginalRowHeight } from "./utils";
|
|
4
|
+
|
|
5
|
+
export class TableAPIExtensions {
|
|
6
|
+
constructor(table, configManager, eventManager, callbacks) {
|
|
7
|
+
this.currentMouseX = 0, this.currentMouseY = 0, this.isDragging = !1, this.dragStartIsPluginUnderline = !1,
|
|
8
|
+
this.table = table, this.configManager = configManager, this.eventManager = eventManager,
|
|
9
|
+
this.callbacks = callbacks, this.initMouseTracking();
|
|
10
|
+
}
|
|
11
|
+
initMouseTracking() {
|
|
12
|
+
this.mouseEventListener = event => {
|
|
13
|
+
try {
|
|
14
|
+
const table = this.table;
|
|
15
|
+
if (table && table.internalProps && table.internalProps.canvas) {
|
|
16
|
+
const rect = table.internalProps.canvas.getBoundingClientRect();
|
|
17
|
+
this.currentMouseX = event.clientX - rect.left, this.currentMouseY = event.clientY - rect.top;
|
|
18
|
+
}
|
|
19
|
+
} catch (error) {}
|
|
20
|
+
"mouseup" === event.type && (this.isDragging = !1, this.dragStartIsPluginUnderline = !1);
|
|
21
|
+
};
|
|
22
|
+
try {
|
|
23
|
+
const table = this.table;
|
|
24
|
+
if (table && table.internalProps && table.internalProps.canvas) {
|
|
25
|
+
const canvas = table.internalProps.canvas;
|
|
26
|
+
canvas.addEventListener("mousemove", this.mouseEventListener), canvas.addEventListener("mousedown", this.mouseEventListener),
|
|
27
|
+
canvas.addEventListener("mouseup", this.mouseEventListener);
|
|
28
|
+
}
|
|
29
|
+
} catch (error) {}
|
|
30
|
+
}
|
|
31
|
+
extendTableAPI() {
|
|
32
|
+
this.extendUpdateCellContent(), this.extendUpdateResizeRow(), this.extendDealHeightMode(),
|
|
33
|
+
this.extendUpdatePagination(), this.extendToggleHierarchyState(), this.extendUpdateFilterRules(),
|
|
34
|
+
this.extendUpdateChartSizeForResizeColWidth(), this.extendUpdateChartSizeForResizeRowHeight(),
|
|
35
|
+
this.extendGetRowY(), this.extendUpdateRowHeight(), this.extendGetResizeColAt();
|
|
36
|
+
}
|
|
37
|
+
extendUpdateCellContent() {
|
|
38
|
+
const table = this.table;
|
|
39
|
+
this.originalUpdateCellContent = table.scenegraph.updateCellContent.bind(table.scenegraph),
|
|
40
|
+
table.scenegraph.updateCellContent = (col, row, forceFastUpdate = !1) => {
|
|
41
|
+
var _a, _b, _c, _d;
|
|
42
|
+
if (this.eventManager.isRowExpanded(row)) {
|
|
43
|
+
const bodyRowIndex = row - this.table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(this.table, bodyRowIndex), currentHeight = this.table.getRowHeight(row);
|
|
44
|
+
if (originalHeight > 0 && currentHeight !== originalHeight) {
|
|
45
|
+
this.table._setRowHeight(row, originalHeight, !1);
|
|
46
|
+
const oldCellGroup = this.table.scenegraph.getCell(col, row), originalY = null === (_a = null == oldCellGroup ? void 0 : oldCellGroup.attribute) || void 0 === _a ? void 0 : _a.y, result = null === (_b = this.originalUpdateCellContent) || void 0 === _b ? void 0 : _b.call(this, col, row, forceFastUpdate);
|
|
47
|
+
if (this.table._setRowHeight(row, currentHeight, !1), void 0 !== originalY) {
|
|
48
|
+
const newCellGroup = this.table.scenegraph.getCell(col, row);
|
|
49
|
+
newCellGroup && newCellGroup.attribute.y !== originalY && newCellGroup.setAttribute("y", originalY);
|
|
50
|
+
}
|
|
51
|
+
const cellGroup = this.table.scenegraph.getCell(col, row);
|
|
52
|
+
return cellGroup && (row !== this.table.rowCount - 1 && this.callbacks.addUnderlineToCell(cellGroup, originalHeight),
|
|
53
|
+
this.eventManager.handleAfterUpdateCellContentWidth({
|
|
54
|
+
col: col,
|
|
55
|
+
row: row,
|
|
56
|
+
cellHeight: (null === (_c = cellGroup.attribute) || void 0 === _c ? void 0 : _c.height) || 0,
|
|
57
|
+
cellGroup: cellGroup,
|
|
58
|
+
padding: [ 0, 0, 0, 0 ],
|
|
59
|
+
textBaseline: "middle"
|
|
60
|
+
})), result;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null === (_d = this.originalUpdateCellContent) || void 0 === _d ? void 0 : _d.call(this, col, row, forceFastUpdate);
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
extendUpdateResizeRow() {
|
|
67
|
+
const table = this.table;
|
|
68
|
+
this.originalUpdateResizeRow = table.stateManager.updateResizeRow.bind(table.stateManager),
|
|
69
|
+
table.stateManager.updateResizeRow = (xInTable, yInTable) => {
|
|
70
|
+
const state = table.stateManager;
|
|
71
|
+
xInTable = Math.ceil(xInTable), yInTable = Math.ceil(yInTable);
|
|
72
|
+
let detaY = state.rowResize.isBottomFrozen ? state.rowResize.y - yInTable : yInTable - state.rowResize.y;
|
|
73
|
+
if (Math.abs(detaY) < 1) return;
|
|
74
|
+
const resizeRowIndex = state.rowResize.row, isExpandedRow = this.eventManager.isRowExpanded(resizeRowIndex), originalLimitMinHeight = state.table.internalProps.limitMinHeight;
|
|
75
|
+
let currentRowMinHeight = originalLimitMinHeight;
|
|
76
|
+
if (isExpandedRow) {
|
|
77
|
+
const bodyRowIndex = resizeRowIndex - this.table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(this.table, bodyRowIndex), detailHeight = this.table.getRowHeight(resizeRowIndex) - originalHeight;
|
|
78
|
+
currentRowMinHeight = this.dragStartIsPluginUnderline ? originalLimitMinHeight + detailHeight : originalHeight + originalLimitMinHeight;
|
|
79
|
+
}
|
|
80
|
+
let afterSize = state.table.getRowHeight(state.rowResize.row) + detaY;
|
|
81
|
+
if (afterSize < currentRowMinHeight && (afterSize = currentRowMinHeight, detaY = afterSize - state.table.getRowHeight(state.rowResize.row)),
|
|
82
|
+
"adaptive" === state.table.heightMode && state.rowResize.row < state.table.rowCount - 1) {
|
|
83
|
+
let bottomRowHeight = state.table.getRowHeight(state.rowResize.row + 1);
|
|
84
|
+
bottomRowHeight -= detaY;
|
|
85
|
+
let nextRowMinHeight = originalLimitMinHeight;
|
|
86
|
+
const nextRowIndex = state.rowResize.row + 1;
|
|
87
|
+
if (this.eventManager.isRowExpanded(nextRowIndex)) {
|
|
88
|
+
const nextBodyRowIndex = nextRowIndex - this.table.columnHeaderLevelCount, nextOriginalHeight = getOriginalRowHeight(this.table, nextBodyRowIndex);
|
|
89
|
+
nextRowMinHeight = originalLimitMinHeight + (this.table.getRowHeight(nextRowIndex) - nextOriginalHeight);
|
|
90
|
+
}
|
|
91
|
+
bottomRowHeight - detaY < nextRowMinHeight && (detaY = bottomRowHeight - nextRowMinHeight);
|
|
92
|
+
}
|
|
93
|
+
detaY = Math.ceil(detaY), state.rowResize.row < state.table.columnHeaderLevelCount || state.rowResize.row >= state.table.rowCount - state.table.bottomFrozenRowCount ? this.updateResizeColForRow(detaY, state) : "all" === state.table.internalProps.rowResizeType ? this.updateResizeColForAll(detaY, state) : this.updateResizeColForRow(detaY, state),
|
|
94
|
+
state.rowResize.y = yInTable, state.table.scenegraph.component.updateResizeRow(state.rowResize.row, xInTable, state.rowResize.isBottomFrozen),
|
|
95
|
+
state.table.scenegraph.updateNextFrame();
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
updateResizeColForRow(detaY, state) {
|
|
99
|
+
"adaptive" === state.table.heightMode && state.rowResize.row < state.table.rowCount - 1 ? (state.table.scenegraph.updateRowHeight(state.rowResize.row, detaY),
|
|
100
|
+
state.table.scenegraph.updateRowHeight(state.rowResize.row + 1, -detaY), state.table.internalProps._heightResizedRowMap.add(state.rowResize.row),
|
|
101
|
+
state.table.internalProps._heightResizedRowMap.add(state.rowResize.row + 1)) : (state.table.scenegraph.updateRowHeight(state.rowResize.row, detaY),
|
|
102
|
+
state.table.internalProps._heightResizedRowMap.add(state.rowResize.row));
|
|
103
|
+
}
|
|
104
|
+
updateResizeColForAll(detaY, state) {
|
|
105
|
+
for (let row = state.table.frozenRowCount; row < state.table.rowCount - state.table.bottomFrozenRowCount; row++) state.table.scenegraph.updateRowHeight(row, detaY),
|
|
106
|
+
state.table.internalProps._heightResizedRowMap.add(row);
|
|
107
|
+
}
|
|
108
|
+
extendDealHeightMode() {
|
|
109
|
+
const scenegraph = this.table.scenegraph;
|
|
110
|
+
this.originalDealHeightMode = scenegraph.dealHeightMode.bind(scenegraph), scenegraph.dealHeightMode = () => {
|
|
111
|
+
if ("adaptive" !== this.table.heightMode) return this.originalDealHeightMode();
|
|
112
|
+
const expandedRowIndices = this.eventManager.getExpandedRows(), table = this.table, tableAny = table;
|
|
113
|
+
table._clearRowRangeHeightsMap();
|
|
114
|
+
let startRow, totalDrawHeight;
|
|
115
|
+
if ("all" === (tableAny.heightAdaptiveMode || "only-body")) startRow = 0, totalDrawHeight = table.tableNoFrameHeight; else {
|
|
116
|
+
const columnHeaderHeight = table.getRowsHeight(0, table.columnHeaderLevelCount - 1), bottomHeaderHeight = table.isPivotChart() ? table.getBottomFrozenRowsHeight() : 0;
|
|
117
|
+
startRow = table.columnHeaderLevelCount, totalDrawHeight = table.tableNoFrameHeight - columnHeaderHeight - bottomHeaderHeight;
|
|
118
|
+
}
|
|
119
|
+
const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;
|
|
120
|
+
if (0 === expandedRowIndices.length) {
|
|
121
|
+
let normalRowsBaseHeight = 0;
|
|
122
|
+
for (let row = startRow; row < endRow; row++) normalRowsBaseHeight += table.getRowHeight(row);
|
|
123
|
+
if (normalRowsBaseHeight > 0) {
|
|
124
|
+
const scaleFactor = totalDrawHeight / normalRowsBaseHeight;
|
|
125
|
+
for (let row = startRow; row < endRow; row++) {
|
|
126
|
+
const baseHeight = table.getRowHeight(row), newHeight = Math.max(Math.round(baseHeight * scaleFactor), 20);
|
|
127
|
+
scenegraph.setRowHeight(row, newHeight);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const expandedRowsInfo = new Map;
|
|
133
|
+
let totalExpandedExtraHeight = 0;
|
|
134
|
+
for (const rowIndex of expandedRowIndices) if (rowIndex >= table.columnHeaderLevelCount && rowIndex < endRow) {
|
|
135
|
+
const bodyRowIndex = rowIndex - table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(table, bodyRowIndex), currentRowHeight = table.getRowHeight(rowIndex), detailHeight = currentRowHeight - originalHeight;
|
|
136
|
+
expandedRowsInfo.set(rowIndex, {
|
|
137
|
+
baseHeight: originalHeight > 0 ? originalHeight : currentRowHeight,
|
|
138
|
+
detailHeight: detailHeight
|
|
139
|
+
}), totalExpandedExtraHeight += detailHeight;
|
|
140
|
+
}
|
|
141
|
+
let normalRowsBaseHeight = 0;
|
|
142
|
+
for (let row = startRow; row < endRow; row++) if (expandedRowsInfo.has(row)) {
|
|
143
|
+
const info = expandedRowsInfo.get(row);
|
|
144
|
+
info && (normalRowsBaseHeight += info.baseHeight);
|
|
145
|
+
} else normalRowsBaseHeight += table.getRowHeight(row);
|
|
146
|
+
const scaleFactor = (totalDrawHeight - totalExpandedExtraHeight) / normalRowsBaseHeight;
|
|
147
|
+
for (let row = startRow; row < endRow; row++) {
|
|
148
|
+
let newHeight;
|
|
149
|
+
if (expandedRowsInfo.has(row)) {
|
|
150
|
+
const info = expandedRowsInfo.get(row);
|
|
151
|
+
if (info) {
|
|
152
|
+
const scaledBaseHeight = Math.round(info.baseHeight * scaleFactor);
|
|
153
|
+
newHeight = scaledBaseHeight + info.detailHeight, expandedRowsInfo.set(row, {
|
|
154
|
+
baseHeight: scaledBaseHeight,
|
|
155
|
+
detailHeight: info.detailHeight
|
|
156
|
+
});
|
|
157
|
+
} else newHeight = Math.round(table.getRowHeight(row) * scaleFactor);
|
|
158
|
+
} else {
|
|
159
|
+
const baseHeight = table.getRowHeight(row);
|
|
160
|
+
newHeight = Math.round(baseHeight * scaleFactor);
|
|
161
|
+
}
|
|
162
|
+
scenegraph.setRowHeight(row, newHeight);
|
|
163
|
+
}
|
|
164
|
+
const allRows = [];
|
|
165
|
+
for (let row = startRow; row < endRow; row++) allRows.push(row);
|
|
166
|
+
if (allRows.length > 0) {
|
|
167
|
+
const currentTotalHeight = allRows.reduce(((sum, row) => sum + table.getRowHeight(row)), 0);
|
|
168
|
+
if (Math.abs(currentTotalHeight - totalDrawHeight) > 1) {
|
|
169
|
+
const lastRowIndex = allRows[allRows.length - 1], adjustment = totalDrawHeight - allRows.slice(0, -1).reduce(((sum, row) => sum + table.getRowHeight(row)), 0);
|
|
170
|
+
if (expandedRowsInfo.has(lastRowIndex)) {
|
|
171
|
+
const info = expandedRowsInfo.get(lastRowIndex);
|
|
172
|
+
if (info) {
|
|
173
|
+
const minHeight = info.detailHeight, finalHeight = Math.max(adjustment, minHeight);
|
|
174
|
+
scenegraph.setRowHeight(lastRowIndex, finalHeight), expandedRowsInfo.set(lastRowIndex, {
|
|
175
|
+
baseHeight: finalHeight - info.detailHeight,
|
|
176
|
+
detailHeight: info.detailHeight
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
} else scenegraph.setRowHeight(lastRowIndex, adjustment);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
this.callbacks.updateOriginalHeightsAfterAdaptive(expandedRowsInfo), this.callbacks.updateSubTablePositions();
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
extendUpdatePagination() {
|
|
186
|
+
const table = this.table;
|
|
187
|
+
this.originalUpdatePagination = table.updatePagination.bind(table), table.updatePagination = pagination => {
|
|
188
|
+
[ ...this.eventManager.getExpandedRows() ].forEach((rowIndex => {
|
|
189
|
+
this.callbacks.collapseRowToNoRealRecordIndex(rowIndex);
|
|
190
|
+
}));
|
|
191
|
+
const result = this.originalUpdatePagination(pagination);
|
|
192
|
+
return this.waitForRenderComplete((() => {
|
|
193
|
+
this.callbacks.restoreExpandedStatesAfter();
|
|
194
|
+
})), result;
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
extendToggleHierarchyState() {
|
|
198
|
+
const table = this.table;
|
|
199
|
+
this.originalToggleHierarchyState = table.toggleHierarchyState.bind(table), table.toggleHierarchyState = (col, row, recalculateColWidths = !0) => {
|
|
200
|
+
if (this.table.isHeader(col, row)) {
|
|
201
|
+
[ ...this.eventManager.getExpandedRows() ].forEach((rowIndex => {
|
|
202
|
+
this.callbacks.collapseRowToNoRealRecordIndex(rowIndex);
|
|
203
|
+
}));
|
|
204
|
+
const result = this.originalToggleHierarchyState(col, row, recalculateColWidths);
|
|
205
|
+
return this.waitForRenderComplete((() => {
|
|
206
|
+
this.callbacks.restoreExpandedStatesAfter();
|
|
207
|
+
})), result;
|
|
208
|
+
}
|
|
209
|
+
return this.originalToggleHierarchyState(col, row, recalculateColWidths);
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
extendUpdateFilterRules() {
|
|
213
|
+
const table = this.table;
|
|
214
|
+
this.originalUpdateFilterRules = table.updateFilterRules.bind(table), table.updateFilterRules = filterRules => {
|
|
215
|
+
[ ...this.eventManager.getExpandedRows() ].forEach((rowIndex => {
|
|
216
|
+
this.callbacks.collapseRow(rowIndex);
|
|
217
|
+
}));
|
|
218
|
+
return this.originalUpdateFilterRules(filterRules);
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
extendUpdateChartSizeForResizeColWidth() {
|
|
222
|
+
const table = this.table;
|
|
223
|
+
this.originalUpdateChartSizeForResizeColWidth = table.scenegraph.updateChartSizeForResizeColWidth.bind(table.scenegraph),
|
|
224
|
+
table.scenegraph.updateChartSizeForResizeColWidth = col => {
|
|
225
|
+
const originalGetRowHeight = table.getRowHeight.bind(table);
|
|
226
|
+
table.getRowHeight = row => {
|
|
227
|
+
if (this.eventManager.isRowExpanded(row)) {
|
|
228
|
+
const bodyRowIndex = row - this.table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);
|
|
229
|
+
return originalHeight > 0 ? originalHeight : originalGetRowHeight(row);
|
|
230
|
+
}
|
|
231
|
+
return originalGetRowHeight(row);
|
|
232
|
+
};
|
|
233
|
+
const result = this.originalUpdateChartSizeForResizeColWidth(col);
|
|
234
|
+
return table.getRowHeight = originalGetRowHeight, result;
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
extendUpdateChartSizeForResizeRowHeight() {
|
|
238
|
+
const table = this.table;
|
|
239
|
+
this.originalUpdateChartSizeForResizeRowHeight = table.scenegraph.updateChartSizeForResizeRowHeight.bind(table.scenegraph),
|
|
240
|
+
table.scenegraph.updateChartSizeForResizeRowHeight = col => {
|
|
241
|
+
const originalGetRowHeight = table.getRowHeight.bind(table);
|
|
242
|
+
table.getRowHeight = row => {
|
|
243
|
+
if (this.eventManager.isRowExpanded(row)) {
|
|
244
|
+
const bodyRowIndex = row - this.table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);
|
|
245
|
+
return originalHeight > 0 ? originalHeight : originalGetRowHeight(row);
|
|
246
|
+
}
|
|
247
|
+
return originalGetRowHeight(row);
|
|
248
|
+
};
|
|
249
|
+
const result = this.originalUpdateChartSizeForResizeRowHeight(col);
|
|
250
|
+
return table.getRowHeight = originalGetRowHeight, result;
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
extendGetRowY() {
|
|
254
|
+
var _a;
|
|
255
|
+
const scenegraph = this.table.scenegraph;
|
|
256
|
+
if (scenegraph.component) {
|
|
257
|
+
const originalShowResizeRow = scenegraph.component.showResizeRow.bind(scenegraph.component);
|
|
258
|
+
originalShowResizeRow && (scenegraph.component.showResizeRow = (row, x, isRightFrozen) => this.protectedShowResizeRow(originalShowResizeRow, row, x, isRightFrozen));
|
|
259
|
+
const originalUpdateResizeRow = null === (_a = scenegraph.component.updateResizeRow) || void 0 === _a ? void 0 : _a.bind(scenegraph.component);
|
|
260
|
+
originalUpdateResizeRow && (scenegraph.component.updateResizeRow = (row, x, isBottomFrozen) => this.protectedUpdateResizeRow(originalUpdateResizeRow, row, x, isBottomFrozen));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
extendUpdateRowHeight() {
|
|
264
|
+
const scenegraph = this.table.scenegraph;
|
|
265
|
+
this.originalUpdateRowHeight = scenegraph.updateRowHeight.bind(scenegraph), scenegraph.updateRowHeight = (row, detaY, skipTableHeightMap) => {
|
|
266
|
+
if (!this.eventManager.isRowExpanded(row) || !this.isDragging || this.dragStartIsPluginUnderline) return this.originalUpdateRowHeight(row, detaY, skipTableHeightMap);
|
|
267
|
+
detaY = Math.round(detaY), this.callbacks.updateRowHeightForExpand(row, detaY),
|
|
268
|
+
scenegraph.updateContainerHeight(row, detaY);
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
extendGetResizeColAt() {
|
|
272
|
+
const scenegraph = this.table.scenegraph;
|
|
273
|
+
this.originalGetResizeColAt = scenegraph.getResizeColAt.bind(scenegraph), scenegraph.getResizeColAt = (abstractX, abstractY, cellGroup) => {
|
|
274
|
+
if (!cellGroup) {
|
|
275
|
+
const cell = this.table.getCellAtRelativePosition(abstractX, abstractY);
|
|
276
|
+
if (cell && cell.row >= 0) {
|
|
277
|
+
if (this.eventManager.isRowExpanded(cell.row)) return {
|
|
278
|
+
col: -1,
|
|
279
|
+
row: -1
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return this.originalGetResizeColAt(abstractX, abstractY, cellGroup);
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
isMouseInPluginUnderlineArea(row) {
|
|
287
|
+
var _a, _b, _c, _d;
|
|
288
|
+
try {
|
|
289
|
+
const scrollTop = (null === (_b = null === (_a = this.table.stateManager) || void 0 === _a ? void 0 : _a.scroll) || void 0 === _b ? void 0 : _b.verticalBarPos) || 0, rowY = this.table.getRowsHeight(0, row - 1), rowHeight = this.table.getRowHeight(row), viewportRowBottomY = rowY + rowHeight - scrollTop + ((null === (_d = null === (_c = this.table.theme) || void 0 === _c ? void 0 : _c.frameStyle) || void 0 === _d ? void 0 : _d.shadowBlur) || 0), isNearRowBottom = this.currentMouseY >= viewportRowBottomY - (this.table.internalProps.limitMinHeight - 1) && this.currentMouseY <= viewportRowBottomY + (this.table.internalProps.limitMinHeight - 1), isExpandedRow = this.eventManager.isRowExpanded(row);
|
|
290
|
+
return !(isNearRowBottom && isExpandedRow);
|
|
291
|
+
} catch (error) {
|
|
292
|
+
return !1;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
protectedShowResizeRow(originalMethod, row, x, isRightFrozen) {
|
|
296
|
+
if (this.isDragging || (this.isDragging = !0, this.dragStartIsPluginUnderline = this.isMouseInPluginUnderlineArea(row)),
|
|
297
|
+
this.dragStartIsPluginUnderline) {
|
|
298
|
+
const originalGetRowsHeight = this.table.getRowsHeight.bind(this.table);
|
|
299
|
+
this.table.getRowsHeight = (startRow, endRow) => this.getRowsHeightWithOriginalHeight(startRow, endRow);
|
|
300
|
+
const originalGetRowHeight = this.table.getRowHeight.bind(this.table);
|
|
301
|
+
this.table.getRowHeight = targetRow => {
|
|
302
|
+
if (targetRow === row && this.eventManager.isRowExpanded(targetRow)) {
|
|
303
|
+
const bodyRowIndex = targetRow - this.table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);
|
|
304
|
+
return originalHeight > 0 ? originalHeight : originalGetRowHeight(targetRow);
|
|
305
|
+
}
|
|
306
|
+
return originalGetRowHeight(targetRow);
|
|
307
|
+
};
|
|
308
|
+
try {
|
|
309
|
+
return originalMethod(row, x, isRightFrozen);
|
|
310
|
+
} finally {
|
|
311
|
+
this.table.getRowsHeight = originalGetRowsHeight, this.table.getRowHeight = originalGetRowHeight;
|
|
312
|
+
}
|
|
313
|
+
} else {
|
|
314
|
+
const originalGetRowHeight = this.table.getRowHeight.bind(this.table);
|
|
315
|
+
this.table.getRowHeight = targetRow => {
|
|
316
|
+
if (targetRow === row && this.eventManager.isRowExpanded(targetRow)) {
|
|
317
|
+
const bodyRowIndex = targetRow - this.table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);
|
|
318
|
+
return originalGetRowHeight(targetRow) - originalHeight;
|
|
319
|
+
}
|
|
320
|
+
return originalGetRowHeight(targetRow);
|
|
321
|
+
};
|
|
322
|
+
try {
|
|
323
|
+
return originalMethod(row, x, isRightFrozen);
|
|
324
|
+
} finally {
|
|
325
|
+
this.table.getRowHeight = originalGetRowHeight;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
protectedUpdateResizeRow(originalMethod, row, x, isBottomFrozen) {
|
|
330
|
+
if (this.dragStartIsPluginUnderline) {
|
|
331
|
+
const originalGetRowsHeight = this.table.getRowsHeight.bind(this.table);
|
|
332
|
+
this.table.getRowsHeight = (startRow, endRow) => this.getRowsHeightWithOriginalHeight(startRow, endRow);
|
|
333
|
+
const originalGetRowHeight = this.table.getRowHeight.bind(this.table);
|
|
334
|
+
this.table.getRowHeight = targetRow => {
|
|
335
|
+
if (targetRow === row && this.eventManager.isRowExpanded(targetRow)) {
|
|
336
|
+
const bodyRowIndex = targetRow - this.table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);
|
|
337
|
+
return originalHeight > 0 ? originalHeight : originalGetRowHeight(targetRow);
|
|
338
|
+
}
|
|
339
|
+
return originalGetRowHeight(targetRow);
|
|
340
|
+
};
|
|
341
|
+
try {
|
|
342
|
+
return originalMethod(row, x, isBottomFrozen);
|
|
343
|
+
} finally {
|
|
344
|
+
this.table.getRowsHeight = originalGetRowsHeight, this.table.getRowHeight = originalGetRowHeight;
|
|
345
|
+
}
|
|
346
|
+
} else {
|
|
347
|
+
const originalGetRowHeight = this.table.getRowHeight.bind(this.table);
|
|
348
|
+
this.table.getRowHeight = targetRow => {
|
|
349
|
+
if (targetRow === row && this.eventManager.isRowExpanded(targetRow)) {
|
|
350
|
+
const bodyRowIndex = targetRow - this.table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);
|
|
351
|
+
return originalGetRowHeight(targetRow) - originalHeight;
|
|
352
|
+
}
|
|
353
|
+
return originalGetRowHeight(targetRow);
|
|
354
|
+
};
|
|
355
|
+
try {
|
|
356
|
+
return originalMethod(row, x, isBottomFrozen);
|
|
357
|
+
} finally {
|
|
358
|
+
this.table.getRowHeight = originalGetRowHeight;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
getRowsHeightWithOriginalHeight(startRow, endRow) {
|
|
363
|
+
let totalHeight = 0;
|
|
364
|
+
for (let row = startRow; row <= endRow; row++) {
|
|
365
|
+
if (this.eventManager.isRowExpanded(row) && row === endRow) {
|
|
366
|
+
const bodyRowIndex = row - this.table.columnHeaderLevelCount, originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);
|
|
367
|
+
totalHeight += originalHeight > 0 ? originalHeight : this.table.getRowHeight(row);
|
|
368
|
+
} else totalHeight += this.table.getRowHeight(row);
|
|
369
|
+
}
|
|
370
|
+
return totalHeight;
|
|
371
|
+
}
|
|
372
|
+
waitForRenderComplete(callback) {
|
|
373
|
+
const onAfterRender = () => {
|
|
374
|
+
this.table.off(TABLE_EVENT_TYPE.AFTER_RENDER, onAfterRender), callback();
|
|
375
|
+
};
|
|
376
|
+
this.table.on(TABLE_EVENT_TYPE.AFTER_RENDER, onAfterRender);
|
|
377
|
+
}
|
|
378
|
+
cleanup() {
|
|
379
|
+
if (this.mouseEventListener) {
|
|
380
|
+
try {
|
|
381
|
+
const table = this.table;
|
|
382
|
+
if (table && table.internalProps && table.internalProps.canvas) {
|
|
383
|
+
const canvas = table.internalProps.canvas;
|
|
384
|
+
canvas.removeEventListener("mousemove", this.mouseEventListener), canvas.removeEventListener("mousedown", this.mouseEventListener),
|
|
385
|
+
canvas.removeEventListener("mouseup", this.mouseEventListener);
|
|
386
|
+
}
|
|
387
|
+
} catch (error) {}
|
|
388
|
+
this.mouseEventListener = void 0;
|
|
389
|
+
}
|
|
390
|
+
if (this.originalUpdateCellContent && this.table) {
|
|
391
|
+
const table = this.table;
|
|
392
|
+
table.scenegraph && table.scenegraph.updateCellContent && (table.scenegraph.updateCellContent = this.originalUpdateCellContent),
|
|
393
|
+
this.originalUpdateCellContent = void 0;
|
|
394
|
+
}
|
|
395
|
+
if (this.originalUpdateResizeRow && this.table) {
|
|
396
|
+
const table = this.table;
|
|
397
|
+
table.stateManager && table.stateManager.updateResizeRow && (table.stateManager.updateResizeRow = this.originalUpdateResizeRow),
|
|
398
|
+
this.originalUpdateResizeRow = void 0;
|
|
399
|
+
}
|
|
400
|
+
if (this.originalDealHeightMode && this.table) {
|
|
401
|
+
const table = this.table;
|
|
402
|
+
table.scenegraph && table.scenegraph.dealHeightMode && (table.scenegraph.dealHeightMode = this.originalDealHeightMode),
|
|
403
|
+
this.originalDealHeightMode = void 0;
|
|
404
|
+
}
|
|
405
|
+
if (this.originalUpdatePagination && this.table) {
|
|
406
|
+
const table = this.table;
|
|
407
|
+
table.updatePagination && (table.updatePagination = this.originalUpdatePagination),
|
|
408
|
+
this.originalUpdatePagination = void 0;
|
|
409
|
+
}
|
|
410
|
+
if (this.originalToggleHierarchyState && this.table) {
|
|
411
|
+
const table = this.table;
|
|
412
|
+
table.toggleHierarchyState && (table.toggleHierarchyState = this.originalToggleHierarchyState),
|
|
413
|
+
this.originalToggleHierarchyState = void 0;
|
|
414
|
+
}
|
|
415
|
+
if (this.originalUpdateFilterRules && this.table) {
|
|
416
|
+
const table = this.table;
|
|
417
|
+
table.updateFilterRules && (table.updateFilterRules = this.originalUpdateFilterRules),
|
|
418
|
+
this.originalUpdateFilterRules = void 0;
|
|
419
|
+
}
|
|
420
|
+
if (this.originalUpdateChartSizeForResizeColWidth && this.table) {
|
|
421
|
+
const table = this.table;
|
|
422
|
+
table.scenegraph && table.scenegraph.updateChartSizeForResizeColWidth && (table.scenegraph.updateChartSizeForResizeColWidth = this.originalUpdateChartSizeForResizeColWidth),
|
|
423
|
+
this.originalUpdateChartSizeForResizeColWidth = void 0;
|
|
424
|
+
}
|
|
425
|
+
if (this.originalUpdateChartSizeForResizeRowHeight && this.table) {
|
|
426
|
+
const table = this.table;
|
|
427
|
+
table.scenegraph && table.scenegraph.updateChartSizeForResizeRowHeight && (table.scenegraph.updateChartSizeForResizeRowHeight = this.originalUpdateChartSizeForResizeRowHeight),
|
|
428
|
+
this.originalUpdateChartSizeForResizeRowHeight = void 0;
|
|
429
|
+
}
|
|
430
|
+
if (this.originalUpdateRowHeight && this.table) {
|
|
431
|
+
const table = this.table;
|
|
432
|
+
table.scenegraph && table.scenegraph.updateRowHeight && (table.scenegraph.updateRowHeight = this.originalUpdateRowHeight),
|
|
433
|
+
this.originalUpdateRowHeight = void 0;
|
|
434
|
+
}
|
|
435
|
+
if (this.originalGetResizeColAt && this.table) {
|
|
436
|
+
const scenegraph = this.table.scenegraph;
|
|
437
|
+
scenegraph && scenegraph.getResizeColAt && (scenegraph.getResizeColAt = this.originalGetResizeColAt),
|
|
438
|
+
this.originalGetResizeColAt = void 0;
|
|
439
|
+
}
|
|
440
|
+
this.isDragging = !1, this.dragStartIsPluginUnderline = !1, this.currentMouseX = 0,
|
|
441
|
+
this.currentMouseY = 0, this.callbacks = null, this.table = null, this.configManager = null,
|
|
442
|
+
this.eventManager = null;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
//# sourceMappingURL=table-api-extensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/master-detail-plugin/table-api-extensions.ts"],"names":[],"mappings":"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","file":"table-api-extensions.js","sourcesContent":["import type * as VTable from '@visactor/vtable';\r\nimport { TABLE_EVENT_TYPE } from '@visactor/vtable';\r\nimport type { Group } from '@visactor/vtable/es/scenegraph/graphic/group';\r\nimport { getOriginalRowHeight } from './utils';\r\nimport type { ConfigManager } from './config';\r\nimport type { EventManager } from './events';\r\n\r\n/**\r\n * 表格 API 扩展类\r\n * 负责拦截和增强 VTable 的各种方法\r\n */\r\nexport class TableAPIExtensions {\r\n private table: VTable.ListTable;\r\n private configManager: ConfigManager;\r\n private eventManager: EventManager;\r\n // 原始方法的引用\r\n private originalUpdateCellContent?: (col: number, row: number, forceFastUpdate?: boolean) => Group;\r\n private originalUpdateResizeRow?: (xInTable: number, yInTable: number) => void;\r\n private originalDealHeightMode?: () => void;\r\n private originalUpdatePagination?: (pagination: VTable.TYPES.IPagination) => void;\r\n private originalToggleHierarchyState?: (col: number, row: number, recalculateColWidths?: boolean) => void;\r\n private originalUpdateFilterRules?: (filterRules: VTable.TYPES.FilterRules) => void;\r\n private originalUpdateChartSizeForResizeColWidth?: (col: number) => void;\r\n private originalUpdateChartSizeForResizeRowHeight?: (row: number) => void;\r\n private originalUpdateRowHeight?: (row: number, detaY: number, skipTableHeightMap?: boolean) => void;\r\n private originalGetResizeColAt?: (\r\n abstractX: number,\r\n abstractY: number,\r\n cellGroup?: Group\r\n ) => { col: number; row: number; x?: number; rightFrozen?: boolean };\r\n\r\n // 鼠标位置跟踪\r\n private currentMouseX: number = 0;\r\n private currentMouseY: number = 0;\r\n private mouseEventListener?: (event: MouseEvent) => void;\r\n\r\n // 拖拽状态跟踪\r\n private isDragging: boolean = false; // 表示是否在拖拽中\r\n private dragStartIsPluginUnderline: boolean = false; // 表示拖拽的是否是我主从表插件加入的下划线\r\n\r\n // 回调函数\r\n private callbacks: {\r\n addUnderlineToCell: (cellGroup: Group, originalHeight: number) => void;\r\n updateOriginalHeightsAfterAdaptive: (\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ) => void;\r\n collapseRowToNoRealRecordIndex: (rowIndex: number) => void;\r\n expandRow: (rowIndex: number) => void;\r\n restoreExpandedStatesAfter: () => void;\r\n collapseRow: (rowIndex: number) => void;\r\n updateSubTablePositions: () => void;\r\n updateRowHeightForExpand: (rowIndex: number, deltaHeight: number) => void;\r\n };\r\n\r\n constructor(\r\n table: VTable.ListTable,\r\n configManager: ConfigManager,\r\n eventManager: EventManager,\r\n callbacks: {\r\n addUnderlineToCell: (cellGroup: Group, originalHeight: number) => void;\r\n updateOriginalHeightsAfterAdaptive: (\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ) => void;\r\n collapseRowToNoRealRecordIndex: (rowIndex: number) => void;\r\n expandRow: (rowIndex: number) => void;\r\n restoreExpandedStatesAfter: () => void;\r\n collapseRow: (rowIndex: number) => void;\r\n updateSubTablePositions: () => void;\r\n updateRowHeightForExpand: (rowIndex: number, deltaHeight: number) => void;\r\n }\r\n ) {\r\n this.table = table;\r\n this.configManager = configManager;\r\n this.eventManager = eventManager;\r\n this.callbacks = callbacks;\r\n\r\n // 初始化鼠标位置跟踪\r\n this.initMouseTracking();\r\n }\r\n\r\n /**\r\n * 初始化鼠标位置跟踪\r\n */\r\n private initMouseTracking(): void {\r\n this.mouseEventListener = (event: MouseEvent) => {\r\n try {\r\n const table = this.table;\r\n if (table && table.internalProps && table.internalProps.canvas) {\r\n const rect = table.internalProps.canvas.getBoundingClientRect();\r\n this.currentMouseX = event.clientX - rect.left;\r\n this.currentMouseY = event.clientY - rect.top;\r\n }\r\n } catch (error) {\r\n // 忽略鼠标位置计算错误\r\n }\r\n // 在鼠标释放时重置拖拽状态\r\n if (event.type === 'mouseup') {\r\n this.isDragging = false;\r\n this.dragStartIsPluginUnderline = false;\r\n }\r\n };\r\n\r\n // 添加鼠标移动监听\r\n try {\r\n const table = this.table;\r\n if (table && table.internalProps && table.internalProps.canvas) {\r\n const canvas = table.internalProps.canvas;\r\n canvas.addEventListener('mousemove', this.mouseEventListener);\r\n canvas.addEventListener('mousedown', this.mouseEventListener);\r\n canvas.addEventListener('mouseup', this.mouseEventListener);\r\n }\r\n } catch (error) {\r\n console.warn('Error setting up mouse tracking:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 扩展表格 API\r\n */\r\n extendTableAPI(): void {\r\n // 处理展开行单元格高度,还有下划线问题\r\n this.extendUpdateCellContent();\r\n // 处理展开行高更改时候的limitMinHeight\r\n this.extendUpdateResizeRow();\r\n // 处理主从表的adaptive的高度计算\r\n this.extendDealHeightMode();\r\n // 处理页面切换的时候的主从表处理\r\n this.extendUpdatePagination();\r\n // 处理表头分组和折叠的主从表处理\r\n this.extendToggleHierarchyState();\r\n // 处理过滤的主从表处理\r\n this.extendUpdateFilterRules();\r\n // 处理改变展开行的宽度的时候CellType为Chart的高度的处理\r\n this.extendUpdateChartSizeForResizeColWidth();\r\n // 处理改变展开行的高度的时候CellType为Chart的高度的处理\r\n this.extendUpdateChartSizeForResizeRowHeight();\r\n // 处理主从表展开行的改变行高的基准线的处理\r\n this.extendGetRowY();\r\n // 处理主从表展开行的改变行高的改变行高来方法来处理展开行的两个下划线(主从表加的CellGroup的下滑线,还有原本的行高的下划线)的不同处理\r\n this.extendUpdateRowHeight();\r\n // 处理展开行的列宽调整检测\r\n this.extendGetResizeColAt();\r\n }\r\n\r\n /**\r\n * 扩展 updateCellContent 方法\r\n */\r\n private extendUpdateCellContent(): void {\r\n const table = this.table;\r\n this.originalUpdateCellContent = table.scenegraph.updateCellContent.bind(table.scenegraph);\r\n table.scenegraph.updateCellContent = (col: number, row: number, forceFastUpdate: boolean = false) => {\r\n const isExpandedRow = this.eventManager.isRowExpanded(row);\r\n if (isExpandedRow) {\r\n // 对于展开行,我们需要临时恢复到原始高度来创建cellGroup\r\n const bodyRowIndex = row - this.table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const currentHeight = this.table.getRowHeight(row);\r\n if (originalHeight > 0 && currentHeight !== originalHeight) {\r\n // 临时设置为原始高度\r\n this.table._setRowHeight(row, originalHeight, false);\r\n // 保存原始位置信息\r\n const oldCellGroup = this.table.scenegraph.getCell(col, row);\r\n const originalY = oldCellGroup?.attribute?.y;\r\n // 调用原始方法,此时内容会按照原始高度创建\r\n const result = this.originalUpdateCellContent?.(col, row, forceFastUpdate);\r\n // 恢复展开后的高度\r\n this.table._setRowHeight(row, currentHeight, false);\r\n // 如果位置发生了变化,恢复到原始位置\r\n if (originalY !== undefined) {\r\n const newCellGroup = this.table.scenegraph.getCell(col, row);\r\n if (newCellGroup && newCellGroup.attribute.y !== originalY) {\r\n newCellGroup.setAttribute('y', originalY);\r\n }\r\n }\r\n // 为展开行添加下划线\r\n const cellGroup = this.table.scenegraph.getCell(col, row);\r\n if (cellGroup) {\r\n if (row !== this.table.rowCount - 1) {\r\n this.callbacks.addUnderlineToCell(cellGroup, originalHeight);\r\n }\r\n // 触发事件处理\r\n this.eventManager.handleAfterUpdateCellContentWidth({\r\n col,\r\n row,\r\n cellHeight: cellGroup.attribute?.height || 0,\r\n cellGroup,\r\n padding: [0, 0, 0, 0],\r\n textBaseline: 'middle' as CanvasTextBaseline\r\n });\r\n }\r\n return result;\r\n }\r\n }\r\n // 非展开行或其他情况,直接调用原始方法\r\n const result = this.originalUpdateCellContent?.(col, row, forceFastUpdate);\r\n return result;\r\n };\r\n }\r\n\r\n /**\r\n * 扩展 updateResizeRow 方法\r\n */\r\n private extendUpdateResizeRow(): void {\r\n const table = this.table;\r\n this.originalUpdateResizeRow = table.stateManager.updateResizeRow.bind(table.stateManager);\r\n table.stateManager.updateResizeRow = (xInTable: number, yInTable: number) => {\r\n const state = table.stateManager;\r\n xInTable = Math.ceil(xInTable);\r\n yInTable = Math.ceil(yInTable);\r\n let detaY = state.rowResize.isBottomFrozen ? state.rowResize.y - yInTable : yInTable - state.rowResize.y;\r\n // table.getColWidth会使用Math.round,因此这里直接跳过小于1px的修改\r\n if (Math.abs(detaY) < 1) {\r\n return;\r\n }\r\n // 获取当前调整的行索引\r\n const resizeRowIndex = state.rowResize.row;\r\n const isExpandedRow = this.eventManager.isRowExpanded(resizeRowIndex);\r\n // 保存原始的 limitMinHeight\r\n const originalLimitMinHeight = state.table.internalProps.limitMinHeight;\r\n // 计算当前行的动态最小高度\r\n let currentRowMinHeight = originalLimitMinHeight;\r\n if (isExpandedRow) {\r\n const bodyRowIndex = resizeRowIndex - this.table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const currentRowHeight = this.table.getRowHeight(resizeRowIndex);\r\n const detailHeight = currentRowHeight - originalHeight;\r\n if (this.dragStartIsPluginUnderline) {\r\n // 拖拽插件下划线时:原始最小高度 + 子表高度\r\n currentRowMinHeight = originalLimitMinHeight + detailHeight;\r\n } else {\r\n // 拖拽原始下划线时:CellGroup高度 + 原始最小高度\r\n currentRowMinHeight = originalHeight + originalLimitMinHeight;\r\n }\r\n }\r\n\r\n // limitMinHeight限制\r\n let afterSize = state.table.getRowHeight(state.rowResize.row) + detaY;\r\n if (afterSize < currentRowMinHeight) {\r\n afterSize = currentRowMinHeight;\r\n detaY = afterSize - state.table.getRowHeight(state.rowResize.row);\r\n }\r\n // adaptive 模式下检查下一行的最小高度\r\n if (state.table.heightMode === 'adaptive' && state.rowResize.row < state.table.rowCount - 1) {\r\n const bottomRowHeightCache = state.table.getRowHeight(state.rowResize.row + 1);\r\n let bottomRowHeight = bottomRowHeightCache;\r\n bottomRowHeight -= detaY;\r\n // 计算下一行的最小高度\r\n let nextRowMinHeight = originalLimitMinHeight; // 默认使用原始值\r\n const nextRowIndex = state.rowResize.row + 1;\r\n const isNextRowExpanded = this.eventManager.isRowExpanded(nextRowIndex);\r\n if (isNextRowExpanded) {\r\n // 如果下一行也是展开行,计算其动态最小高度\r\n const nextBodyRowIndex = nextRowIndex - this.table.columnHeaderLevelCount;\r\n const nextOriginalHeight = getOriginalRowHeight(this.table, nextBodyRowIndex);\r\n const nextCurrentRowHeight = this.table.getRowHeight(nextRowIndex);\r\n const nextDetailHeight = nextCurrentRowHeight - nextOriginalHeight;\r\n // 对下一行,使用 originalLimitMinHeight + detailHeight 作为最小高度\r\n nextRowMinHeight = originalLimitMinHeight + nextDetailHeight;\r\n }\r\n if (bottomRowHeight - detaY < nextRowMinHeight) {\r\n detaY = bottomRowHeight - nextRowMinHeight;\r\n }\r\n }\r\n detaY = Math.ceil(detaY);\r\n\r\n // 调用对应的行高更新函数\r\n if (\r\n state.rowResize.row < state.table.columnHeaderLevelCount ||\r\n state.rowResize.row >= state.table.rowCount - state.table.bottomFrozenRowCount\r\n ) {\r\n this.updateResizeColForRow(detaY, state);\r\n } else if (state.table.internalProps.rowResizeType === 'all') {\r\n this.updateResizeColForAll(detaY, state);\r\n } else {\r\n this.updateResizeColForRow(detaY, state);\r\n }\r\n\r\n state.rowResize.y = yInTable;\r\n state.table.scenegraph.component.updateResizeRow(state.rowResize.row, xInTable, state.rowResize.isBottomFrozen);\r\n state.table.scenegraph.updateNextFrame();\r\n };\r\n }\r\n\r\n /**\r\n * 简单的行高调整(用于 row 类型)\r\n */\r\n private updateResizeColForRow(detaY: number, state: VTable.ListTable['stateManager']): void {\r\n if (state.table.heightMode === 'adaptive' && state.rowResize.row < state.table.rowCount - 1) {\r\n state.table.scenegraph.updateRowHeight(state.rowResize.row, detaY);\r\n state.table.scenegraph.updateRowHeight(state.rowResize.row + 1, -detaY);\r\n\r\n state.table.internalProps._heightResizedRowMap.add(state.rowResize.row);\r\n state.table.internalProps._heightResizedRowMap.add(state.rowResize.row + 1);\r\n } else {\r\n state.table.scenegraph.updateRowHeight(state.rowResize.row, detaY);\r\n state.table.internalProps._heightResizedRowMap.add(state.rowResize.row);\r\n }\r\n }\r\n\r\n /**\r\n * 全部行高调整(用于 all 类型)\r\n */\r\n private updateResizeColForAll(detaY: number, state: VTable.ListTable['stateManager']): void {\r\n for (let row = state.table.frozenRowCount; row < state.table.rowCount - state.table.bottomFrozenRowCount; row++) {\r\n state.table.scenegraph.updateRowHeight(row, detaY);\r\n state.table.internalProps._heightResizedRowMap.add(row);\r\n }\r\n }\r\n\r\n /**\r\n * 扩展 dealHeightMode 方法\r\n */\r\n private extendDealHeightMode(): void {\r\n // 拦截并增强 dealHeightMode 方法\r\n const scenegraph = this.table.scenegraph;\r\n this.originalDealHeightMode = scenegraph.dealHeightMode.bind(scenegraph);\r\n\r\n scenegraph.dealHeightMode = () => {\r\n if (this.table.heightMode !== 'adaptive') {\r\n // 非 adaptive 模式,使用原始逻辑\r\n return this.originalDealHeightMode();\r\n }\r\n\r\n // adaptive 模式下的智能处理\r\n const expandedRowIndices = this.eventManager.getExpandedRows();\r\n\r\n // 清除行高缓存,准备重新计算\r\n const table = this.table;\r\n const tableAny = table;\r\n table._clearRowRangeHeightsMap();\r\n\r\n // 根据 heightAdaptiveMode 配置决定处理范围\r\n const heightAdaptiveMode = tableAny.heightAdaptiveMode || 'only-body';\r\n let startRow: number;\r\n let totalDrawHeight: number;\r\n if (heightAdaptiveMode === 'all') {\r\n // 'all' 模式:包含表头在内的所有行都参与高度适应计算\r\n startRow = 0;\r\n totalDrawHeight = table.tableNoFrameHeight;\r\n } else {\r\n // 'only-body' 模式(默认):只有 body 部分参与高度适应计算\r\n const columnHeaderHeight = table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\r\n const bottomHeaderHeight = table.isPivotChart() ? table.getBottomFrozenRowsHeight() : 0;\r\n startRow = table.columnHeaderLevelCount;\r\n totalDrawHeight = table.tableNoFrameHeight - columnHeaderHeight - bottomHeaderHeight;\r\n }\r\n\r\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\r\n\r\n // 如果没有展开行,使用原始逻辑处理所有行\r\n if (expandedRowIndices.length === 0) {\r\n // 计算所有行的基础高度总和\r\n let normalRowsBaseHeight = 0;\r\n for (let row = startRow; row < endRow; row++) {\r\n normalRowsBaseHeight += table.getRowHeight(row);\r\n }\r\n\r\n if (normalRowsBaseHeight > 0) {\r\n // 计算缩放因子\r\n const scaleFactor = totalDrawHeight / normalRowsBaseHeight;\r\n // 对所有行应用缩放\r\n for (let row = startRow; row < endRow; row++) {\r\n const baseHeight = table.getRowHeight(row);\r\n const newHeight = Math.max(Math.round(baseHeight * scaleFactor), 20);\r\n scenegraph.setRowHeight(row, newHeight);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n // 有展开行时,需要特殊处理\r\n // 累计所有子表高度\r\n const expandedRowsInfo = new Map<number, { baseHeight: number; detailHeight: number }>();\r\n let totalExpandedExtraHeight = 0;\r\n\r\n for (const rowIndex of expandedRowIndices) {\r\n if (rowIndex >= table.columnHeaderLevelCount && rowIndex < endRow) {\r\n const bodyRowIndex = rowIndex - table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(table, bodyRowIndex);\r\n const currentRowHeight = table.getRowHeight(rowIndex);\r\n const detailHeight = currentRowHeight - originalHeight;\r\n expandedRowsInfo.set(rowIndex, {\r\n baseHeight: originalHeight > 0 ? originalHeight : currentRowHeight,\r\n detailHeight\r\n });\r\n totalExpandedExtraHeight += detailHeight; // 所有展开行的展开空间高度和\r\n }\r\n }\r\n\r\n // 计算普通行(非展开行)的基础高度总和\r\n let normalRowsBaseHeight = 0;\r\n\r\n for (let row = startRow; row < endRow; row++) {\r\n if (!expandedRowsInfo.has(row)) {\r\n normalRowsBaseHeight += table.getRowHeight(row);\r\n } else {\r\n // 展开行也要参与基础高度计算(用于比例计算)\r\n const info = expandedRowsInfo.get(row);\r\n if (info) {\r\n normalRowsBaseHeight += info.baseHeight; // 普通行的高度和\r\n }\r\n }\r\n }\r\n\r\n // 计算可用于缩放的高度(总高度 - 展开行的额外高度)\r\n const availableHeightForScaling = totalDrawHeight - totalExpandedExtraHeight;\r\n\r\n // 计算缩放因子\r\n const scaleFactor = availableHeightForScaling / normalRowsBaseHeight;\r\n\r\n // 应用新的行高\r\n for (let row = startRow; row < endRow; row++) {\r\n let newHeight: number;\r\n\r\n if (expandedRowsInfo.has(row)) {\r\n // 展开行:基础高度按比例缩放 + 固定的子表高度\r\n const info = expandedRowsInfo.get(row);\r\n if (info) {\r\n const scaledBaseHeight = Math.round(info.baseHeight * scaleFactor);\r\n newHeight = scaledBaseHeight + info.detailHeight;\r\n // 更新展开行信息,记录新的基础高度\r\n expandedRowsInfo.set(row, {\r\n baseHeight: scaledBaseHeight,\r\n detailHeight: info.detailHeight\r\n });\r\n } else {\r\n newHeight = Math.round(table.getRowHeight(row) * scaleFactor);\r\n }\r\n } else {\r\n // 普通行:按比例缩放\r\n const baseHeight = table.getRowHeight(row);\r\n newHeight = Math.round(baseHeight * scaleFactor);\r\n }\r\n\r\n // 应用最小高度限制\r\n newHeight = newHeight;\r\n // 设置行高\r\n scenegraph.setRowHeight(row, newHeight);\r\n }\r\n\r\n // 最后一行特殊处理,确保总高度精确匹配\r\n // 构建所有行的数组\r\n const allRows: number[] = [];\r\n for (let row = startRow; row < endRow; row++) {\r\n allRows.push(row);\r\n }\r\n\r\n if (allRows.length > 0) {\r\n const currentTotalHeight = allRows.reduce((sum, row) => sum + table.getRowHeight(row), 0);\r\n if (Math.abs(currentTotalHeight - totalDrawHeight) > 1) {\r\n const lastRowIndex = allRows[allRows.length - 1];\r\n const otherRowsHeight = allRows.slice(0, -1).reduce((sum, row) => sum + table.getRowHeight(row), 0);\r\n const adjustment = totalDrawHeight - otherRowsHeight;\r\n if (expandedRowsInfo.has(lastRowIndex)) {\r\n // 最后一行是展开行,调整时要保证子表高度\r\n const info = expandedRowsInfo.get(lastRowIndex);\r\n if (info) {\r\n const minHeight = info.detailHeight; // 至少保留子表高度\r\n const finalHeight = Math.max(adjustment, minHeight);\r\n scenegraph.setRowHeight(lastRowIndex, finalHeight);\r\n // 更新展开行信息\r\n expandedRowsInfo.set(lastRowIndex, {\r\n baseHeight: finalHeight - info.detailHeight,\r\n detailHeight: info.detailHeight\r\n });\r\n }\r\n } else {\r\n // 最后一行是普通行\r\n scenegraph.setRowHeight(lastRowIndex, adjustment);\r\n }\r\n }\r\n }\r\n\r\n // 重要:更新原始高度缓存,确保后续操作使用新的基础高度\r\n this.callbacks.updateOriginalHeightsAfterAdaptive(expandedRowsInfo);\r\n this.callbacks.updateSubTablePositions();\r\n };\r\n }\r\n\r\n /**\r\n * 扩展 updatePagination 方法\r\n */\r\n private extendUpdatePagination(): void {\r\n const table = this.table;\r\n // 拦截 updatePagination 方法,在分页切换时收起所有展开的行\r\n this.originalUpdatePagination = table.updatePagination.bind(table);\r\n table.updatePagination = (pagination: VTable.TYPES.IPagination) => {\r\n const currentExpandedRows = [...this.eventManager.getExpandedRows()];\r\n currentExpandedRows.forEach(rowIndex => {\r\n this.callbacks.collapseRowToNoRealRecordIndex(rowIndex);\r\n });\r\n const result = this.originalUpdatePagination(pagination);\r\n // 使用事件钩子替代固定延时\r\n this.waitForRenderComplete(() => {\r\n this.callbacks.restoreExpandedStatesAfter();\r\n });\r\n\r\n return result;\r\n };\r\n }\r\n\r\n /**\r\n * 扩展 toggleHierarchyState 方法\r\n */\r\n private extendToggleHierarchyState(): void {\r\n const table = this.table;\r\n // 拦截 toggleHierarchy 方法\r\n this.originalToggleHierarchyState = table.toggleHierarchyState.bind(table);\r\n table.toggleHierarchyState = (col: number, row: number, recalculateColWidths: boolean = true) => {\r\n // 处理表头分组的情况\r\n if (this.table.isHeader(col, row)) {\r\n const currentExpandedRows = [...this.eventManager.getExpandedRows()];\r\n currentExpandedRows.forEach(rowIndex => {\r\n this.callbacks.collapseRowToNoRealRecordIndex(rowIndex);\r\n });\r\n const result = this.originalToggleHierarchyState(col, row, recalculateColWidths);\r\n // 使用事件钩子替代固定延时\r\n this.waitForRenderComplete(() => {\r\n this.callbacks.restoreExpandedStatesAfter();\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return this.originalToggleHierarchyState(col, row, recalculateColWidths);\r\n };\r\n }\r\n\r\n /**\r\n * 扩展 updateFilterRules 方法\r\n */\r\n private extendUpdateFilterRules(): void {\r\n const table = this.table;\r\n // 拦截 updateFilterRules 方法,在过滤时保持展开状态\r\n this.originalUpdateFilterRules = table.updateFilterRules.bind(table);\r\n table.updateFilterRules = (filterRules: VTable.TYPES.FilterRules) => {\r\n // 保存当前展开的记录索引\r\n const currentExpandedRows = [...this.eventManager.getExpandedRows()];\r\n currentExpandedRows.forEach(rowIndex => {\r\n this.callbacks.collapseRow(rowIndex);\r\n });\r\n const result = this.originalUpdateFilterRules(filterRules);\r\n return result;\r\n };\r\n }\r\n\r\n /**\r\n * 扩展 updateChartSizeForResizeColWidth 方法\r\n */\r\n private extendUpdateChartSizeForResizeColWidth(): void {\r\n const table = this.table;\r\n this.originalUpdateChartSizeForResizeColWidth = table.scenegraph.updateChartSizeForResizeColWidth.bind(\r\n table.scenegraph\r\n );\r\n table.scenegraph.updateChartSizeForResizeColWidth = (col: number) => {\r\n // 临时保存原始的getRowHeight方法\r\n const originalGetRowHeight = table.getRowHeight.bind(table);\r\n // 创建保护版本的getRowHeight,对展开行返回原始高度\r\n table.getRowHeight = (row: number) => {\r\n const isExpandedRow = this.eventManager.isRowExpanded(row);\r\n if (isExpandedRow) {\r\n const bodyRowIndex = row - this.table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n return originalHeight > 0 ? originalHeight : originalGetRowHeight(row);\r\n }\r\n return originalGetRowHeight(row);\r\n };\r\n // 调用原始的图表大小更新方法\r\n const result = this.originalUpdateChartSizeForResizeColWidth(col);\r\n // 恢复原始的getRowHeight方法\r\n table.getRowHeight = originalGetRowHeight;\r\n return result;\r\n };\r\n }\r\n\r\n private extendUpdateChartSizeForResizeRowHeight(): void {\r\n const table = this.table;\r\n this.originalUpdateChartSizeForResizeRowHeight = table.scenegraph.updateChartSizeForResizeRowHeight.bind(\r\n table.scenegraph\r\n );\r\n table.scenegraph.updateChartSizeForResizeRowHeight = (col: number) => {\r\n const originalGetRowHeight = table.getRowHeight.bind(table);\r\n table.getRowHeight = (row: number) => {\r\n const isExpandedRow = this.eventManager.isRowExpanded(row);\r\n if (isExpandedRow) {\r\n const bodyRowIndex = row - this.table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n return originalHeight > 0 ? originalHeight : originalGetRowHeight(row);\r\n }\r\n return originalGetRowHeight(row);\r\n };\r\n const result = this.originalUpdateChartSizeForResizeRowHeight(col);\r\n table.getRowHeight = originalGetRowHeight;\r\n return result;\r\n };\r\n }\r\n\r\n /**\r\n * 处理 getRowY 中使用getRowHeight的方法\r\n */\r\n private extendGetRowY(): void {\r\n // 直接拦截 scenegraph.component 的方法\r\n const scenegraph = this.table.scenegraph;\r\n if (scenegraph.component) {\r\n // 拦截 showResizeRow 方法\r\n const originalShowResizeRow = scenegraph.component.showResizeRow.bind(scenegraph.component);\r\n if (originalShowResizeRow) {\r\n scenegraph.component.showResizeRow = (row: number, x: number, isRightFrozen?: boolean) => {\r\n return this.protectedShowResizeRow(originalShowResizeRow, row, x, isRightFrozen);\r\n };\r\n }\r\n\r\n // 拦截 updateResizeRow 方法\r\n const originalUpdateResizeRow = scenegraph.component.updateResizeRow?.bind(scenegraph.component);\r\n if (originalUpdateResizeRow) {\r\n scenegraph.component.updateResizeRow = (row: number, x: number, isBottomFrozen?: boolean) => {\r\n return this.protectedUpdateResizeRow(originalUpdateResizeRow, row, x, isBottomFrozen);\r\n };\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 扩展 updateRowHeight 方法\r\n */\r\n private extendUpdateRowHeight(): void {\r\n const scenegraph = this.table.scenegraph;\r\n this.originalUpdateRowHeight = scenegraph.updateRowHeight.bind(scenegraph);\r\n scenegraph.updateRowHeight = (row: number, detaY: number, skipTableHeightMap?: boolean) => {\r\n const isExpandedRow = this.eventManager.isRowExpanded(row);\r\n if (isExpandedRow && this.isDragging && !this.dragStartIsPluginUnderline) {\r\n detaY = Math.round(detaY);\r\n this.callbacks.updateRowHeightForExpand(row, detaY);\r\n scenegraph.updateContainerHeight(row, detaY);\r\n } else {\r\n return this.originalUpdateRowHeight(row, detaY, skipTableHeightMap);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * 扩展 getResizeColAt 方法\r\n * 在展开行情况下提供正确的列宽调整检测\r\n */\r\n private extendGetResizeColAt(): void {\r\n const scenegraph = this.table.scenegraph;\r\n this.originalGetResizeColAt = scenegraph.getResizeColAt.bind(scenegraph);\r\n scenegraph.getResizeColAt = (abstractX: number, abstractY: number, cellGroup?: Group) => {\r\n if (!cellGroup) {\r\n // 检查当前位置是否在展开行中\r\n const cell = this.table.getCellAtRelativePosition(abstractX, abstractY);\r\n if (cell && cell.row >= 0) {\r\n const isExpandedRow = this.eventManager.isRowExpanded(cell.row);\r\n if (isExpandedRow) {\r\n return { col: -1, row: -1 };\r\n }\r\n }\r\n }\r\n\r\n // 调用原始的 getResizeColAt 方法\r\n return this.originalGetResizeColAt(abstractX, abstractY, cellGroup);\r\n };\r\n }\r\n\r\n /**\r\n * 检测鼠标是否在插件绘制的下划线区域\r\n */\r\n private isMouseInPluginUnderlineArea(row: number): boolean {\r\n try {\r\n // 获取表格的滚动偏移量\r\n const tableAny = this.table;\r\n const scrollTop = tableAny.stateManager?.scroll?.verticalBarPos || 0;\r\n // 计算当前行在视口中的位置信息\r\n const rowY = this.table.getRowsHeight(0, row - 1);\r\n const rowHeight = this.table.getRowHeight(row);\r\n const rowBottomY = rowY + rowHeight;\r\n const shadowBlur = this.table.theme?.frameStyle?.shadowBlur || 0;\r\n const viewportRowBottomY = rowBottomY - scrollTop + shadowBlur;\r\n const isNearRowBottom =\r\n this.currentMouseY >= viewportRowBottomY - (this.table.internalProps.limitMinHeight - 1) &&\r\n this.currentMouseY <= viewportRowBottomY + (this.table.internalProps.limitMinHeight - 1);\r\n // 如果是展开行且鼠标在行底部,认为是插件绘制的下划线\r\n const isExpandedRow = this.eventManager.isRowExpanded(row);\r\n const isRowBottomUnderline = isNearRowBottom && isExpandedRow;\r\n // console.log('Mouse underline detection:', {\r\n // row,\r\n // mouseX: this.currentMouseX,\r\n // mouseY: this.currentMouseY,\r\n // scrollTop,\r\n // rowY,\r\n // rowHeight,\r\n // rowBottomY,\r\n // viewportRowBottomY,\r\n // isNearRowBottom,\r\n // isExpandedRow,\r\n // isPluginUnderline,\r\n // 'distance from bottom': Math.abs(this.currentMouseY - viewportRowBottomY)\r\n // });\r\n\r\n return !isRowBottomUnderline;\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * 保护的 showResizeRow 方法\r\n */\r\n private protectedShowResizeRow(\r\n originalMethod: (row: number, x: number, isRightFrozen?: boolean) => void,\r\n row: number,\r\n x: number,\r\n isRightFrozen?: boolean\r\n ): void {\r\n if (!this.isDragging) {\r\n this.isDragging = true;\r\n this.dragStartIsPluginUnderline = this.isMouseInPluginUnderlineArea(row);\r\n }\r\n if (this.dragStartIsPluginUnderline) {\r\n // 临时替换 getRowsHeight 方法\r\n const originalGetRowsHeight = this.table.getRowsHeight.bind(this.table);\r\n this.table.getRowsHeight = (startRow: number, endRow: number) => {\r\n return this.getRowsHeightWithOriginalHeight(startRow, endRow);\r\n };\r\n // 临时替换 getRowHeight 方法\r\n const originalGetRowHeight = this.table.getRowHeight.bind(this.table);\r\n this.table.getRowHeight = (targetRow: number) => {\r\n if (targetRow === row && this.eventManager.isRowExpanded(targetRow)) {\r\n // 如果是当前操作的展开行,返回原始高度\r\n const bodyRowIndex = targetRow - this.table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n return originalHeight > 0 ? originalHeight : originalGetRowHeight(targetRow);\r\n }\r\n // 其他行使用原始方法\r\n return originalGetRowHeight(targetRow);\r\n };\r\n try {\r\n const result = originalMethod(row, x, isRightFrozen);\r\n return result;\r\n } finally {\r\n // 恢复原始的方法\r\n this.table.getRowsHeight = originalGetRowsHeight;\r\n this.table.getRowHeight = originalGetRowHeight;\r\n }\r\n } else {\r\n // 原始下划线,临时替换 getRowHeight 方法处理展开行\r\n const originalGetRowHeight = this.table.getRowHeight.bind(this.table);\r\n this.table.getRowHeight = (targetRow: number) => {\r\n if (targetRow === row && this.eventManager.isRowExpanded(targetRow)) {\r\n // 如果是当前操作的展开行,返回减去原始高度的值\r\n const bodyRowIndex = targetRow - this.table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n return originalGetRowHeight(targetRow) - originalHeight;\r\n }\r\n // 其他行使用原始方法\r\n return originalGetRowHeight(targetRow);\r\n };\r\n try {\r\n const result = originalMethod(row, x, isRightFrozen);\r\n return result;\r\n } finally {\r\n // 恢复原始的 getRowHeight 方法\r\n this.table.getRowHeight = originalGetRowHeight;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 保护的 updateResizeRow 方法\r\n */\r\n private protectedUpdateResizeRow(\r\n originalMethod: (row: number, x: number, isBottomFrozen?: boolean) => void,\r\n row: number,\r\n x: number,\r\n isBottomFrozen?: boolean\r\n ): void {\r\n if (this.dragStartIsPluginUnderline) {\r\n // 临时替换 getRowsHeight 方法\r\n const originalGetRowsHeight = this.table.getRowsHeight.bind(this.table);\r\n this.table.getRowsHeight = (startRow: number, endRow: number) => {\r\n return this.getRowsHeightWithOriginalHeight(startRow, endRow);\r\n };\r\n // 临时替换 getRowHeight 方法\r\n const originalGetRowHeight = this.table.getRowHeight.bind(this.table);\r\n this.table.getRowHeight = (targetRow: number) => {\r\n if (targetRow === row && this.eventManager.isRowExpanded(targetRow)) {\r\n // 如果是当前操作的展开行,返回原始高度\r\n const bodyRowIndex = targetRow - this.table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n return originalHeight > 0 ? originalHeight : originalGetRowHeight(targetRow);\r\n }\r\n // 其他行使用原始方法\r\n return originalGetRowHeight(targetRow);\r\n };\r\n try {\r\n const result = originalMethod(row, x, isBottomFrozen);\r\n return result;\r\n } finally {\r\n // 恢复原始的方法\r\n this.table.getRowsHeight = originalGetRowsHeight;\r\n this.table.getRowHeight = originalGetRowHeight;\r\n }\r\n } else {\r\n // 原始下划线,临时替换 getRowHeight 方法处理展开行\r\n const originalGetRowHeight = this.table.getRowHeight.bind(this.table);\r\n this.table.getRowHeight = (targetRow: number) => {\r\n if (targetRow === row && this.eventManager.isRowExpanded(targetRow)) {\r\n // 如果是当前操作的展开行,返回减去原始高度的值\r\n const bodyRowIndex = targetRow - this.table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n return originalGetRowHeight(targetRow) - originalHeight;\r\n }\r\n // 其他行使用原始方法\r\n return originalGetRowHeight(targetRow);\r\n };\r\n try {\r\n const result = originalMethod(row, x, isBottomFrozen);\r\n return result;\r\n } finally {\r\n // 恢复原始的 getRowHeight 方法\r\n this.table.getRowHeight = originalGetRowHeight;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 使用原始高度计算行高累积值的方法\r\n */\r\n private getRowsHeightWithOriginalHeight(startRow: number, endRow: number): number {\r\n let totalHeight = 0;\r\n for (let row = startRow; row <= endRow; row++) {\r\n const isExpandedRow = this.eventManager.isRowExpanded(row);\r\n if (isExpandedRow && row === endRow) {\r\n // 展开行并且是最后一行使用原始高度\r\n const bodyRowIndex = row - this.table.columnHeaderLevelCount;\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n totalHeight += originalHeight > 0 ? originalHeight : this.table.getRowHeight(row);\r\n } else {\r\n // 普通行使用当前高度\r\n totalHeight += this.table.getRowHeight(row);\r\n }\r\n }\r\n return totalHeight;\r\n }\r\n /**\r\n * 等待渲染完成后执行回调\r\n */\r\n private waitForRenderComplete(callback: () => void): void {\r\n const onAfterRender = () => {\r\n this.table.off(TABLE_EVENT_TYPE.AFTER_RENDER, onAfterRender);\r\n callback();\r\n };\r\n this.table.on(TABLE_EVENT_TYPE.AFTER_RENDER, onAfterRender);\r\n }\r\n\r\n /**\r\n * 清理所有扩展的 API\r\n */\r\n cleanup(): void {\r\n // 清理鼠标事件监听器\r\n if (this.mouseEventListener) {\r\n try {\r\n const table = this.table;\r\n if (table && table.internalProps && table.internalProps.canvas) {\r\n const canvas = table.internalProps.canvas;\r\n canvas.removeEventListener('mousemove', this.mouseEventListener);\r\n canvas.removeEventListener('mousedown', this.mouseEventListener);\r\n canvas.removeEventListener('mouseup', this.mouseEventListener);\r\n }\r\n } catch (error) {\r\n console.warn('Error cleaning up mouse event listeners:', error);\r\n }\r\n this.mouseEventListener = undefined;\r\n }\r\n\r\n // 恢复原始的updateCellContent方法\r\n if (this.originalUpdateCellContent && this.table) {\r\n const table = this.table;\r\n if (table.scenegraph && table.scenegraph.updateCellContent) {\r\n table.scenegraph.updateCellContent = this.originalUpdateCellContent;\r\n }\r\n this.originalUpdateCellContent = undefined;\r\n }\r\n\r\n // 恢复原始的updateResizeRow方法\r\n if (this.originalUpdateResizeRow && this.table) {\r\n const table = this.table;\r\n if (table.stateManager && table.stateManager.updateResizeRow) {\r\n table.stateManager.updateResizeRow = this.originalUpdateResizeRow;\r\n }\r\n this.originalUpdateResizeRow = undefined;\r\n }\r\n\r\n // 恢复原始的dealHeightMode方法\r\n if (this.originalDealHeightMode && this.table) {\r\n const table = this.table;\r\n if (table.scenegraph && table.scenegraph.dealHeightMode) {\r\n table.scenegraph.dealHeightMode = this.originalDealHeightMode;\r\n }\r\n this.originalDealHeightMode = undefined;\r\n }\r\n\r\n // 恢复其他原始方法\r\n if (this.originalUpdatePagination && this.table) {\r\n const table = this.table;\r\n if (table.updatePagination) {\r\n table.updatePagination = this.originalUpdatePagination;\r\n }\r\n this.originalUpdatePagination = undefined;\r\n }\r\n\r\n if (this.originalToggleHierarchyState && this.table) {\r\n const table = this.table;\r\n if (table.toggleHierarchyState) {\r\n table.toggleHierarchyState = this.originalToggleHierarchyState;\r\n }\r\n this.originalToggleHierarchyState = undefined;\r\n }\r\n\r\n if (this.originalUpdateFilterRules && this.table) {\r\n const table = this.table;\r\n if (table.updateFilterRules) {\r\n table.updateFilterRules = this.originalUpdateFilterRules;\r\n }\r\n this.originalUpdateFilterRules = undefined;\r\n }\r\n\r\n if (this.originalUpdateChartSizeForResizeColWidth && this.table) {\r\n const table = this.table;\r\n if (table.scenegraph && table.scenegraph.updateChartSizeForResizeColWidth) {\r\n table.scenegraph.updateChartSizeForResizeColWidth = this.originalUpdateChartSizeForResizeColWidth;\r\n }\r\n this.originalUpdateChartSizeForResizeColWidth = undefined;\r\n }\r\n\r\n if (this.originalUpdateChartSizeForResizeRowHeight && this.table) {\r\n const table = this.table;\r\n if (table.scenegraph && table.scenegraph.updateChartSizeForResizeRowHeight) {\r\n table.scenegraph.updateChartSizeForResizeRowHeight = this.originalUpdateChartSizeForResizeRowHeight;\r\n }\r\n this.originalUpdateChartSizeForResizeRowHeight = undefined;\r\n }\r\n\r\n // 恢复原始的updateRowHeight方法\r\n if (this.originalUpdateRowHeight && this.table) {\r\n const table = this.table;\r\n if (table.scenegraph && table.scenegraph.updateRowHeight) {\r\n table.scenegraph.updateRowHeight = this.originalUpdateRowHeight;\r\n }\r\n this.originalUpdateRowHeight = undefined;\r\n }\r\n\r\n // 恢复原始的getResizeColAt方法\r\n if (this.originalGetResizeColAt && this.table) {\r\n const scenegraph = this.table.scenegraph;\r\n if (scenegraph && scenegraph.getResizeColAt) {\r\n scenegraph.getResizeColAt = this.originalGetResizeColAt;\r\n }\r\n this.originalGetResizeColAt = undefined;\r\n }\r\n\r\n // 清理状态和引用,避免循环引用\r\n this.isDragging = false;\r\n this.dragStartIsPluginUnderline = false;\r\n this.currentMouseX = 0;\r\n this.currentMouseY = 0;\r\n // 清理回调函数引用\r\n (this as unknown as { callbacks: unknown }).callbacks = null;\r\n (this as unknown as { table: unknown }).table = null;\r\n (this as unknown as { configManager: unknown }).configManager = null;\r\n (this as unknown as { eventManager: unknown }).eventManager = null;\r\n }\r\n}\r\n"]}
|