@visactor/vtable 1.23.3 → 1.24.0-alpha.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 (79) 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/animation.js +5 -3
  14. package/cjs/core/animation.js.map +1 -1
  15. package/cjs/core/record-helper.js +83 -13
  16. package/cjs/core/record-helper.js.map +1 -1
  17. package/cjs/data/DataSource.js +3 -2
  18. package/cjs/data/DataSource.js.map +1 -1
  19. package/cjs/dataset/DataStatistics.js +1 -2
  20. package/cjs/edit/edit-manager.js +21 -15
  21. package/cjs/edit/edit-manager.js.map +1 -1
  22. package/cjs/index.d.ts +3 -3
  23. package/cjs/index.js +51 -12
  24. package/cjs/index.js.map +1 -1
  25. package/cjs/layout/cell-range/simple-cell-range.js +14 -4
  26. package/cjs/layout/cell-range/simple-cell-range.js.map +1 -1
  27. package/cjs/scenegraph/group-creater/cell-helper.js +1 -1
  28. package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
  29. package/cjs/scenegraph/group-creater/init-scenegraph.js +1 -1
  30. package/cjs/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  31. package/cjs/state/state.js +14 -11
  32. package/cjs/state/state.js.map +1 -1
  33. package/cjs/ts-types/base-table.d.ts +5 -0
  34. package/cjs/ts-types/base-table.js.map +1 -1
  35. package/cjs/ts-types/events.d.ts +16 -0
  36. package/cjs/ts-types/events.js.map +1 -1
  37. package/cjs/ts-types/table-engine.js.map +1 -1
  38. package/cjs/vrender.js.map +1 -1
  39. package/dist/vtable.js +906 -218
  40. package/dist/vtable.min.js +2 -2
  41. package/es/ListTable.d.ts +1 -0
  42. package/es/ListTable.js +177 -24
  43. package/es/ListTable.js.map +1 -1
  44. package/es/PivotTable.d.ts +1 -0
  45. package/es/PivotTable.js +8 -2
  46. package/es/PivotTable.js.map +1 -1
  47. package/es/core/BaseTable.d.ts +9 -0
  48. package/es/core/BaseTable.js +64 -15
  49. package/es/core/BaseTable.js.map +1 -1
  50. package/es/core/TABLE_EVENT_TYPE.d.ts +2 -0
  51. package/es/core/TABLE_EVENT_TYPE.js +2 -0
  52. package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
  53. package/es/core/animation.js +5 -3
  54. package/es/core/animation.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/edit/edit-manager.js +20 -16
  61. package/es/edit/edit-manager.js.map +1 -1
  62. package/es/index.d.ts +3 -3
  63. package/es/index.js +5 -3
  64. package/es/index.js.map +1 -1
  65. package/es/layout/cell-range/simple-cell-range.js +14 -4
  66. package/es/layout/cell-range/simple-cell-range.js.map +1 -1
  67. package/es/scenegraph/group-creater/cell-helper.js +1 -1
  68. package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
  69. package/es/scenegraph/group-creater/init-scenegraph.js +1 -1
  70. package/es/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  71. package/es/state/state.js +14 -11
  72. package/es/state/state.js.map +1 -1
  73. package/es/ts-types/base-table.d.ts +5 -0
  74. package/es/ts-types/base-table.js.map +1 -1
  75. package/es/ts-types/events.d.ts +16 -0
  76. package/es/ts-types/events.js.map +1 -1
  77. package/es/ts-types/table-engine.js.map +1 -1
  78. package/es/vrender.js.map +1 -1
  79. package/package.json +5 -5
@@ -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: {
@@ -43,12 +43,12 @@ class BaseTable extends EventTarget_1.EventTarget {
43
43
  }
44
44
  constructor(container, options = {}) {
45
45
  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;
46
- if (super(), this.showFrozenIcon = !0, this._tableBorderWidth_left = 0, this._tableBorderWidth_right = 0,
47
- this._tableBorderWidth_top = 0, this._tableBorderWidth_bottom = 0, this.version = "1.23.3",
48
- this.id = `VTable${Date.now()}`, this.isReleased = !1, this._chartEventMap = {},
49
- this.throttleInvalidate = (0, util_1.throttle2)(this.render.bind(this), 200), "node" === env_1.Env.mode ? (options = container,
50
- container = null) : container instanceof HTMLElement || (options = container, container = container.container ? container.container : null),
51
- !container && "node" !== options.mode && !options.canvas) throw new Error("vtable's container is undefined");
46
+ if (super(), this.showFrozenIcon = !0, this._scrollToRowCorrectTimer = null, this._tableBorderWidth_left = 0,
47
+ this._tableBorderWidth_right = 0, this._tableBorderWidth_top = 0, this._tableBorderWidth_bottom = 0,
48
+ this.version = "1.24.0-alpha.0", this.id = `VTable${Date.now()}`, this.isReleased = !1,
49
+ this._chartEventMap = {}, this.throttleInvalidate = (0, util_1.throttle2)(this.render.bind(this), 200),
50
+ "node" === env_1.Env.mode ? (options = container, container = null) : container instanceof HTMLElement || (options = container,
51
+ container = container.container ? container.container : null), !container && "node" !== options.mode && !options.canvas) throw new Error("vtable's container is undefined");
52
52
  this.pluginManager = new plugin_manager_1.PluginManager(this, options), this.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.BEFORE_INIT, {
53
53
  options: options,
54
54
  container: container
@@ -946,6 +946,9 @@ class BaseTable extends EventTarget_1.EventTarget {
946
946
  dispose() {
947
947
  this.release();
948
948
  }
949
+ clearCorrectTimer() {
950
+ this._scrollToRowCorrectTimer && (clearTimeout(this._scrollToRowCorrectTimer), this._scrollToRowCorrectTimer = null);
951
+ }
949
952
  release() {
950
953
  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;
951
954
  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(),
@@ -953,7 +956,7 @@ class BaseTable extends EventTarget_1.EventTarget {
953
956
  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();
954
957
  const internalProps = this.internalProps;
955
958
  if (this.isReleased) return;
956
- null === (_l = null === (_k = internalProps.tooltipHandler) || void 0 === _k ? void 0 : _k.release) || void 0 === _l || _l.call(_k),
959
+ this.clearCorrectTimer(), null === (_l = null === (_k = internalProps.tooltipHandler) || void 0 === _k ? void 0 : _k.release) || void 0 === _l || _l.call(_k),
957
960
  null === (_o = null === (_m = internalProps.menuHandler) || void 0 === _m ? void 0 : _m.release) || void 0 === _o || _o.call(_m),
958
961
  null === (_p = super.release) || void 0 === _p || _p.call(this), this.pluginManager.release(),
959
962
  null === (_r = null === (_q = internalProps.handler) || void 0 === _q ? void 0 : _q.release) || void 0 === _r || _r.call(_q),
@@ -1267,6 +1270,31 @@ class BaseTable extends EventTarget_1.EventTarget {
1267
1270
  lastSelectRange && (lastSelectRange.end.row = rowIndex), this.stateManager.updateSelectPos(this.colCount - 1, rowIndex, !1, isCtrl, !1, makeSelectCellVisible, !0),
1268
1271
  this.stateManager.select.selecting = !1;
1269
1272
  }
1273
+ changeHeaderPosition(args) {
1274
+ var _a, _b, _c, _d, _e;
1275
+ if (!("canMoveHeaderPosition" in this.internalProps.layoutMap) || !0 === (null === (_a = this.options.customConfig) || void 0 === _a ? void 0 : _a.notUpdateInColumnRowMove)) return !1;
1276
+ const prevMoving = this.stateManager.columnMove.movingColumnOrRow;
1277
+ this.stateManager.columnMove.movingColumnOrRow = args.movingColumnOrRow;
1278
+ try {
1279
+ if (!1 === (null === (_c = (_b = this.internalProps.layoutMap).canMoveHeaderPosition) || void 0 === _c ? void 0 : _c.call(_b, args.source, args.target))) return !1;
1280
+ 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);
1281
+ if (!moveContext || moveContext.targetIndex === moveContext.sourceIndex) return !1;
1282
+ this.internalProps.useOneRowHeightFillAll = !1, this.internalProps.layoutMap.clearCellRangeMap();
1283
+ 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);
1284
+ let rowMax = Math.max(sourceMergeInfo.end.row, targetMergeInfo.end.row, oldSourceMergeInfo.end.row, oldTargetMergeInfo.end.row);
1285
+ if ("row" === moveContext.moveType && "tree" === this.internalProps.layoutMap.rowHierarchyType && (rowMax = moveContext.targetIndex > moveContext.sourceIndex ? rowMax + moveContext.targetSize - 1 : rowMax + moveContext.sourceSize - 1),
1286
+ this.transpose || !this.isSeriesNumberInBody(args.source.col, args.source.row) && "row" !== args.movingColumnOrRow || (this.changeRecordOrder(moveContext.sourceIndex, moveContext.targetIndex),
1287
+ this.stateManager.changeCheckboxAndRadioOrder(moveContext.sourceIndex, moveContext.targetIndex)),
1288
+ "column" === moveContext.moveType) for (let col = colMin; col <= colMax; col++) this._clearColRangeWidthsMap(col); else for (let row = rowMin; row <= rowMax; row++) this._clearRowRangeHeightsMap(row);
1289
+ 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),
1290
+ "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),
1291
+ 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)),
1292
+ null === (_e = (_d = this.scenegraph).updateNextFrame) || void 0 === _e || _e.call(_d),
1293
+ !0;
1294
+ } finally {
1295
+ this.stateManager.columnMove.movingColumnOrRow = prevMoving;
1296
+ }
1297
+ }
1270
1298
  get recordsCount() {
1271
1299
  var _a;
1272
1300
  return null === (_a = this.records) || void 0 === _a ? void 0 : _a.length;
@@ -1419,7 +1447,7 @@ class BaseTable extends EventTarget_1.EventTarget {
1419
1447
  getCustomMerge(col, row) {
1420
1448
  if (this.internalProps.customMergeCell) {
1421
1449
  const customMerge = this.internalProps.customMergeCell(col, row, this);
1422
- if (customMerge && customMerge.range && ((0, vutils_1.isValid)(customMerge.text) || customMerge.customLayout || this.customRender)) {
1450
+ if (customMerge && customMerge.range) {
1423
1451
  if (customMerge.style) {
1424
1452
  const styleClass = this.internalProps.bodyHelper.getStyleClass("text"), style = customMerge.style, fullStyle = columnStyleContents.of(style, this.theme.bodyStyle, {
1425
1453
  col: col,
@@ -2075,12 +2103,33 @@ class BaseTable extends EventTarget_1.EventTarget {
2075
2103
  this.eventManager.enableScroll();
2076
2104
  }
2077
2105
  getGroupTitleLevel(col, row) {}
2106
+ getTargetScrollTop(row) {
2107
+ const drawRange = this.getDrawRange(), frozenHeight = this.getFrozenRowsHeight(), rowsHeight = Math.ceil(this.rowHeightsMap.getSumInRange(0, row - 1)), allRowsHeight = this.getAllRowsHeight();
2108
+ return Math.max(0, Math.min(rowsHeight - frozenHeight, allRowsHeight - drawRange.height));
2109
+ }
2110
+ _scheduleScrollToRowCorrect(row, delay = 0) {
2111
+ this._scrollToRowCorrectTimer = setTimeout((() => {
2112
+ this.clearCorrectTimer();
2113
+ const targetScrollTop = this.getTargetScrollTop(row);
2114
+ if (targetScrollTop !== this.scrollTop) {
2115
+ this.scrollTop = targetScrollTop;
2116
+ const correctedTargetScrollTop = this.getTargetScrollTop(row);
2117
+ correctedTargetScrollTop !== this.scrollTop && (this.scrollTop = correctedTargetScrollTop);
2118
+ }
2119
+ }), delay);
2120
+ }
2078
2121
  scrollToRow(row, animationOption) {
2079
- animationOption ? this.animationManager.scrollTo({
2080
- row: row
2081
- }, animationOption) : this.scrollToCell({
2082
- row: row
2083
- });
2122
+ var _a;
2123
+ const targetRow = Math.min(Math.max(Math.floor(row), 0), this.rowCount - 1);
2124
+ if (this.clearCorrectTimer(), !animationOption) return this.scrollToCell({
2125
+ row: targetRow
2126
+ }), void this._scheduleScrollToRowCorrect(targetRow);
2127
+ const duration = (0, vutils_1.isBoolean)(animationOption) ? 3e3 : null !== (_a = null == animationOption ? void 0 : animationOption.duration) && void 0 !== _a ? _a : 3e3;
2128
+ this.animationManager.scrollTo({
2129
+ row: targetRow
2130
+ }, animationOption), this._scrollToRowCorrectTimer = setTimeout((() => {
2131
+ this.scrollToRow(targetRow, !1);
2132
+ }), duration);
2084
2133
  }
2085
2134
  scrollToCol(col, animationOption) {
2086
2135
  animationOption ? this.animationManager.scrollTo({
@@ -2097,8 +2146,8 @@ class BaseTable extends EventTarget_1.EventTarget {
2097
2146
  this.scrollLeft = Math.min(left - frozenWidth, this.getAllColsWidth() - drawRange.width);
2098
2147
  }
2099
2148
  if ((0, vutils_1.isValid)(cellAddr.row) && cellAddr.row >= this.frozenRowCount) {
2100
- const frozenHeight = this.getFrozenRowsHeight(), top = this.getRowsHeight(0, cellAddr.row - 1);
2101
- this.scrollTop = Math.min(top - frozenHeight, this.getAllRowsHeight() - drawRange.height);
2149
+ const frozenHeight = this.getFrozenRowsHeight(), top = this.rowHeightsMap.getSumInRange(0, cellAddr.row - 1);
2150
+ this.scrollTop = Math.min(top - frozenHeight, this.rowHeightsMap.getSumInRange(0, this.rowCount - 1) - drawRange.height);
2102
2151
  }
2103
2152
  this.render();
2104
2153
  }