From 34c08d5471533812f0f2fd6d20a1245b006450a1 Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Fri, 21 Mar 2025 17:54:08 +0800 Subject: [PATCH 01/13] fix: fix react component update #3474 --- ...act-component-update_2025-03-21-09-53.json | 10 ++++++++++ .../table-components/custom/custom-layout.tsx | 19 +++++++++++++------ .../components/react/react-custom-layout.ts | 18 ++++++++++++------ packages/vtable/src/core/BaseTable.ts | 3 ++- .../scenegraph/layout/compute-col-width.ts | 3 ++- .../scenegraph/layout/compute-row-height.ts | 18 ++++++++++-------- 6 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 common/changes/@visactor/vtable/fix-react-component-update_2025-03-21-09-53.json diff --git a/common/changes/@visactor/vtable/fix-react-component-update_2025-03-21-09-53.json b/common/changes/@visactor/vtable/fix-react-component-update_2025-03-21-09-53.json new file mode 100644 index 0000000000..1049b3b136 --- /dev/null +++ b/common/changes/@visactor/vtable/fix-react-component-update_2025-03-21-09-53.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@visactor/vtable", + "comment": "fix: fix react component update #3474", + "type": "none" + } + ], + "packageName": "@visactor/vtable" +} \ No newline at end of file diff --git a/packages/react-vtable/src/table-components/custom/custom-layout.tsx b/packages/react-vtable/src/table-components/custom/custom-layout.tsx index cac208a6ed..8401471d85 100644 --- a/packages/react-vtable/src/table-components/custom/custom-layout.tsx +++ b/packages/react-vtable/src/table-components/custom/custom-layout.tsx @@ -31,21 +31,28 @@ export const CustomLayout: React.FC = (props: PropsWithChildr // customLayout function for vtable const createGraphic: ICustomLayoutFuc = useCallback( args => { - const key = `${args.originCol ?? args.col}-${args.originRow ?? args.row}`; + const key = `${args.originCol ?? args.col}-${args.originRow ?? args.row}${ + args.forComputation ? '-forComputation' : '' + }`; let group; if (container.current.has(key)) { const currentContainer = container.current.get(key); - // reconcilor.updateContainer(React.cloneElement(children, { ...args }), currentContainer, null); reconcilorUpdateContainer(children, currentContainer, args); group = currentContainer.containerInfo; - // 这里更新group,可能会残留dx dy } else { group = new Group({}); - const currentContainer = reconcilor.createContainer(group, LegacyRoot, null, null, null, 'custom', null, null); + const currentContainer = reconcilor.createContainer( + group as any, + LegacyRoot, + null, + null, + null, + 'custom', + null, + null + ); container.current.set(key, currentContainer); reconcilorUpdateContainer(children, currentContainer, args); - // const ele = React.cloneElement(children, { ...args }); - // reconcilor.updateContainer(ele, currentContainer, null); } return { diff --git a/packages/vtable/src/components/react/react-custom-layout.ts b/packages/vtable/src/components/react/react-custom-layout.ts index 1ff2757261..8805a7e89f 100644 --- a/packages/vtable/src/components/react/react-custom-layout.ts +++ b/packages/vtable/src/components/react/react-custom-layout.ts @@ -90,6 +90,17 @@ export class ReactCustomLayout { // } // } + if (table.widthMode === 'autoWidth') { + table.scenegraph.recalculateColWidths(); + } + if ( + table.isAutoRowHeight() || + (table.internalProps.defaultRowHeight === 'auto' && !isHeaderCustomLayout) || + (table.internalProps.defaultHeaderRowHeight === 'auto' && isHeaderCustomLayout) + ) { + table.scenegraph.recalculateRowHeights(); + } + if (table.isPivotTable()) { const ranges = getUpdateCustomCellRangeInPivotTable(componentId, table, isHeaderCustomLayout); for (let i = 0; i < ranges.length; i++) { @@ -108,12 +119,7 @@ export class ReactCustomLayout { } } } - if (table.widthMode === 'autoWidth') { - table.scenegraph.recalculateColWidths(); - } - if (table.isAutoRowHeight()) { - table.scenegraph.recalculateRowHeights(); - } + // table.scenegraph.updateNextFrame(); table.scenegraph.renderSceneGraph(); // use sync render for faster update } diff --git a/packages/vtable/src/core/BaseTable.ts b/packages/vtable/src/core/BaseTable.ts index 989ff2d10a..715e86ebd9 100644 --- a/packages/vtable/src/core/BaseTable.ts +++ b/packages/vtable/src/core/BaseTable.ts @@ -1464,7 +1464,8 @@ export abstract class BaseTable extends EventTarget implements BaseTableAPI { } else if (row >= 0 && row < this.columnHeaderLevelCount) { return this.getDefaultRowHeight(row) === 'auto'; } - return false; + // return false; + return this.internalProps.defaultRowHeight === 'auto'; } /** * 根据列号获取列宽定义 diff --git a/packages/vtable/src/scenegraph/layout/compute-col-width.ts b/packages/vtable/src/scenegraph/layout/compute-col-width.ts index 75f13d74d6..e43ed9eb83 100644 --- a/packages/vtable/src/scenegraph/layout/compute-col-width.ts +++ b/packages/vtable/src/scenegraph/layout/compute-col-width.ts @@ -489,7 +489,8 @@ function computeCustomRenderWidth(col: number, row: number, table: BaseTableAPI) rect: getCellRect(col, row, table), table, originCol: col, - originRow: row + originRow: row, + forComputation: true }; if (customLayout === 'react-custom-layout') { // customLayout = table._reactCreateGraphic; diff --git a/packages/vtable/src/scenegraph/layout/compute-row-height.ts b/packages/vtable/src/scenegraph/layout/compute-row-height.ts index 35d1212b4b..27dc00c478 100644 --- a/packages/vtable/src/scenegraph/layout/compute-row-height.ts +++ b/packages/vtable/src/scenegraph/layout/compute-row-height.ts @@ -69,7 +69,8 @@ export function computeRowsHeight( table.defaultHeaderRowHeight === 'auto' || (isArray(table.defaultHeaderRowHeight) && table.defaultHeaderRowHeight.some(item => item === 'auto')); const isAllRowsAuto = - table.isAutoRowHeight() || (table.heightMode === 'adaptive' && table.options.autoHeightInAdaptiveMode !== false); + table.isAutoRowHeight(rowStart) || + (table.heightMode === 'adaptive' && table.options.autoHeightInAdaptiveMode !== false); const isDefaultRowHeightIsAuto = table.options.defaultRowHeight === 'auto'; if (isAllRowsAuto || isDefaultHeaderHasAuto || isDefaultRowHeightIsAuto) { @@ -133,7 +134,7 @@ export function computeRowsHeight( (table.isPivotTable() && !(table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol) ) && !(table.options as ListTableConstructorOptions).customComputeRowHeight && - checkFixedStyleAndNoWrap(table) + checkFixedStyleAndNoWrap(table, rowStart) ) { // check fixed style and no wrap situation, fill all row width single compute // traspose table and row indicator pivot table cannot use single row height @@ -357,7 +358,7 @@ export function computeRowsHeight( export function computeRowHeight(row: number, startCol: number, endCol: number, table: BaseTableAPI): number { const isAllRowsAuto = - table.isAutoRowHeight() || (table.heightMode === 'adaptive' && table.options.autoHeightInAdaptiveMode !== false); + table.isAutoRowHeight(row) || (table.heightMode === 'adaptive' && table.options.autoHeightInAdaptiveMode !== false); if (!isAllRowsAuto && table.getDefaultRowHeight(row) !== 'auto') { return table.getDefaultRowHeight(row) as number; } @@ -449,13 +450,13 @@ export function computeRowHeight(row: number, startCol: number, endCol: number, return isNumber(defaultHeight) ? defaultHeight : table.defaultRowHeight; } -function checkFixedStyleAndNoWrap(table: BaseTableAPI): boolean { +function checkFixedStyleAndNoWrap(table: BaseTableAPI, rowStart: number): boolean { const { layoutMap } = table.internalProps; const row = table.columnHeaderLevelCount; //设置了全局自动换行的话 不能复用高度计算 if ( (table.internalProps.autoWrapText || table.internalProps.enableLineBreak || table.isPivotChart()) && - (table.isAutoRowHeight() || table.options.heightMode === 'adaptive') + (table.isAutoRowHeight(rowStart) || table.options.heightMode === 'adaptive') ) { return false; } @@ -492,7 +493,7 @@ function checkFixedStyleAndNoWrapForTranspose(table: BaseTableAPI, row: number): //设置了全局自动换行的话 不能复用高度计算 if ( (table.internalProps.autoWrapText || table.internalProps.enableLineBreak) && - (table.isAutoRowHeight() || table.options.heightMode === 'adaptive') + (table.isAutoRowHeight(row) || table.options.heightMode === 'adaptive') ) { return false; } @@ -523,7 +524,7 @@ function checkFixedStyleAndNoWrapForTranspose(table: BaseTableAPI, row: number): function checkPivotFixedStyleAndNoWrap(table: BaseTableAPI, row: number) { const { layoutMap } = table.internalProps; //设置了全局自动换行的话 不能复用高度计算 - if (table.internalProps.autoWrapText && (table.isAutoRowHeight() || table.options.heightMode === 'adaptive')) { + if (table.internalProps.autoWrapText && (table.isAutoRowHeight(row) || table.options.heightMode === 'adaptive')) { return false; } @@ -602,7 +603,8 @@ function computeCustomRenderHeight(col: number, row: number, table: BaseTableAPI rect: getCellRect(col, row, table), table, originCol: col, - originRow: row + originRow: row, + forComputation: true }; if (customLayout === 'react-custom-layout') { // customLayout = table._reactCreateGraphic; From 4a31c45aa02ba1a642369188e3d20ed8aca62a6f Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Fri, 21 Mar 2025 17:55:06 +0800 Subject: [PATCH 02/13] fix: add arg for isAutoRowHeight() --- packages/vtable/src/PivotTable.ts | 4 ++-- packages/vtable/src/core/record-helper.ts | 4 ++-- .../src/scenegraph/group-creater/cell-helper.ts | 5 +++++ .../scenegraph/group-creater/cell-type/radio-cell.ts | 2 +- .../progress/create-group-for-first-screen.ts | 3 ++- .../src/scenegraph/group-creater/progress/proxy.ts | 12 ++++++------ .../progress/update-position/dynamic-set-y.ts | 12 ++++++------ .../progress/update-position/sort-vertical.ts | 8 ++++---- packages/vtable/src/scenegraph/layout/update-row.ts | 8 ++++---- packages/vtable/src/scenegraph/scenegraph.ts | 2 +- packages/vtable/src/ts-types/customElement.ts | 2 ++ 11 files changed, 35 insertions(+), 27 deletions(-) diff --git a/packages/vtable/src/PivotTable.ts b/packages/vtable/src/PivotTable.ts index 5fdfbc58d3..0c162200d1 100644 --- a/packages/vtable/src/PivotTable.ts +++ b/packages/vtable/src/PivotTable.ts @@ -1879,7 +1879,7 @@ export class PivotTable extends BaseTable implements PivotTableAPI { if (this.internalProps._heightResizedRowMap.size === 0) { this.scenegraph.recalculateRowHeights(); } - } else if (this.isAutoRowHeight() && !this.internalProps._heightResizedRowMap.has(row)) { + } else if (this.isAutoRowHeight(row) && !this.internalProps._heightResizedRowMap.has(row)) { const oldHeight = this.getRowHeight(row); const newHeight = computeRowHeight(row, 0, this.colCount - 1, this); this.scenegraph.updateRowHeight(row, newHeight - oldHeight); @@ -1997,7 +1997,7 @@ export class PivotTable extends BaseTable implements PivotTableAPI { if (this.heightMode === 'adaptive' || (this.autoFillHeight && this.getAllRowsHeight() <= this.tableNoFrameHeight)) { this.scenegraph.recalculateRowHeights(); - } else if (this.isAutoRowHeight()) { + } else if (this.isAutoRowHeight(startRow)) { const rows: number[] = []; const deltaYs: number[] = []; for (let sRow = startRow; sRow <= range.end.row; sRow++) { diff --git a/packages/vtable/src/core/record-helper.ts b/packages/vtable/src/core/record-helper.ts index 6c53d3e5ac..eed1083f77 100644 --- a/packages/vtable/src/core/record-helper.ts +++ b/packages/vtable/src/core/record-helper.ts @@ -85,7 +85,7 @@ export function listTableChangeCellValue( if (table.internalProps._heightResizedRowMap.size === 0) { table.scenegraph.recalculateRowHeights(); } - } else if (table.isAutoRowHeight() && !table.internalProps._heightResizedRowMap.has(row)) { + } else if (table.isAutoRowHeight(row) && !table.internalProps._heightResizedRowMap.has(row)) { const oldHeight = table.getRowHeight(row); const newHeight = computeRowHeight(row, 0, table.colCount - 1, table); table.scenegraph.updateRowHeight(row, newHeight - oldHeight); @@ -283,7 +283,7 @@ export function listTableChangeCellValues( (table.autoFillHeight && table.getAllRowsHeight() <= table.tableNoFrameHeight) ) { table.scenegraph.recalculateRowHeights(); - } else if (table.isAutoRowHeight()) { + } else if (table.isAutoRowHeight(startRow)) { const rows: number[] = []; const deltaYs: number[] = []; for (let sRow = startRow; sRow <= range.end.row; sRow++) { diff --git a/packages/vtable/src/scenegraph/group-creater/cell-helper.ts b/packages/vtable/src/scenegraph/group-creater/cell-helper.ts index 499d3d182a..7e0364254b 100644 --- a/packages/vtable/src/scenegraph/group-creater/cell-helper.ts +++ b/packages/vtable/src/scenegraph/group-creater/cell-helper.ts @@ -504,6 +504,11 @@ export function updateCell( ) { // const oldCellGroup = table.scenegraph.getCell(col, row, true); const oldCellGroup = table.scenegraph.highPerformanceGetCell(col, row, true); + + if (oldCellGroup.role !== 'cell' && !addNew) { + return; + } + const cellLocation = table.getCellLocation(col, row); let value = table.getCellValue(col, row); diff --git a/packages/vtable/src/scenegraph/group-creater/cell-type/radio-cell.ts b/packages/vtable/src/scenegraph/group-creater/cell-type/radio-cell.ts index cb15a18f06..791d546f6a 100644 --- a/packages/vtable/src/scenegraph/group-creater/cell-type/radio-cell.ts +++ b/packages/vtable/src/scenegraph/group-creater/cell-type/radio-cell.ts @@ -151,7 +151,7 @@ function createRadio( const autoWrapText = cellStyle.autoWrapText ?? table.internalProps.autoWrapText; const { lineClamp } = cellStyle; const autoColWidth = colWidth === 'auto'; - const autoRowHeight = table.isAutoRowHeight(); + const autoRowHeight = table.isAutoRowHeight(row); const attribute = { // text: text.length === 1 ? text[0] : text, diff --git a/packages/vtable/src/scenegraph/group-creater/progress/create-group-for-first-screen.ts b/packages/vtable/src/scenegraph/group-creater/progress/create-group-for-first-screen.ts index 84b822ca3e..b305114724 100644 --- a/packages/vtable/src/scenegraph/group-creater/progress/create-group-for-first-screen.ts +++ b/packages/vtable/src/scenegraph/group-creater/progress/create-group-for-first-screen.ts @@ -30,7 +30,8 @@ export function createGroupForFirstScreen( let distRowForCompute; if ( table.widthMode === 'adaptive' || - (table.options.autoWrapText && (table.heightMode === 'adaptive' || table.isAutoRowHeight())) + (table.options.autoWrapText && + (table.heightMode === 'adaptive' || table.isAutoRowHeight(table.columnHeaderLevelCount))) ) { // distCol = table.colCount - 1; // proxy.colEnd = distCol; diff --git a/packages/vtable/src/scenegraph/group-creater/progress/proxy.ts b/packages/vtable/src/scenegraph/group-creater/progress/proxy.ts index 3dc86abfad..b5eff3cde4 100644 --- a/packages/vtable/src/scenegraph/group-creater/progress/proxy.ts +++ b/packages/vtable/src/scenegraph/group-creater/progress/proxy.ts @@ -73,7 +73,7 @@ export class SceneProxy { // this.colLimit = 100; this.rowLimit = Math.max(100, Math.ceil((table.tableNoFrameHeight * 2) / table.defaultRowHeight)); this.colLimit = Math.max(100, Math.ceil((table.tableNoFrameWidth * 2) / table.defaultColWidth)); - } else if (this.table.isAutoRowHeight()) { + } else if (this.table.isAutoRowHeight(table.columnHeaderLevelCount)) { // this.rowLimit = 100; this.rowLimit = Math.max(100, Math.ceil((table.tableNoFrameHeight * 2) / table.defaultRowHeight)); } else if (this.table.widthMode === 'autoWidth') { @@ -560,13 +560,13 @@ export class SceneProxy { updateCellGroups(count: number) { const distRow = Math.min(this.bodyBottomRow, this.rowUpdatePos + count); // console.log('updateCellGroups', this.rowUpdatePos, distRow); - if (this.table.isAutoRowHeight()) { + if (this.table.isAutoRowHeight(this.rowUpdatePos)) { computeRowsHeight(this.table, this.rowUpdatePos, distRow, false); } updateRowContent(this.rowUpdatePos, distRow, this); - if (this.table.isAutoRowHeight()) { + if (this.table.isAutoRowHeight(this.rowUpdatePos)) { // body group updateAutoRow( this.bodyLeftCol, // colStart @@ -605,12 +605,12 @@ export class SceneProxy { updateBottomFrozenCellGroups() { const startRow = this.table.rowCount - this.table.bottomFrozenRowCount; const endRow = this.table.rowCount - 1; - if (this.table.isAutoRowHeight()) { + if (this.table.isAutoRowHeight(startRow)) { computeRowsHeight(this.table, startRow, endRow, false); } updateRowContent(startRow, endRow, this); - if (this.table.isAutoRowHeight()) { + if (this.table.isAutoRowHeight(startRow)) { // body group updateAutoRow( this.bodyLeftCol, // colStart @@ -650,7 +650,7 @@ export class SceneProxy { console.log('updateRightFrozenCellGroups', startCol, endCol); updateColContent(startCol, endCol, this); - if (this.table.isAutoRowHeight()) { + if (this.table.isAutoRowHeight(this.rowStart)) { // body group updateAutoColumn(startCol, endCol, this.table, this.colUpdateDirection); } diff --git a/packages/vtable/src/scenegraph/group-creater/progress/update-position/dynamic-set-y.ts b/packages/vtable/src/scenegraph/group-creater/progress/update-position/dynamic-set-y.ts index 141038fd3f..4722cf1ef5 100644 --- a/packages/vtable/src/scenegraph/group-creater/progress/update-position/dynamic-set-y.ts +++ b/packages/vtable/src/scenegraph/group-creater/progress/update-position/dynamic-set-y.ts @@ -88,7 +88,7 @@ async function moveCell( // 更新同步范围 let syncTopRow; let syncBottomRow; - if (proxy.table.isAutoRowHeight()) { + if (proxy.table.isAutoRowHeight(startRow)) { syncTopRow = distStartRow; syncBottomRow = distEndRow; } else { @@ -115,7 +115,7 @@ async function moveCell( // 本次行更新是否同步完成,列数超过limit时为false const sync = updateRowContent(syncTopRow, syncBottomRow, proxy, true); - if (proxy.table.isAutoRowHeight()) { + if (proxy.table.isAutoRowHeight(startRow)) { // body group updateAutoRow( proxy.bodyLeftCol, // colStart @@ -177,7 +177,7 @@ async function moveCell( proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2); // proxy.referenceRow = screenTopRow; // proxy.rowUpdatePos = Math.min(proxy.rowUpdatePos, distStartRow); - if (proxy.table.isAutoRowHeight() && sync) { + if (proxy.table.isAutoRowHeight(startRow) && sync) { proxy.rowUpdatePos = Math.min(proxy.rowUpdatePos, proxy.rowEnd + 1); } else { proxy.rowUpdatePos = Math.min(proxy.rowUpdatePos, distStartRow); @@ -196,7 +196,7 @@ async function moveCell( let syncTopRow; let syncBottomRow; - if (proxy.table.isAutoRowHeight()) { + if (proxy.table.isAutoRowHeight(distStartRow)) { syncTopRow = distStartRow; syncBottomRow = distEndRow; } else { @@ -214,7 +214,7 @@ async function moveCell( const sync = updateRowContent(syncTopRow, syncBottomRow, proxy, true); - if (proxy.table.isAutoRowHeight()) { + if (proxy.table.isAutoRowHeight(distStartRow)) { // body group updateAutoRow( proxy.bodyLeftCol, // colStart @@ -277,7 +277,7 @@ async function moveCell( ); proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2); // proxy.referenceRow = screenTopRow; - if (proxy.table.isAutoRowHeight() && sync) { + if (proxy.table.isAutoRowHeight(distStartRow) && sync) { proxy.rowUpdatePos = proxy.rowEnd + 1; } else { proxy.rowUpdatePos = proxy.rowStart; diff --git a/packages/vtable/src/scenegraph/group-creater/progress/update-position/sort-vertical.ts b/packages/vtable/src/scenegraph/group-creater/progress/update-position/sort-vertical.ts index f5cc3b3e3b..c124eb9011 100644 --- a/packages/vtable/src/scenegraph/group-creater/progress/update-position/sort-vertical.ts +++ b/packages/vtable/src/scenegraph/group-creater/progress/update-position/sort-vertical.ts @@ -18,7 +18,7 @@ export async function sortVertical(proxy: SceneProxy) { // 更新同步范围 let syncTopRow; let syncBottomRow; - if (proxy.table.isAutoRowHeight()) { + if (proxy.table.isAutoRowHeight(proxy.rowStart)) { syncTopRow = proxy.rowStart; syncBottomRow = proxy.rowEnd; } else { @@ -41,7 +41,7 @@ export async function sortVertical(proxy: SceneProxy) { proxy.table.scenegraph.updateContainerHeight(proxy.table.frozenRowCount, newBodyHeight - oldBodyHeight); } - for (let col = 0; col < proxy.table.frozenColCount ?? 0; col++) { + for (let col = 0; col < (proxy.table.frozenColCount ?? 0); col++) { // 将该列的chartInstance清除掉 const columnGroup = proxy.table.scenegraph.getColGroup(col); columnGroup?.setAttribute('chartInstance', undefined); @@ -74,7 +74,7 @@ export async function sortVertical(proxy: SceneProxy) { updateRowContent(syncTopRow, syncBottomRow, proxy); - if (proxy.table.isAutoRowHeight()) { + if (proxy.table.isAutoRowHeight(syncTopRow)) { updateAutoRow( proxy.bodyLeftCol, // colStart proxy.bodyRightCol, // colEnd @@ -101,7 +101,7 @@ export async function sortVertical(proxy: SceneProxy) { // } proxy.table.scenegraph.updateNextFrame(); - if (!proxy.table.isAutoRowHeight()) { + if (!proxy.table.isAutoRowHeight(proxy.rowStart)) { await proxy.progress(); } } diff --git a/packages/vtable/src/scenegraph/layout/update-row.ts b/packages/vtable/src/scenegraph/layout/update-row.ts index 137342bded..daad08790c 100644 --- a/packages/vtable/src/scenegraph/layout/update-row.ts +++ b/packages/vtable/src/scenegraph/layout/update-row.ts @@ -552,11 +552,11 @@ function _getUpdateRowIndexUseCellNode(beforeRow: number, afterRow: number, scen { start: { row: beforeCell.mergeStartRow, - col: scene.table.isAutoRowHeight() ? 0 : beforeCell.mergeStartCol + col: scene.table.isAutoRowHeight(afterRow) ? 0 : beforeCell.mergeStartCol }, end: { row: beforeCell.mergeEndRow, - col: scene.table.isAutoRowHeight() ? scene.table.colCount - 1 : beforeCell.mergeEndCol + col: scene.table.isAutoRowHeight(afterRow) ? scene.table.colCount - 1 : beforeCell.mergeEndCol } }, scene @@ -570,11 +570,11 @@ function _getUpdateRowIndexUseCellNode(beforeRow: number, afterRow: number, scen { start: { row: afterCell.mergeStartRow, - col: scene.table.isAutoRowHeight() ? 0 : afterCell.mergeStartCol + col: scene.table.isAutoRowHeight(afterRow) ? 0 : afterCell.mergeStartCol }, end: { row: afterCell.mergeEndRow, - col: scene.table.isAutoRowHeight() ? scene.table.colCount - 1 : afterCell.mergeEndCol + col: scene.table.isAutoRowHeight(afterRow) ? scene.table.colCount - 1 : afterCell.mergeEndCol } }, scene diff --git a/packages/vtable/src/scenegraph/scenegraph.ts b/packages/vtable/src/scenegraph/scenegraph.ts index 5e9e467823..c598986167 100644 --- a/packages/vtable/src/scenegraph/scenegraph.ts +++ b/packages/vtable/src/scenegraph/scenegraph.ts @@ -2061,7 +2061,7 @@ export class Scenegraph { (this.table.autoFillHeight && (this.table.getAllRowsHeight() <= this.table.tableNoFrameHeight || isNotFillHeight)) ) { this.table.scenegraph.recalculateRowHeights(); - } else if (this.table.isAutoRowHeight()) { + } else if (this.table.isAutoRowHeight(this.table.columnHeaderLevelCount)) { // if (updateCells.length > 0) { // this.table.scenegraph.recalculateRowHeights(); // } diff --git a/packages/vtable/src/ts-types/customElement.ts b/packages/vtable/src/ts-types/customElement.ts index 13c8fd3845..ec948e0037 100644 --- a/packages/vtable/src/ts-types/customElement.ts +++ b/packages/vtable/src/ts-types/customElement.ts @@ -13,6 +13,8 @@ export interface CustomRenderFunctionArg { rect?: RectProps; originCol?: number; originRow?: number; + + forComputation?: boolean; } interface baseElement { elementKey?: string; From 62ae0afeedc2e449a12b8856c3a02cc2e4de8c99 Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Fri, 21 Mar 2025 17:57:43 +0800 Subject: [PATCH 03/13] fix: fix return type in updateCell() --- packages/vtable/src/scenegraph/group-creater/cell-helper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vtable/src/scenegraph/group-creater/cell-helper.ts b/packages/vtable/src/scenegraph/group-creater/cell-helper.ts index 7e0364254b..05b4bff62d 100644 --- a/packages/vtable/src/scenegraph/group-creater/cell-helper.ts +++ b/packages/vtable/src/scenegraph/group-creater/cell-helper.ts @@ -506,7 +506,7 @@ export function updateCell( const oldCellGroup = table.scenegraph.highPerformanceGetCell(col, row, true); if (oldCellGroup.role !== 'cell' && !addNew) { - return; + return undefined; } const cellLocation = table.getCellLocation(col, row); From e6aa3b131d8ce7b382c2962887ff66a412ec92ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=9D=A8=E6=9E=9A?= Date: Fri, 21 Mar 2025 19:38:07 +0800 Subject: [PATCH 04/13] fix: duplicate registration verification of VTableVueAttributePlugin --- .../custom/vtable-vue-attribute-plugin.ts | 11 ++--------- .../vue-vtable/src/hooks/useCellRender.ts | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/vue-vtable/src/components/custom/vtable-vue-attribute-plugin.ts b/packages/vue-vtable/src/components/custom/vtable-vue-attribute-plugin.ts index e772cf3998..ef15380ca3 100644 --- a/packages/vue-vtable/src/components/custom/vtable-vue-attribute-plugin.ts +++ b/packages/vue-vtable/src/components/custom/vtable-vue-attribute-plugin.ts @@ -2,7 +2,7 @@ * @Author: lym * @Date: 2025-02-24 09:32:53 * @LastEditors: lym - * @LastEditTime: 2025-03-21 14:22:18 + * @LastEditTime: 2025-03-21 19:05:30 * @Description: */ import type { @@ -33,6 +33,7 @@ import { render } from 'vue'; * 表格自定义组件集成插件 */ export class VTableVueAttributePlugin extends HtmlAttributePlugin implements IPlugin { + name: string = 'VTableVueAttributePlugin'; declare htmlMap: Record< string, { @@ -130,15 +131,7 @@ export class VTableVueAttributePlugin extends HtmlAttributePlugin implements IPl if (!targetMap || !this.checkDom(targetMap.wrapContainer)) { const { wrapContainer, nativeContainer } = this.getWrapContainer(stage, actualContainer, { id, options }); if (wrapContainer) { - // 检查历史渲染节点 - const historyWrapContainer = document.getElementById(id); const dataRenderId = `${this.renderId}`; - if (historyWrapContainer && historyWrapContainer.getAttribute('data-vue-renderId') !== dataRenderId) { - // 历史渲染节点清除 - render(null, historyWrapContainer); - historyWrapContainer.remove(); - this.removeWrapContainerEventListener(historyWrapContainer); - } wrapContainer.id = id; wrapContainer.setAttribute('data-vue-renderId', dataRenderId); render(element, wrapContainer); diff --git a/packages/vue-vtable/src/hooks/useCellRender.ts b/packages/vue-vtable/src/hooks/useCellRender.ts index e2ed2f5275..f380f2328d 100644 --- a/packages/vue-vtable/src/hooks/useCellRender.ts +++ b/packages/vue-vtable/src/hooks/useCellRender.ts @@ -1,6 +1,7 @@ import type { Ref } from 'vue'; import { getCurrentInstance, watchEffect } from 'vue'; import { VTableVueAttributePlugin } from '../components/custom/vtable-vue-attribute-plugin'; +import { isArray } from '@visactor/vutils'; /** * 自定义单元格渲染器 @@ -10,15 +11,23 @@ import { VTableVueAttributePlugin } from '../components/custom/vtable-vue-attrib export function useCellRender(props: any, tableRef: Ref) { /** 当前实例 */ const instance = getCurrentInstance(); + /** 自定义 dom 开关 */ + const createReactContainer = props?.options?.customConfig?.createReactContainer; + watchEffect(() => { - if (!props?.options?.customConfig?.createReactContainer) { - // 未开启自定义容器 + if (!createReactContainer) { + return; + } + const pluginService = tableRef.value?.scenegraph?.stage?.pluginService; + if (!pluginService) { return; } - if (!tableRef.value) { + + const exist = pluginService.findPluginsByName('VTableVueAttributePlugin'); + if (isArray(exist) && !!exist.length) { return; } - // 注册 vtable-vue 自定义组件集成插件 - tableRef.value.scenegraph.stage.pluginService.register(new VTableVueAttributePlugin(instance?.appContext)); + const plugin = new VTableVueAttributePlugin(instance?.appContext); + pluginService.register(plugin); }); } From 0c19d3509246d1d6382ea9529e83c2ced2f33453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=9D=A8=E6=9E=9A?= Date: Fri, 21 Mar 2025 19:44:33 +0800 Subject: [PATCH 05/13] perf: supports the transmission of context --- .../custom/vtable-vue-attribute-plugin.ts | 21 ++++++++++++------- packages/vue-vtable/src/edit/editor.ts | 15 ++++++++----- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/packages/vue-vtable/src/components/custom/vtable-vue-attribute-plugin.ts b/packages/vue-vtable/src/components/custom/vtable-vue-attribute-plugin.ts index ef15380ca3..3903ba54f1 100644 --- a/packages/vue-vtable/src/components/custom/vtable-vue-attribute-plugin.ts +++ b/packages/vue-vtable/src/components/custom/vtable-vue-attribute-plugin.ts @@ -2,7 +2,7 @@ * @Author: lym * @Date: 2025-02-24 09:32:53 * @LastEditors: lym - * @LastEditTime: 2025-03-21 19:05:30 + * @LastEditTime: 2025-03-21 19:38:26 * @Description: */ import type { @@ -126,7 +126,7 @@ export class VTableVueAttributePlugin extends HtmlAttributePlugin implements IPl targetMap = null; } // 校验并传递上下文 - this.checkToPassAppContext(element); + this.checkToPassAppContext(element, graphic); // 渲染或更新 Vue 组件 if (!targetMap || !this.checkDom(targetMap.wrapContainer)) { const { wrapContainer, nativeContainer } = this.getWrapContainer(stage, actualContainer, { id, options }); @@ -176,14 +176,19 @@ export class VTableVueAttributePlugin extends HtmlAttributePlugin implements IPl /** * @description: 校验并传递上下文 * @param {VNode} vnode + * @param {IGraphic} graphic * @return {*} */ - checkToPassAppContext(vnode: VNode) { - if (this.currentContext) { - try { - vnode.appContext = this.currentContext; - } catch (error) {} - } + checkToPassAppContext(vnode: VNode, graphic: IGraphic) { + try { + const { stage } = getTargetGroup(graphic); + const { table } = stage || {}; + const userAppContext = table?.options?.customConfig?.getVueUserAppContext?.() ?? this.currentContext; + // 简单校验合法性 + if (!!userAppContext?.components && !!userAppContext?.directives) { + vnode.appContext = userAppContext; + } + } catch (error) {} } /** * @description: 检查是否需要渲染 diff --git a/packages/vue-vtable/src/edit/editor.ts b/packages/vue-vtable/src/edit/editor.ts index aed5b2ed24..8f2b120a81 100644 --- a/packages/vue-vtable/src/edit/editor.ts +++ b/packages/vue-vtable/src/edit/editor.ts @@ -161,7 +161,7 @@ export class DynamicRenderEditor { if (!vnode || !isVNode(vnode)) { return false; } - this.checkToPassAppContext(vnode); + this.checkToPassAppContext(vnode, table); // 创建包裹容器 const wrapContainer = document.createElement('div'); wrapContainer.style.position = 'absolute'; @@ -183,12 +183,17 @@ export class DynamicRenderEditor { /** * @description: 校验并传递上下文 * @param {VNode} vnode + * @param {any} table * @return {*} */ - checkToPassAppContext(vnode: VNode) { - if (this.currentContext) { - vnode.appContext = this.currentContext; - } + checkToPassAppContext(vnode: VNode, table: any) { + try { + const userAppContext = table.options?.customConfig?.getVueUserAppContext?.() ?? this.currentContext; + // 简单校验合法性 + if (!!userAppContext?.components && !!userAppContext?.directives) { + vnode.appContext = userAppContext; + } + } catch (error) {} } /** * @description: 获取渲染式编辑器的列配置主键 From 653d014d98e3f001172b2ce5a1677e81d9b9b69a Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Mon, 24 Mar 2025 11:55:11 +0800 Subject: [PATCH 06/13] feat: add can_scroll event --- .../examples/interactive/custom-scroll.ts | 14 ++-- packages/vtable/src/core/TABLE_EVENT_TYPE.ts | 2 + packages/vtable/src/state/state.ts | 83 +++++++++++++------ packages/vtable/src/ts-types/events.ts | 17 +++- 4 files changed, 83 insertions(+), 33 deletions(-) diff --git a/packages/vtable/examples/interactive/custom-scroll.ts b/packages/vtable/examples/interactive/custom-scroll.ts index 575e1ef6ba..50f6ae0fe8 100644 --- a/packages/vtable/examples/interactive/custom-scroll.ts +++ b/packages/vtable/examples/interactive/custom-scroll.ts @@ -552,7 +552,7 @@ class VTablePaddingOperator { // right this.x2 = Math.max(this.x2Target - this.padding[1], this.x2 - (e.dx || 1)); - console.log('left', this.x2); + // console.log('left', this.x2); setTimeout(() => { this.clearCanvas(); this.updateViewBox(); @@ -562,21 +562,21 @@ class VTablePaddingOperator { // left this.x2 = Math.min(this.x2Target, this.x2 - (e.dx ?? 0)); - console.log('right', this.x2); + // console.log('right', this.x2); setTimeout(() => { this.clearCanvas(); this.updateViewBox(); this.table.scenegraph.setX(-this.table.stateManager.scroll.horizontalBarPos - 1, true); }, 0); } else { - console.log('normal', this.x2); + // console.log('normal', this.x2); } // vertical scroll if (e.scrollRatioY === 1 && (e.dy ?? 0) >= 0 && this.y2 > this.y2Target - this.padding[2]) { // bottom this.y2 = Math.max(this.y2Target - this.padding[2], this.y2 - (e.dy || 1)); - console.log('top', this.y2); + // console.log('top', this.y2); setTimeout(() => { this.clearCanvas(); this.updateViewBox(); @@ -585,14 +585,14 @@ class VTablePaddingOperator { } else if (this.y2 < this.y2Target && (e.dy ?? 0) < 0) { // top this.y2 = Math.min(this.y2Target, this.y2 - (e.dy ?? 0)); - console.log('bottom', this.y2); + // console.log('bottom', this.y2); setTimeout(() => { this.clearCanvas(); this.updateViewBox(); this.table.scenegraph.setY(-this.table.stateManager.scroll.verticalBarPos - 1, true); }, 0); } else { - console.log('normal', this.y2); + // console.log('normal', this.y2); } }); } @@ -614,6 +614,8 @@ class VTablePaddingOperator { x2: this.x2, y2: this.y2 }); + this.clearCanvas(); + this.table.render(); } reset() { diff --git a/packages/vtable/src/core/TABLE_EVENT_TYPE.ts b/packages/vtable/src/core/TABLE_EVENT_TYPE.ts index d56917da1c..66a2929d1d 100644 --- a/packages/vtable/src/core/TABLE_EVENT_TYPE.ts +++ b/packages/vtable/src/core/TABLE_EVENT_TYPE.ts @@ -100,6 +100,7 @@ export interface TableEvents { * 滚动表格事件 */ SCROLL: 'scroll'; + CAN_SCROLL: 'can_scroll'; /** * 横向滚动条滚动到结束位 */ @@ -226,6 +227,7 @@ export const TABLE_EVENT_TYPE: TableEvents = { AFTER_SORT: 'after_sort', FREEZE_CLICK: 'freeze_click', SCROLL: 'scroll', + CAN_SCROLL: 'can_scroll', SCROLL_HORIZONTAL_END: 'scroll_horizontal_end', SCROLL_VERTICAL_END: 'scroll_vertical_end', DROPDOWN_MENU_CLICK: 'dropdown_menu_click', diff --git a/packages/vtable/src/state/state.ts b/packages/vtable/src/state/state.ts index 13a08c51dc..bd30b92883 100644 --- a/packages/vtable/src/state/state.ts +++ b/packages/vtable/src/state/state.ts @@ -967,7 +967,7 @@ export class StateManager { // verticalBarPos -= this.table.scenegraph.proxy.deltaY; const dy = verticalBarPos - this.table.scenegraph.proxy.deltaY - oldVerticalBarPos; - const canScroll = this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { + const canScroll = this.table.fireListeners(TABLE_EVENT_TYPE.CAN_SCROLL, { event: undefined, scrollTop: verticalBarPos - this.table.scenegraph.proxy.deltaY, scrollLeft: this.scroll.horizontalBarPos, @@ -996,17 +996,18 @@ export class StateManager { this.updateHoverPos(-1, -1); // this.updateSelectPos(-1, -1); - // this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { - // event: undefined, - // scrollTop: this.scroll.verticalBarPos, - // scrollLeft: this.scroll.horizontalBarPos, - // scrollHeight: this.table.theme.scrollStyle?.width, - // scrollWidth: this.table.theme.scrollStyle?.width, - // viewHeight: this.table.tableNoFrameHeight, - // viewWidth: this.table.tableNoFrameWidth, - // scrollDirection: 'vertical', - // scrollRatioY: yRatio - // }); + this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { + event: undefined, + scrollTop: this.scroll.verticalBarPos, + scrollLeft: this.scroll.horizontalBarPos, + scrollHeight: this.table.theme.scrollStyle?.width, + scrollWidth: this.table.theme.scrollStyle?.width, + viewHeight: this.table.tableNoFrameHeight, + viewWidth: this.table.tableNoFrameWidth, + scrollDirection: 'vertical', + scrollRatioY: yRatio, + dy + }); if (oldVerticalBarPos !== this.scroll.verticalBarPos) { this.checkVerticalScrollBarEnd(); @@ -1022,7 +1023,8 @@ export class StateManager { } // horizontalBarPos -= this.table.scenegraph.proxy.deltaX; const dx = horizontalBarPos - this.table.scenegraph.proxy.deltaX - oldHorizontalBarPos; - const canScroll = this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { + + const canScroll = this.table.fireListeners(TABLE_EVENT_TYPE.CAN_SCROLL, { event: undefined, scrollTop: this.scroll.verticalBarPos, scrollLeft: horizontalBarPos - this.table.scenegraph.proxy.deltaX, @@ -1059,17 +1061,18 @@ export class StateManager { // 滚动期间清空选中清空 this.updateHoverPos(-1, -1); // this.updateSelectPos(-1, -1); - // this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { - // event: undefined, - // scrollTop: this.scroll.verticalBarPos, - // scrollLeft: this.scroll.horizontalBarPos, - // scrollHeight: this.table.theme.scrollStyle?.width, - // scrollWidth: this.table.theme.scrollStyle?.width, - // viewHeight: this.table.tableNoFrameHeight, - // viewWidth: this.table.tableNoFrameWidth, - // scrollDirection: 'horizontal', - // scrollRatioX: xRatio - // }); + this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { + event: undefined, + scrollTop: this.scroll.verticalBarPos, + scrollLeft: this.scroll.horizontalBarPos, + scrollHeight: this.table.theme.scrollStyle?.width, + scrollWidth: this.table.theme.scrollStyle?.width, + viewHeight: this.table.tableNoFrameHeight, + viewWidth: this.table.tableNoFrameWidth, + scrollDirection: 'horizontal', + scrollRatioX: xRatio, + dx: dx + }); if (oldHorizontalBarPos !== this.scroll.horizontalBarPos) { this.checkHorizontalScrollBarEnd(); @@ -1098,7 +1101,7 @@ export class StateManager { } const dy = verticalBarPos - oldVerticalBarPos; - const canScroll = this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { + const canScroll = this.table.fireListeners(TABLE_EVENT_TYPE.CAN_SCROLL, { event: (event as FederatedWheelEvent)?.nativeEvent as WheelEvent, scrollTop: verticalBarPos, scrollLeft: this.scroll.horizontalBarPos, @@ -1134,6 +1137,20 @@ export class StateManager { // 更新scrollbar位置 this.table.scenegraph.component.updateVerticalScrollBarPos(yRatio); + const dy = this.scroll.verticalBarPos - oldVerticalBarPos; + this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { + event: (event as FederatedWheelEvent)?.nativeEvent as WheelEvent, + scrollTop: this.scroll.verticalBarPos, + scrollLeft: this.scroll.horizontalBarPos, + scrollHeight: this.table.theme.scrollStyle?.width, + scrollWidth: this.table.theme.scrollStyle?.width, + viewHeight: this.table.tableNoFrameHeight, + viewWidth: this.table.tableNoFrameWidth, + scrollDirection: 'vertical', + scrollRatioY: yRatio, + dy + }); + if (oldVerticalBarPos !== top && triggerEvent) { this.checkVerticalScrollBarEnd(); } @@ -1165,7 +1182,7 @@ export class StateManager { horizontalBarPos = 0; } const dx = horizontalBarPos - oldHorizontalBarPos; - const canScroll = this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { + const canScroll = this.table.fireListeners(TABLE_EVENT_TYPE.CAN_SCROLL, { event: (event as FederatedWheelEvent)?.nativeEvent as WheelEvent, scrollTop: this.scroll.verticalBarPos, scrollLeft: horizontalBarPos, @@ -1202,6 +1219,20 @@ export class StateManager { // 更新scrollbar位置 this.table.scenegraph.component.updateHorizontalScrollBarPos(xRatio); + const dx = this.scroll.horizontalBarPos - oldHorizontalBarPos; + this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, { + event: (event as FederatedWheelEvent)?.nativeEvent as WheelEvent, + scrollTop: this.scroll.verticalBarPos, + scrollLeft: this.scroll.horizontalBarPos, + scrollHeight: this.table.theme.scrollStyle?.width, + scrollWidth: this.table.theme.scrollStyle?.width, + viewHeight: this.table.tableNoFrameHeight, + viewWidth: this.table.tableNoFrameWidth, + scrollDirection: 'horizontal', + scrollRatioX: xRatio, + dx + }); + if (oldHorizontalBarPos !== left && triggerEvent) { this.checkHorizontalScrollBarEnd(); } diff --git a/packages/vtable/src/ts-types/events.ts b/packages/vtable/src/ts-types/events.ts index 3b0f2e6878..49509d8caf 100644 --- a/packages/vtable/src/ts-types/events.ts +++ b/packages/vtable/src/ts-types/events.ts @@ -89,6 +89,20 @@ export interface TableEventHandlersEventArgumentMap { dx?: number; dy?: number; }; + can_scroll: { + event: WheelEvent; + scrollLeft: number; + scrollTop: number; + scrollWidth: number; + scrollHeight: number; + viewWidth: number; + viewHeight: number; + scrollDirection: 'horizontal' | 'vertical'; + scrollRatioX?: number; + scrollRatioY?: number; + dx?: number; + dy?: number; + }; scroll_vertical_end: { scrollLeft: number; scrollTop: number; @@ -262,7 +276,8 @@ export interface TableEventHandlersReturnMap { mouseup_cell: void; contextmenu_cell: void; keydown: void; - scroll: void | boolean; + scroll: void; + can_scroll: void | boolean; focus_table: void; blur_table: void; resize_column: void; From 352d086195195fa863e9a3db5e68df122389aedc Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Mon, 24 Mar 2025 15:01:28 +0800 Subject: [PATCH 07/13] fix: add cell position trim --- .../__tests__/listTable-highlightInRange.test.ts | 2 +- packages/vtable/__tests__/listTable.test.ts | 2 +- packages/vtable/src/core/BaseTable.ts | 14 +++++++++++++- packages/vtable/src/state/state.ts | 13 +++++++++++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/vtable/__tests__/listTable-highlightInRange.test.ts b/packages/vtable/__tests__/listTable-highlightInRange.test.ts index 984bb5b4d3..0f25cbc68f 100644 --- a/packages/vtable/__tests__/listTable-highlightInRange.test.ts +++ b/packages/vtable/__tests__/listTable-highlightInRange.test.ts @@ -195,7 +195,7 @@ describe('listTable init test', () => { expect(listTable.stateManager?.select.ranges).toEqual([ { start: { col: 1, row: 3 }, end: { col: 4, row: 6 }, skipBodyMerge: true }, { start: { col: 0, row: 4 }, end: { col: 7, row: 4 }, skipBodyMerge: true }, - { start: { col: 4, row: 36 }, end: { col: 7, row: 36 }, skipBodyMerge: true } + { start: { col: 4, row: 20 }, end: { col: 7, row: 20 }, skipBodyMerge: true } ]); expect(listTable.getScrollTop()).toBe(scrollTop); }); diff --git a/packages/vtable/__tests__/listTable.test.ts b/packages/vtable/__tests__/listTable.test.ts index 00cfa1e789..4c81ed01c3 100644 --- a/packages/vtable/__tests__/listTable.test.ts +++ b/packages/vtable/__tests__/listTable.test.ts @@ -192,7 +192,7 @@ describe('listTable init test', () => { expect(listTable.stateManager?.select.ranges).toEqual([ { start: { col: 1, row: 3 }, end: { col: 4, row: 6 }, skipBodyMerge: true }, { start: { col: 0, row: 4 }, end: { col: 7, row: 4 }, skipBodyMerge: true }, - { start: { col: 4, row: 36 }, end: { col: 7, row: 36 }, skipBodyMerge: true } + { start: { col: 4, row: 20 }, end: { col: 7, row: 20 }, skipBodyMerge: true } ]); expect(listTable.getScrollTop()).toBe(scrollTop); }); diff --git a/packages/vtable/src/core/BaseTable.ts b/packages/vtable/src/core/BaseTable.ts index cac95c05d3..fb892efe43 100644 --- a/packages/vtable/src/core/BaseTable.ts +++ b/packages/vtable/src/core/BaseTable.ts @@ -3127,7 +3127,19 @@ export abstract class BaseTable extends EventTarget implements BaseTableAPI { customMerge.range && (isValid(customMerge.text) || customMerge.customLayout || customMerge.customRender) ) { - return customMerge.range; + // return customMerge.range; + // trim range + const range = { + start: { + col: Math.max(customMerge.range.start.col, 0), + row: Math.max(customMerge.range.start.row, 0) + }, + end: { + col: Math.min(customMerge.range.end.col, this.colCount - 1), + row: Math.min(customMerge.range.end.row, this.rowCount - 1) + } + }; + return range; } } return this.internalProps.layoutMap?.getCellRange(col, row); diff --git a/packages/vtable/src/state/state.ts b/packages/vtable/src/state/state.ts index bd30b92883..dfd431ceee 100644 --- a/packages/vtable/src/state/state.ts +++ b/packages/vtable/src/state/state.ts @@ -607,6 +607,19 @@ export class StateManager { if (row !== -1 && row !== -1) { this.select.selecting = true; } + // trim select position + if (col < 0) { + col = 0; + } + if (row < 0) { + row = 0; + } + if (col > this.table.colCount - 1) { + col = this.table.colCount - 1; + } + if (row > this.table.rowCount - 1) { + row = this.table.rowCount - 1; + } updateSelectPosition(this, col, row, isShift, isCtrl, isSelectAll, makeSelectCellVisible, skipBodyMerge); } From 3cb63f871f4c050766cac4f337de282377467b54 Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Mon, 24 Mar 2025 15:34:20 +0800 Subject: [PATCH 08/13] fix: fix select position trim logic --- packages/vtable/src/state/state.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vtable/src/state/state.ts b/packages/vtable/src/state/state.ts index dfd431ceee..a52d5c754c 100644 --- a/packages/vtable/src/state/state.ts +++ b/packages/vtable/src/state/state.ts @@ -609,10 +609,10 @@ export class StateManager { } // trim select position if (col < 0) { - col = 0; + col = -1; } if (row < 0) { - row = 0; + row = -1; } if (col > this.table.colCount - 1) { col = this.table.colCount - 1; From 914581979e6857a0800a12eefc039ea11af13a0b Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Mon, 24 Mar 2025 16:30:38 +0800 Subject: [PATCH 09/13] fix: fix video play icon position --- .../src/scenegraph/group-creater/cell-type/video-cell.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/vtable/src/scenegraph/group-creater/cell-type/video-cell.ts b/packages/vtable/src/scenegraph/group-creater/cell-type/video-cell.ts index e2b024fa1e..c46efc0c0a 100644 --- a/packages/vtable/src/scenegraph/group-creater/cell-type/video-cell.ts +++ b/packages/vtable/src/scenegraph/group-creater/cell-type/video-cell.ts @@ -226,13 +226,19 @@ export function createVideoCellGroup( const anchorY = top + (height > image.attribute.height ? image.attribute.y - top + image.attribute.height / 2 : height / 2); + // get dx dy of image graphic for merge cell + const imageGraphic = cellGroup.getChildByName('image', true); + const { dx, dy } = imageGraphic.attribute; + const playIcon: Icon = new Icon({ x: anchorX - iconSize / 2, y: anchorY - iconSize / 2, width: iconSize, height: iconSize, image: (regedIcons.play as any).svg, - cursor: (regedIcons.play as any).cursor + cursor: (regedIcons.play as any).cursor, + dx, + dy }); playIcon.name = 'play-icon'; cellGroup.appendChild(playIcon); From acb0c942cc94e23d53073fb627c2d91b7e7346ca Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Mon, 24 Mar 2025 17:32:58 +0800 Subject: [PATCH 10/13] fix: fix IRowSeriesNumber radio type --- packages/vtable/src/layout/pivot-header-layout.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/vtable/src/layout/pivot-header-layout.ts b/packages/vtable/src/layout/pivot-header-layout.ts index 703fe95da0..4998086d7e 100644 --- a/packages/vtable/src/layout/pivot-header-layout.ts +++ b/packages/vtable/src/layout/pivot-header-layout.ts @@ -431,17 +431,17 @@ export class PivotHeaderLayoutMap implements LayoutMapAPI { handleRowSeriesNumber(rowSeriesNumber: IRowSeriesNumber) { if (rowSeriesNumber) { if (Array.isArray(rowSeriesNumber)) { - this.rowSeriesNumberColumn = rowSeriesNumber.map(seriesNumber => { + this.rowSeriesNumberColumn = rowSeriesNumber.map((seriesNumber: IRowSeriesNumber) => { return { id: '', title: seriesNumber.title, define: seriesNumber, cellType: seriesNumber.cellType ?? 'text', - headerType: seriesNumber.cellType ?? 'text', + headerType: seriesNumber.cellType && seriesNumber.cellType !== 'radio' ? seriesNumber.cellType : 'text', width: seriesNumber.width, style: seriesNumber.style, format: seriesNumber.format, - field: seriesNumber.field, + field: (seriesNumber as any).field, icon: seriesNumber.icon }; }); @@ -452,7 +452,8 @@ export class PivotHeaderLayoutMap implements LayoutMapAPI { title: rowSeriesNumber.title, define: rowSeriesNumber, cellType: rowSeriesNumber.cellType ?? 'text', - headerType: rowSeriesNumber.cellType ?? 'text', + headerType: + rowSeriesNumber.cellType && rowSeriesNumber.cellType !== 'radio' ? rowSeriesNumber.cellType : 'text', style: rowSeriesNumber.style, width: rowSeriesNumber.width, format: rowSeriesNumber.format, From 731517feabe110bcc2a13a8ac1df2de9f516891a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Mar 2025 09:44:22 +0000 Subject: [PATCH 11/13] build: prelease version 1.17.3 --- ...llmode-replace-error_2025-03-10-08-42.json | 11 ----- ...owSeriesNumber-radio_2025-03-12-09-32.json | 11 ----- ...3574-bug-frameBorder_2025-03-17-06-37.json | 11 ----- ...-custom-react-plugin_2025-03-12-08-14.json | 10 ----- ...aintainedColumnCount_2025-03-19-04-33.json | 10 ----- .../fix-corner-stroke_2025-03-06-11-35.json | 10 ----- ...x-enable-ticks-label_2025-03-20-03-20.json | 10 ----- .../fix-frozen-update_2025-03-19-03-13.json | 10 ----- .../fix-getCellPath_api_2025-03-11-10-06.json | 11 ----- ...act-component-update_2025-03-21-09-53.json | 10 ----- .../fix-right-button_2025-03-20-07-25.json | 10 ----- ...row-update-direction_2025-03-21-07-18.json | 10 ----- common/config/rush/version-policies.json | 2 +- packages/openinula-vtable/package.json | 2 +- packages/react-vtable/package.json | 2 +- packages/vtable-calendar/package.json | 2 +- packages/vtable-editors/package.json | 2 +- packages/vtable-export/package.json | 2 +- packages/vtable-gantt/package.json | 2 +- packages/vtable-plugins/package.json | 2 +- packages/vtable-search/package.json | 2 +- packages/vtable/CHANGELOG.json | 45 +++++++++++++++++++ packages/vtable/CHANGELOG.md | 28 +++++++++++- packages/vtable/package.json | 2 +- packages/vue-vtable/package.json | 2 +- 25 files changed, 83 insertions(+), 136 deletions(-) delete mode 100644 common/changes/@visactor/vtable/3529-bug-selectionfillmode-replace-error_2025-03-10-08-42.json delete mode 100644 common/changes/@visactor/vtable/3558-feature-rowSeriesNumber-radio_2025-03-12-09-32.json delete mode 100644 common/changes/@visactor/vtable/3574-bug-frameBorder_2025-03-17-06-37.json delete mode 100644 common/changes/@visactor/vtable/feat-custom-react-plugin_2025-03-12-08-14.json delete mode 100644 common/changes/@visactor/vtable/feat-maintainedColumnCount_2025-03-19-04-33.json delete mode 100644 common/changes/@visactor/vtable/fix-corner-stroke_2025-03-06-11-35.json delete mode 100644 common/changes/@visactor/vtable/fix-enable-ticks-label_2025-03-20-03-20.json delete mode 100644 common/changes/@visactor/vtable/fix-frozen-update_2025-03-19-03-13.json delete mode 100644 common/changes/@visactor/vtable/fix-getCellPath_api_2025-03-11-10-06.json delete mode 100644 common/changes/@visactor/vtable/fix-react-component-update_2025-03-21-09-53.json delete mode 100644 common/changes/@visactor/vtable/fix-right-button_2025-03-20-07-25.json delete mode 100644 common/changes/@visactor/vtable/fix-row-update-direction_2025-03-21-07-18.json diff --git a/common/changes/@visactor/vtable/3529-bug-selectionfillmode-replace-error_2025-03-10-08-42.json b/common/changes/@visactor/vtable/3529-bug-selectionfillmode-replace-error_2025-03-10-08-42.json deleted file mode 100644 index aacea1253b..0000000000 --- a/common/changes/@visactor/vtable/3529-bug-selectionfillmode-replace-error_2025-03-10-08-42.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "fix: selection mergeCell extend range #3529\n\n", - "type": "none", - "packageName": "@visactor/vtable" - } - ], - "packageName": "@visactor/vtable", - "email": "892739385@qq.com" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/3558-feature-rowSeriesNumber-radio_2025-03-12-09-32.json b/common/changes/@visactor/vtable/3558-feature-rowSeriesNumber-radio_2025-03-12-09-32.json deleted file mode 100644 index 037f5e8926..0000000000 --- a/common/changes/@visactor/vtable/3558-feature-rowSeriesNumber-radio_2025-03-12-09-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "feat: rowSeriesNumber support cell type radio #3558\n\n", - "type": "none", - "packageName": "@visactor/vtable" - } - ], - "packageName": "@visactor/vtable", - "email": "892739385@qq.com" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/3574-bug-frameBorder_2025-03-17-06-37.json b/common/changes/@visactor/vtable/3574-bug-frameBorder_2025-03-17-06-37.json deleted file mode 100644 index f925634fd7..0000000000 --- a/common/changes/@visactor/vtable/3574-bug-frameBorder_2025-03-17-06-37.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "fix: set cellInnerBorder false frame border render error #3574\n\n", - "type": "none", - "packageName": "@visactor/vtable" - } - ], - "packageName": "@visactor/vtable", - "email": "892739385@qq.com" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/feat-custom-react-plugin_2025-03-12-08-14.json b/common/changes/@visactor/vtable/feat-custom-react-plugin_2025-03-12-08-14.json deleted file mode 100644 index c528975dab..0000000000 --- a/common/changes/@visactor/vtable/feat-custom-react-plugin_2025-03-12-08-14.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vtable", - "comment": "feat: add custom reactAttributePlugin in react-vtable", - "type": "none" - } - ], - "packageName": "@visactor/vtable" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/feat-maintainedColumnCount_2025-03-19-04-33.json b/common/changes/@visactor/vtable/feat-maintainedColumnCount_2025-03-19-04-33.json deleted file mode 100644 index b045cbcf6d..0000000000 --- a/common/changes/@visactor/vtable/feat-maintainedColumnCount_2025-03-19-04-33.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vtable", - "comment": "feat: add maintainedColumnCount config", - "type": "none" - } - ], - "packageName": "@visactor/vtable" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-corner-stroke_2025-03-06-11-35.json b/common/changes/@visactor/vtable/fix-corner-stroke_2025-03-06-11-35.json deleted file mode 100644 index e8f303bf38..0000000000 --- a/common/changes/@visactor/vtable/fix-corner-stroke_2025-03-06-11-35.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vtable", - "comment": "fix: fix cell border in cell with corner-radius", - "type": "none" - } - ], - "packageName": "@visactor/vtable" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-enable-ticks-label_2025-03-20-03-20.json b/common/changes/@visactor/vtable/fix-enable-ticks-label_2025-03-20-03-20.json deleted file mode 100644 index 09a95a3845..0000000000 --- a/common/changes/@visactor/vtable/fix-enable-ticks-label_2025-03-20-03-20.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vtable", - "comment": "fix: fix axis label autosize computation", - "type": "none" - } - ], - "packageName": "@visactor/vtable" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-frozen-update_2025-03-19-03-13.json b/common/changes/@visactor/vtable/fix-frozen-update_2025-03-19-03-13.json deleted file mode 100644 index 76d90493a3..0000000000 --- a/common/changes/@visactor/vtable/fix-frozen-update_2025-03-19-03-13.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vtable", - "comment": "fix: fix small window size frozen column count", - "type": "none" - } - ], - "packageName": "@visactor/vtable" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-getCellPath_api_2025-03-11-10-06.json b/common/changes/@visactor/vtable/fix-getCellPath_api_2025-03-11-10-06.json deleted file mode 100644 index cf8b6c1168..0000000000 --- a/common/changes/@visactor/vtable/fix-getCellPath_api_2025-03-11-10-06.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "fix: columnWidthConfig match dimension error\n\n", - "type": "none", - "packageName": "@visactor/vtable" - } - ], - "packageName": "@visactor/vtable", - "email": "892739385@qq.com" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-react-component-update_2025-03-21-09-53.json b/common/changes/@visactor/vtable/fix-react-component-update_2025-03-21-09-53.json deleted file mode 100644 index 1049b3b136..0000000000 --- a/common/changes/@visactor/vtable/fix-react-component-update_2025-03-21-09-53.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vtable", - "comment": "fix: fix react component update #3474", - "type": "none" - } - ], - "packageName": "@visactor/vtable" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-right-button_2025-03-20-07-25.json b/common/changes/@visactor/vtable/fix-right-button_2025-03-20-07-25.json deleted file mode 100644 index 7bcf827e00..0000000000 --- a/common/changes/@visactor/vtable/fix-right-button_2025-03-20-07-25.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vtable", - "comment": "fix: fix right button select problem", - "type": "none" - } - ], - "packageName": "@visactor/vtable" -} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-row-update-direction_2025-03-21-07-18.json b/common/changes/@visactor/vtable/fix-row-update-direction_2025-03-21-07-18.json deleted file mode 100644 index e0f790ed5e..0000000000 --- a/common/changes/@visactor/vtable/fix-row-update-direction_2025-03-21-07-18.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vtable", - "comment": "fix: fix row update range #3468", - "type": "none" - } - ], - "packageName": "@visactor/vtable" -} \ No newline at end of file diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json index d6888b1c68..ccd07f884c 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -1 +1 @@ -[{"definitionName":"lockStepVersion","policyName":"vtableMain","version":"1.17.2","mainProject":"@visactor/vtable","nextBump":"patch"}] +[{"definitionName":"lockStepVersion","policyName":"vtableMain","version":"1.17.3","mainProject":"@visactor/vtable","nextBump":"patch"}] diff --git a/packages/openinula-vtable/package.json b/packages/openinula-vtable/package.json index 6f00025355..33c0a5d1e5 100644 --- a/packages/openinula-vtable/package.json +++ b/packages/openinula-vtable/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/openinula-vtable", - "version": "1.17.2", + "version": "1.17.3", "description": "The openinula version of VTable", "keywords": [ "openinula", diff --git a/packages/react-vtable/package.json b/packages/react-vtable/package.json index c72bceba9f..4d6ce329c9 100644 --- a/packages/react-vtable/package.json +++ b/packages/react-vtable/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/react-vtable", - "version": "1.17.2", + "version": "1.17.3", "description": "The react version of VTable", "keywords": [ "react", diff --git a/packages/vtable-calendar/package.json b/packages/vtable-calendar/package.json index 3daabf706d..1fccc96e66 100644 --- a/packages/vtable-calendar/package.json +++ b/packages/vtable-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable-calendar", - "version": "1.17.2", + "version": "1.17.3", "description": "The calendar component of VTable", "author": { "name": "VisActor", diff --git a/packages/vtable-editors/package.json b/packages/vtable-editors/package.json index 6f32f56936..6e4a54d8ad 100644 --- a/packages/vtable-editors/package.json +++ b/packages/vtable-editors/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable-editors", - "version": "1.17.2", + "version": "1.17.3", "description": "", "sideEffects": false, "main": "cjs/index.js", diff --git a/packages/vtable-export/package.json b/packages/vtable-export/package.json index 49cb343116..80425f2080 100644 --- a/packages/vtable-export/package.json +++ b/packages/vtable-export/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable-export", - "version": "1.17.2", + "version": "1.17.3", "description": "The export util of VTable", "author": { "name": "VisActor", diff --git a/packages/vtable-gantt/package.json b/packages/vtable-gantt/package.json index 2711060c53..6ef72a52e9 100644 --- a/packages/vtable-gantt/package.json +++ b/packages/vtable-gantt/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable-gantt", - "version": "1.17.2", + "version": "1.17.3", "description": "canvas table width high performance", "keywords": [ "vtable-gantt", diff --git a/packages/vtable-plugins/package.json b/packages/vtable-plugins/package.json index 378d9e9fcf..d644615b6a 100644 --- a/packages/vtable-plugins/package.json +++ b/packages/vtable-plugins/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable-plugins", - "version": "1.17.2", + "version": "1.17.3", "description": "The search util of VTable", "author": { "name": "VisActor", diff --git a/packages/vtable-search/package.json b/packages/vtable-search/package.json index 834a48b4a3..971f161390 100644 --- a/packages/vtable-search/package.json +++ b/packages/vtable-search/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable-search", - "version": "1.17.2", + "version": "1.17.3", "description": "The search util of VTable", "author": { "name": "VisActor", diff --git a/packages/vtable/CHANGELOG.json b/packages/vtable/CHANGELOG.json index d7526c5365..0a4bf9e4cd 100644 --- a/packages/vtable/CHANGELOG.json +++ b/packages/vtable/CHANGELOG.json @@ -1,6 +1,51 @@ { "name": "@visactor/vtable", "entries": [ + { + "version": "1.17.3", + "tag": "@visactor/vtable_v1.17.3", + "date": "Mon, 24 Mar 2025 09:35:45 GMT", + "comments": { + "none": [ + { + "comment": "fix: selection mergeCell extend range #3529\n\n" + }, + { + "comment": "feat: rowSeriesNumber support cell type radio #3558\n\n" + }, + { + "comment": "fix: set cellInnerBorder false frame border render error #3574\n\n" + }, + { + "comment": "feat: add custom reactAttributePlugin in react-vtable" + }, + { + "comment": "feat: add maintainedColumnCount config" + }, + { + "comment": "fix: fix cell border in cell with corner-radius" + }, + { + "comment": "fix: fix axis label autosize computation" + }, + { + "comment": "fix: fix small window size frozen column count" + }, + { + "comment": "fix: columnWidthConfig match dimension error\n\n" + }, + { + "comment": "fix: fix react component update #3474" + }, + { + "comment": "fix: fix right button select problem" + }, + { + "comment": "fix: fix row update range #3468" + } + ] + } + }, { "version": "1.17.2", "tag": "@visactor/vtable_v1.17.2", diff --git a/packages/vtable/CHANGELOG.md b/packages/vtable/CHANGELOG.md index 36fa6b91fd..2c2032fbc8 100644 --- a/packages/vtable/CHANGELOG.md +++ b/packages/vtable/CHANGELOG.md @@ -1,6 +1,32 @@ # Change Log - @visactor/vtable -This log was last generated on Tue, 11 Mar 2025 08:19:47 GMT and should not be manually modified. +This log was last generated on Mon, 24 Mar 2025 09:35:45 GMT and should not be manually modified. + +## 1.17.3 +Mon, 24 Mar 2025 09:35:45 GMT + +### Updates + +- fix: selection mergeCell extend range #3529 + + +- feat: rowSeriesNumber support cell type radio #3558 + + +- fix: set cellInnerBorder false frame border render error #3574 + + +- feat: add custom reactAttributePlugin in react-vtable +- feat: add maintainedColumnCount config +- fix: fix cell border in cell with corner-radius +- fix: fix axis label autosize computation +- fix: fix small window size frozen column count +- fix: columnWidthConfig match dimension error + + +- fix: fix react component update #3474 +- fix: fix right button select problem +- fix: fix row update range #3468 ## 1.17.2 Tue, 11 Mar 2025 08:19:47 GMT diff --git a/packages/vtable/package.json b/packages/vtable/package.json index 22f7474638..db5d62b758 100644 --- a/packages/vtable/package.json +++ b/packages/vtable/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable", - "version": "1.17.2", + "version": "1.17.3", "description": "canvas table width high performance", "keywords": [ "grid", diff --git a/packages/vue-vtable/package.json b/packages/vue-vtable/package.json index 1fcf1623d8..3bd036b606 100644 --- a/packages/vue-vtable/package.json +++ b/packages/vue-vtable/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vue-vtable", - "version": "1.17.2", + "version": "1.17.3", "description": "The vue version of VTable", "keywords": [ "vue", From 18b5ca68fee27cffb329185d460e6496f629cec7 Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Mon, 24 Mar 2025 11:37:30 +0000 Subject: [PATCH 12/13] docs: generate changelog of release v1.17.3 --- docs/assets/changelog/en/release.md | 25 +++++++++++++++++++++++++ docs/assets/changelog/zh/release.md | 25 +++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/docs/assets/changelog/en/release.md b/docs/assets/changelog/en/release.md index 0f039636fd..e1881bcffc 100644 --- a/docs/assets/changelog/en/release.md +++ b/docs/assets/changelog/en/release.md @@ -1,3 +1,28 @@ +# v1.17.3 + +2025-03-24 + + +**🆕 New feature** + +- **@visactor/vtable**: rowSeriesNumber support cell type radio [#3558](https://github.com/VisActor/VTable/issues/3558) +- **@visactor/vtable**: add custom reactAttributePlugin in react-vtable +- **@visactor/vtable**: add maintainedColumnCount config + +**🐛 Bug fix** + +- **@visactor/vtable**: selection mergeCell extend range [#3529](https://github.com/VisActor/VTable/issues/3529) +- **@visactor/vtable**: set cellInnerBorder false frame border render error [#3574](https://github.com/VisActor/VTable/issues/3574) +- **@visactor/vtable**: fix cell border in cell with corner-radius +- **@visactor/vtable**: fix axis label autosize computation +- **@visactor/vtable**: fix small window size frozen column count +- **@visactor/vtable**: columnWidthConfig match dimension error +- **@visactor/vtable**: fix react component update [#3474](https://github.com/VisActor/VTable/issues/3474) +- **@visactor/vtable**: fix right button select problem +- **@visactor/vtable**: fix row update range [#3468](https://github.com/VisActor/VTable/issues/3468) + +[more detail about v1.17.3](https://github.com/VisActor/VTable/releases/tag/v1.17.3) + # v1.17.2 2025-03-11 diff --git a/docs/assets/changelog/zh/release.md b/docs/assets/changelog/zh/release.md index 4f3ef45266..b5bb53096f 100644 --- a/docs/assets/changelog/zh/release.md +++ b/docs/assets/changelog/zh/release.md @@ -1,3 +1,28 @@ +# v1.17.3 + +2025-03-24 + + +**🆕 新增功能** + +- **@visactor/vtable**: rowSeriesNumber support cell type radio [#3558](https://github.com/VisActor/VTable/issues/3558) +- **@visactor/vtable**: add custom reactAttributePlugin in react-vtable +- **@visactor/vtable**: add maintainedColumnCount config + +**🐛 功能修复** + +- **@visactor/vtable**: selection mergeCell extend range [#3529](https://github.com/VisActor/VTable/issues/3529) +- **@visactor/vtable**: set cellInnerBorder false frame border render error [#3574](https://github.com/VisActor/VTable/issues/3574) +- **@visactor/vtable**: fix cell border in cell with corner-radius +- **@visactor/vtable**: fix axis label autosize computation +- **@visactor/vtable**: fix small window size frozen column count +- **@visactor/vtable**: columnWidthConfig match dimension error +- **@visactor/vtable**: fix react component update [#3474](https://github.com/VisActor/VTable/issues/3474) +- **@visactor/vtable**: fix right button select problem +- **@visactor/vtable**: fix row update range [#3468](https://github.com/VisActor/VTable/issues/3468) + +[更多详情请查看 v1.17.3](https://github.com/VisActor/VTable/releases/tag/v1.17.3) + # v1.17.2 2025-03-11 From 244ffd704e40630ffb89ff88f1fdabb7c3d5bc72 Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Mon, 24 Mar 2025 20:04:48 +0800 Subject: [PATCH 13/13] docs: translate release log --- docs/assets/changelog/zh/release.md | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/docs/assets/changelog/zh/release.md b/docs/assets/changelog/zh/release.md index b5bb53096f..927d84ac1b 100644 --- a/docs/assets/changelog/zh/release.md +++ b/docs/assets/changelog/zh/release.md @@ -2,24 +2,23 @@ 2025-03-24 - **🆕 新增功能** - -- **@visactor/vtable**: rowSeriesNumber support cell type radio [#3558](https://github.com/VisActor/VTable/issues/3558) -- **@visactor/vtable**: add custom reactAttributePlugin in react-vtable -- **@visactor/vtable**: add maintainedColumnCount config + +- **@visactor/vtable**: 行序号支持单选按钮类型 [#3558](https://github.com/VisActor/VTable/issues/3558) +- **@visactor/vtable**: 在 react-vtable 中添加自定义 reactAttributePlugin +- **@visactor/vtable**: 添加 maintainedColumnCount 配置 **🐛 功能修复** - -- **@visactor/vtable**: selection mergeCell extend range [#3529](https://github.com/VisActor/VTable/issues/3529) -- **@visactor/vtable**: set cellInnerBorder false frame border render error [#3574](https://github.com/VisActor/VTable/issues/3574) -- **@visactor/vtable**: fix cell border in cell with corner-radius -- **@visactor/vtable**: fix axis label autosize computation -- **@visactor/vtable**: fix small window size frozen column count -- **@visactor/vtable**: columnWidthConfig match dimension error -- **@visactor/vtable**: fix react component update [#3474](https://github.com/VisActor/VTable/issues/3474) -- **@visactor/vtable**: fix right button select problem -- **@visactor/vtable**: fix row update range [#3468](https://github.com/VisActor/VTable/issues/3468) + +- **@visactor/vtable**: 修复选择合并单元格扩展范围问题 [#3529](https://github.com/VisActor/VTable/issues/3529) +- **@visactor/vtable**: 修复设置 cellInnerBorder 为 false 时边框渲染错误 [#3574](https://github.com/VisActor/VTable/issues/3574) +- **@visactor/vtable**: 修复带圆角单元格的边框问题 +- **@visactor/vtable**: 修复坐标轴标签自动大小计算 +- **@visactor/vtable**: 修复小窗口大小下冻结列数问题 +- **@visactor/vtable**: 修复 columnWidthConfig 维度匹配错误 +- **@visactor/vtable**: 修复 React 组件更新问题 [#3474](https://github.com/VisActor/VTable/issues/3474) +- **@visactor/vtable**: 修复右键选择问题 +- **@visactor/vtable**: 修复行更新范围问题 [#3468](https://github.com/VisActor/VTable/issues/3468) [更多详情请查看 v1.17.3](https://github.com/VisActor/VTable/releases/tag/v1.17.3)