@visactor/vtable 1.23.3-alpha.0 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/cjs/ListTable.d.ts +1 -0
  2. package/cjs/ListTable.js +182 -24
  3. package/cjs/ListTable.js.map +1 -1
  4. package/cjs/PivotTable.d.ts +1 -0
  5. package/cjs/PivotTable.js +10 -2
  6. package/cjs/PivotTable.js.map +1 -1
  7. package/cjs/core/BaseTable.d.ts +9 -0
  8. package/cjs/core/BaseTable.js +64 -15
  9. package/cjs/core/BaseTable.js.map +1 -1
  10. package/cjs/core/TABLE_EVENT_TYPE.d.ts +2 -0
  11. package/cjs/core/TABLE_EVENT_TYPE.js +2 -0
  12. package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
  13. package/cjs/core/record-helper.js +83 -13
  14. package/cjs/core/record-helper.js.map +1 -1
  15. package/cjs/data/DataSource.js +3 -2
  16. package/cjs/data/DataSource.js.map +1 -1
  17. package/cjs/dataset/DataStatistics.js +1 -2
  18. package/cjs/dataset/dataset.js +6 -1
  19. package/cjs/dataset/dataset.js.map +1 -1
  20. package/cjs/edit/edit-manager.js +24 -16
  21. package/cjs/edit/edit-manager.js.map +1 -1
  22. package/cjs/event/EventTarget.js +3 -1
  23. package/cjs/event/EventTarget.js.map +1 -1
  24. package/cjs/index.d.ts +3 -3
  25. package/cjs/index.js +51 -12
  26. package/cjs/index.js.map +1 -1
  27. package/cjs/layout/cell-range/simple-cell-range.js +14 -4
  28. package/cjs/layout/cell-range/simple-cell-range.js.map +1 -1
  29. package/cjs/scenegraph/group-creater/cell-helper.js +1 -1
  30. package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
  31. package/cjs/scenegraph/group-creater/init-scenegraph.js +1 -1
  32. package/cjs/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  33. package/cjs/state/state.js +14 -11
  34. package/cjs/state/state.js.map +1 -1
  35. package/cjs/ts-types/base-table.d.ts +5 -0
  36. package/cjs/ts-types/base-table.js.map +1 -1
  37. package/cjs/ts-types/events.d.ts +16 -0
  38. package/cjs/ts-types/events.js.map +1 -1
  39. package/cjs/ts-types/table-engine.js.map +1 -1
  40. package/cjs/vrender.js.map +1 -1
  41. package/dist/vtable.js +958 -232
  42. package/dist/vtable.min.js +2 -2
  43. package/es/ListTable.d.ts +1 -0
  44. package/es/ListTable.js +177 -24
  45. package/es/ListTable.js.map +1 -1
  46. package/es/PivotTable.d.ts +1 -0
  47. package/es/PivotTable.js +8 -2
  48. package/es/PivotTable.js.map +1 -1
  49. package/es/core/BaseTable.d.ts +9 -0
  50. package/es/core/BaseTable.js +64 -15
  51. package/es/core/BaseTable.js.map +1 -1
  52. package/es/core/TABLE_EVENT_TYPE.d.ts +2 -0
  53. package/es/core/TABLE_EVENT_TYPE.js +2 -0
  54. package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
  55. package/es/core/record-helper.js +83 -12
  56. package/es/core/record-helper.js.map +1 -1
  57. package/es/data/DataSource.js +3 -2
  58. package/es/data/DataSource.js.map +1 -1
  59. package/es/dataset/DataStatistics.js +1 -2
  60. package/es/dataset/dataset.js +7 -2
  61. package/es/dataset/dataset.js.map +1 -1
  62. package/es/edit/edit-manager.js +22 -16
  63. package/es/edit/edit-manager.js.map +1 -1
  64. package/es/event/EventTarget.js +3 -1
  65. package/es/event/EventTarget.js.map +1 -1
  66. package/es/index.d.ts +3 -3
  67. package/es/index.js +5 -3
  68. package/es/index.js.map +1 -1
  69. package/es/layout/cell-range/simple-cell-range.js +14 -4
  70. package/es/layout/cell-range/simple-cell-range.js.map +1 -1
  71. package/es/scenegraph/group-creater/cell-helper.js +1 -1
  72. package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
  73. package/es/scenegraph/group-creater/init-scenegraph.js +1 -1
  74. package/es/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  75. package/es/state/state.js +14 -11
  76. package/es/state/state.js.map +1 -1
  77. package/es/ts-types/base-table.d.ts +5 -0
  78. package/es/ts-types/base-table.js.map +1 -1
  79. package/es/ts-types/events.d.ts +16 -0
  80. package/es/ts-types/events.js.map +1 -1
  81. package/es/ts-types/table-engine.js.map +1 -1
  82. package/es/vrender.js.map +1 -1
  83. package/package.json +7 -7
@@ -27,6 +27,7 @@ import { PluginManager } from '../plugins/plugin-manager';
27
27
  export declare abstract class BaseTable extends EventTarget implements BaseTableAPI {
28
28
  internalProps: IBaseTableProtected;
29
29
  showFrozenIcon: boolean;
30
+ _scrollToRowCorrectTimer: ReturnType<typeof setTimeout> | null;
30
31
  padding: {
31
32
  top: number;
32
33
  left: number;
@@ -264,6 +265,7 @@ export declare abstract class BaseTable extends EventTarget implements BaseTable
264
265
  release: () => void;
265
266
  }): void;
266
267
  private dispose;
268
+ clearCorrectTimer(): void;
267
269
  release(): void;
268
270
  fireListeners<TYPE extends keyof TableEventHandlersEventArgumentMap>(type: TYPE, event: TableEventHandlersEventArgumentMap[TYPE]): TableEventHandlersReturnMap[TYPE][];
269
271
  updateOption(options: BaseTableConstructorOptions, updateConfig?: {
@@ -296,6 +298,11 @@ export declare abstract class BaseTable extends EventTarget implements BaseTable
296
298
  endDragSelect(): void;
297
299
  startDragSelectRow(rowIndex: number, enableCtrlSelectMode?: boolean, isShift?: boolean, makeSelectCellVisible?: boolean): void;
298
300
  dragSelectRow(rowIndex: number, isCtrl?: boolean, makeSelectCellVisible?: boolean): void;
301
+ changeHeaderPosition(args: {
302
+ source: CellAddress;
303
+ target: CellAddress;
304
+ movingColumnOrRow?: 'column' | 'row';
305
+ }): boolean;
299
306
  abstract isListTable(): boolean;
300
307
  abstract isPivotTable(): boolean;
301
308
  abstract isPivotChart(): boolean;
@@ -457,6 +464,8 @@ export declare abstract class BaseTable extends EventTarget implements BaseTable
457
464
  disableScroll(): void;
458
465
  enableScroll(): void;
459
466
  getGroupTitleLevel(col: number, row: number): number | undefined;
467
+ getTargetScrollTop(row: number): number;
468
+ private _scheduleScrollToRowCorrect;
460
469
  scrollToRow(row: number, animationOption?: ITableAnimationOption | boolean): void;
461
470
  scrollToCol(col: number, animationOption?: ITableAnimationOption | boolean): void;
462
471
  scrollToCell(cellAddr: {
@@ -90,12 +90,12 @@ export class BaseTable extends EventTarget {
90
90
  }
91
91
  constructor(container, options = {}) {
92
92
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
93
- if (super(), this.showFrozenIcon = !0, this._tableBorderWidth_left = 0, this._tableBorderWidth_right = 0,
94
- this._tableBorderWidth_top = 0, this._tableBorderWidth_bottom = 0, this.version = "1.23.3-alpha.0",
95
- this.id = `VTable${Date.now()}`, this.isReleased = !1, this._chartEventMap = {},
96
- this.throttleInvalidate = throttle2(this.render.bind(this), 200), "node" === Env.mode ? (options = container,
97
- container = null) : container instanceof HTMLElement || (options = container, container = container.container ? container.container : null),
98
- !container && "node" !== options.mode && !options.canvas) throw new Error("vtable's container is undefined");
93
+ if (super(), this.showFrozenIcon = !0, this._scrollToRowCorrectTimer = null, this._tableBorderWidth_left = 0,
94
+ this._tableBorderWidth_right = 0, this._tableBorderWidth_top = 0, this._tableBorderWidth_bottom = 0,
95
+ this.version = "1.24.0", this.id = `VTable${Date.now()}`, this.isReleased = !1,
96
+ this._chartEventMap = {}, this.throttleInvalidate = throttle2(this.render.bind(this), 200),
97
+ "node" === Env.mode ? (options = container, container = null) : container instanceof HTMLElement || (options = container,
98
+ container = container.container ? container.container : null), !container && "node" !== options.mode && !options.canvas) throw new Error("vtable's container is undefined");
99
99
  this.pluginManager = new PluginManager(this, options), this.fireListeners(TABLE_EVENT_TYPE.BEFORE_INIT, {
100
100
  options: options,
101
101
  container: container
@@ -988,6 +988,9 @@ export class BaseTable extends EventTarget {
988
988
  dispose() {
989
989
  this.release();
990
990
  }
991
+ clearCorrectTimer() {
992
+ this._scrollToRowCorrectTimer && (clearTimeout(this._scrollToRowCorrectTimer), this._scrollToRowCorrectTimer = null);
993
+ }
991
994
  release() {
992
995
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
993
996
  null === (_c = null === (_b = null === (_a = this.scenegraph) || void 0 === _a ? void 0 : _a.component) || void 0 === _b ? void 0 : _b.vScrollBar) || void 0 === _c || _c.release(),
@@ -995,7 +998,7 @@ export class BaseTable extends EventTarget {
995
998
  this.animationManager.clear(), this.animationManager.ticker.release(), null === (_j = null === (_h = null === (_g = this.scenegraph) || void 0 === _g ? void 0 : _g.stage) || void 0 === _h ? void 0 : _h.ticker) || void 0 === _j || _j.release();
996
999
  const internalProps = this.internalProps;
997
1000
  if (this.isReleased) return;
998
- null === (_l = null === (_k = internalProps.tooltipHandler) || void 0 === _k ? void 0 : _k.release) || void 0 === _l || _l.call(_k),
1001
+ this.clearCorrectTimer(), null === (_l = null === (_k = internalProps.tooltipHandler) || void 0 === _k ? void 0 : _k.release) || void 0 === _l || _l.call(_k),
999
1002
  null === (_o = null === (_m = internalProps.menuHandler) || void 0 === _m ? void 0 : _m.release) || void 0 === _o || _o.call(_m),
1000
1003
  null === (_p = super.release) || void 0 === _p || _p.call(this), this.pluginManager.release(),
1001
1004
  null === (_r = null === (_q = internalProps.handler) || void 0 === _q ? void 0 : _q.release) || void 0 === _r || _r.call(_q),
@@ -1308,6 +1311,31 @@ export class BaseTable extends EventTarget {
1308
1311
  lastSelectRange && (lastSelectRange.end.row = rowIndex), this.stateManager.updateSelectPos(this.colCount - 1, rowIndex, !1, isCtrl, !1, makeSelectCellVisible, !0),
1309
1312
  this.stateManager.select.selecting = !1;
1310
1313
  }
1314
+ changeHeaderPosition(args) {
1315
+ var _a, _b, _c, _d, _e;
1316
+ if (!("canMoveHeaderPosition" in this.internalProps.layoutMap) || !0 === (null === (_a = this.options.customConfig) || void 0 === _a ? void 0 : _a.notUpdateInColumnRowMove)) return !1;
1317
+ const prevMoving = this.stateManager.columnMove.movingColumnOrRow;
1318
+ this.stateManager.columnMove.movingColumnOrRow = args.movingColumnOrRow;
1319
+ try {
1320
+ if (!1 === (null === (_c = (_b = this.internalProps.layoutMap).canMoveHeaderPosition) || void 0 === _c ? void 0 : _c.call(_b, args.source, args.target))) return !1;
1321
+ const oldSourceMergeInfo = this.getCellRange(args.source.col, args.source.row), oldTargetMergeInfo = this.getCellRange(args.target.col, args.target.row), moveContext = this._moveHeaderPosition(args.source, args.target);
1322
+ if (!moveContext || moveContext.targetIndex === moveContext.sourceIndex) return !1;
1323
+ this.internalProps.useOneRowHeightFillAll = !1, this.internalProps.layoutMap.clearCellRangeMap();
1324
+ const sourceMergeInfo = this.getCellRange(args.source.col, args.source.row), targetMergeInfo = this.getCellRange(args.target.col, args.target.row), colMin = Math.min(sourceMergeInfo.start.col, targetMergeInfo.start.col, oldSourceMergeInfo.start.col, oldTargetMergeInfo.start.col), colMax = Math.max(sourceMergeInfo.end.col, targetMergeInfo.end.col, oldSourceMergeInfo.end.col, oldTargetMergeInfo.end.col), rowMin = Math.min(sourceMergeInfo.start.row, targetMergeInfo.start.row, oldSourceMergeInfo.start.row, oldTargetMergeInfo.start.row);
1325
+ let rowMax = Math.max(sourceMergeInfo.end.row, targetMergeInfo.end.row, oldSourceMergeInfo.end.row, oldTargetMergeInfo.end.row);
1326
+ if ("row" === moveContext.moveType && "tree" === this.internalProps.layoutMap.rowHierarchyType && (rowMax = moveContext.targetIndex > moveContext.sourceIndex ? rowMax + moveContext.targetSize - 1 : rowMax + moveContext.sourceSize - 1),
1327
+ this.transpose || !this.isSeriesNumberInBody(args.source.col, args.source.row) && "row" !== args.movingColumnOrRow || (this.changeRecordOrder(moveContext.sourceIndex, moveContext.targetIndex),
1328
+ this.stateManager.changeCheckboxAndRadioOrder(moveContext.sourceIndex, moveContext.targetIndex)),
1329
+ "column" === moveContext.moveType) for (let col = colMin; col <= colMax; col++) this._clearColRangeWidthsMap(col); else for (let row = rowMin; row <= rowMax; row++) this._clearRowRangeHeightsMap(row);
1330
+ return this.clearCellStyleCache(), this.isSeriesNumberInBody(args.source.col, args.source.row) || "row" === args.movingColumnOrRow ? this.scenegraph.updateHeaderPosition(this.scenegraph.proxy.colStart, this.scenegraph.proxy.colEnd, this.scenegraph.proxy.rowStart, this.scenegraph.proxy.rowEnd, moveContext.moveType) : "column" === moveContext.moveType ? this.scenegraph.updateHeaderPosition(colMin, colMax, 0, -1, moveContext.moveType) : this.scenegraph.updateHeaderPosition(0, -1, rowMin, rowMax, moveContext.moveType),
1331
+ "adjustFrozenCount" === this.internalProps.frozenColDragHeaderMode && this.isListTable() && (this.isLeftFrozenColumn(args.target.col) && !this.isLeftFrozenColumn(args.source.col) ? this.frozenColCount += sourceMergeInfo.end.col - sourceMergeInfo.start.col + 1 : this.isLeftFrozenColumn(args.source.col) && !this.isLeftFrozenColumn(args.target.col) && (this.frozenColCount -= sourceMergeInfo.end.col - sourceMergeInfo.start.col + 1),
1332
+ this.isRightFrozenColumn(args.target.col) && !this.isRightFrozenColumn(args.source.col) ? this.rightFrozenColCount += sourceMergeInfo.end.col - sourceMergeInfo.start.col + 1 : this.isRightFrozenColumn(args.source.col) && !this.isRightFrozenColumn(args.target.col) && (this.rightFrozenColCount -= sourceMergeInfo.end.col - sourceMergeInfo.start.col + 1)),
1333
+ null === (_e = (_d = this.scenegraph).updateNextFrame) || void 0 === _e || _e.call(_d),
1334
+ !0;
1335
+ } finally {
1336
+ this.stateManager.columnMove.movingColumnOrRow = prevMoving;
1337
+ }
1338
+ }
1311
1339
  get recordsCount() {
1312
1340
  var _a;
1313
1341
  return null === (_a = this.records) || void 0 === _a ? void 0 : _a.length;
@@ -1459,7 +1487,7 @@ export class BaseTable extends EventTarget {
1459
1487
  getCustomMerge(col, row) {
1460
1488
  if (this.internalProps.customMergeCell) {
1461
1489
  const customMerge = this.internalProps.customMergeCell(col, row, this);
1462
- if (customMerge && customMerge.range && (isValid(customMerge.text) || customMerge.customLayout || this.customRender)) {
1490
+ if (customMerge && customMerge.range) {
1463
1491
  if (customMerge.style) {
1464
1492
  const styleClass = this.internalProps.bodyHelper.getStyleClass("text"), style = customMerge.style, fullStyle = columnStyleContents.of(style, this.theme.bodyStyle, {
1465
1493
  col: col,
@@ -2110,12 +2138,33 @@ export class BaseTable extends EventTarget {
2110
2138
  this.eventManager.enableScroll();
2111
2139
  }
2112
2140
  getGroupTitleLevel(col, row) {}
2141
+ getTargetScrollTop(row) {
2142
+ const drawRange = this.getDrawRange(), frozenHeight = this.getFrozenRowsHeight();
2143
+ return Math.max(0, Math.min(this.getRowsHeight(0, row - 1) - frozenHeight, this.getAllRowsHeight() - drawRange.height));
2144
+ }
2145
+ _scheduleScrollToRowCorrect(row, delay = 0) {
2146
+ this._scrollToRowCorrectTimer = setTimeout((() => {
2147
+ this.clearCorrectTimer();
2148
+ const targetScrollTop = this.getTargetScrollTop(row);
2149
+ if (targetScrollTop !== this.scrollTop) {
2150
+ this.scrollTop = targetScrollTop;
2151
+ const correctedTargetScrollTop = this.getTargetScrollTop(row);
2152
+ correctedTargetScrollTop !== this.scrollTop && (this.scrollTop = correctedTargetScrollTop);
2153
+ }
2154
+ }), delay);
2155
+ }
2113
2156
  scrollToRow(row, animationOption) {
2114
- animationOption ? this.animationManager.scrollTo({
2115
- row: row
2116
- }, animationOption) : this.scrollToCell({
2117
- row: row
2118
- });
2157
+ var _a;
2158
+ const targetRow = Math.min(Math.max(Math.floor(row), 0), this.rowCount - 1);
2159
+ if (this.clearCorrectTimer(), !animationOption) return this.scrollToCell({
2160
+ row: targetRow
2161
+ }), void this._scheduleScrollToRowCorrect(targetRow);
2162
+ const duration = isBoolean(animationOption) ? 3e3 : null !== (_a = null == animationOption ? void 0 : animationOption.duration) && void 0 !== _a ? _a : 3e3;
2163
+ this.animationManager.scrollTo({
2164
+ row: targetRow
2165
+ }, animationOption), this._scrollToRowCorrectTimer = setTimeout((() => {
2166
+ this.scrollToRow(targetRow, !1);
2167
+ }), duration);
2119
2168
  }
2120
2169
  scrollToCol(col, animationOption) {
2121
2170
  animationOption ? this.animationManager.scrollTo({
@@ -2132,8 +2181,8 @@ export class BaseTable extends EventTarget {
2132
2181
  this.scrollLeft = Math.min(left - frozenWidth, this.getAllColsWidth() - drawRange.width);
2133
2182
  }
2134
2183
  if (isValid(cellAddr.row) && cellAddr.row >= this.frozenRowCount) {
2135
- const frozenHeight = this.getFrozenRowsHeight(), top = this.getRowsHeight(0, cellAddr.row - 1);
2136
- this.scrollTop = Math.min(top - frozenHeight, this.getAllRowsHeight() - drawRange.height);
2184
+ const frozenHeight = this.getFrozenRowsHeight(), top = this.rowHeightsMap.getSumInRange(0, cellAddr.row - 1);
2185
+ this.scrollTop = Math.min(top - frozenHeight, this.rowHeightsMap.getSumInRange(0, this.rowCount - 1) - drawRange.height);
2137
2186
  }
2138
2187
  this.render();
2139
2188
  }