From 90794ce1ff774f5bc3ff43c9be038af1f3fca3b6 Mon Sep 17 00:00:00 2001 From: fangsmile <892739385@qq.com> Date: Mon, 1 Jan 2024 22:12:13 +0800 Subject: [PATCH 1/5] fix: arrow key to move select cell not work --- packages/vtable/src/event/event.ts | 3 ++- packages/vtable/src/event/listener/container-dom.ts | 6 ++++++ packages/vtable/src/event/listener/table-group.ts | 9 ++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/vtable/src/event/event.ts b/packages/vtable/src/event/event.ts index eb25f0833..aa45e8751 100644 --- a/packages/vtable/src/event/event.ts +++ b/packages/vtable/src/event/event.ts @@ -27,7 +27,8 @@ export class EventManager { table: BaseTableAPI; // _col: number; // _resizing: boolean = false; - + /** 为了能够判断canvas mousedown 事件 以阻止事件冒泡 */ + isPointerDownOnTable: boolean = false; isTouchdown: boolean; // touch scrolling mode on touchMovePoints: { x: number; diff --git a/packages/vtable/src/event/listener/container-dom.ts b/packages/vtable/src/event/listener/container-dom.ts index a79bc4652..a4df27a45 100644 --- a/packages/vtable/src/event/listener/container-dom.ts +++ b/packages/vtable/src/event/listener/container-dom.ts @@ -11,6 +11,12 @@ export function bindContainerDomListener(eventManager: EventManager) { const stateManager = table.stateManager; const handler: EventHandler = table.internalProps.handler; + handler.on(table.getElement(), 'mousedown', (e: MouseEvent) => { + if (table.eventManager.isPointerDownOnTable) { + e.stopPropagation(); + } + }); + handler.on(table.getElement(), 'blur', (e: MouseEvent) => { eventManager.dealTableHover(); // eventManager.dealTableSelect(); diff --git a/packages/vtable/src/event/listener/table-group.ts b/packages/vtable/src/event/listener/table-group.ts index 50cc919d0..61ab5c1d7 100644 --- a/packages/vtable/src/event/listener/table-group.ts +++ b/packages/vtable/src/event/listener/table-group.ts @@ -26,6 +26,9 @@ import type { CheckBox, CheckboxAttributes } from '@visactor/vrender-components' export function bindTableGroupListener(eventManager: EventManager) { const table = eventManager.table; const stateManager = table.stateManager; + document.body.addEventListener('mousedown', e => { + console.log('body mousedown'); + }); // 有被阻止冒泡的场景 就触发不到这里的事件了 document.body.addEventListener('pointerdown', e => { console.log('body pointerdown'); @@ -345,12 +348,16 @@ export function bindTableGroupListener(eventManager: EventManager) { table.scenegraph.tableGroup.addEventListener('pointerdown', (e: FederatedPointerEvent) => { console.log('tableGroup pointerdown'); + table.eventManager.isPointerDownOnTable = true; + setTimeout(() => { + table.eventManager.isPointerDownOnTable = false; + }, 0); table.eventManager.isDown = true; table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y }; // 避免在调整列宽等拖拽操作触发外层组件的拖拽逻辑 // 如果鼠标位置在表格内(加调整列宽的热区),将mousedown事件阻止冒泡 e.stopPropagation(); - e.preventDefault(); //为了阻止mousedown事件的触发 + // e.preventDefault(); //为了阻止mousedown事件的触发,后续:不能这样写,会阻止table聚焦 table.eventManager.LastPointerXY = { x: e.x, y: e.y }; if (e.button !== 0) { // 只处理左键 From b4f61b780a88d0d2a7bf050bfd16aaac0c33f430 Mon Sep 17 00:00:00 2001 From: fangsmile <892739385@qq.com> Date: Tue, 2 Jan 2024 10:50:36 +0800 Subject: [PATCH 2/5] fix: remove unused code --- packages/vtable/src/event/listener/table-group.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/vtable/src/event/listener/table-group.ts b/packages/vtable/src/event/listener/table-group.ts index 61ab5c1d7..62bbed40f 100644 --- a/packages/vtable/src/event/listener/table-group.ts +++ b/packages/vtable/src/event/listener/table-group.ts @@ -26,10 +26,8 @@ import type { CheckBox, CheckboxAttributes } from '@visactor/vrender-components' export function bindTableGroupListener(eventManager: EventManager) { const table = eventManager.table; const stateManager = table.stateManager; - document.body.addEventListener('mousedown', e => { - console.log('body mousedown'); - }); - // 有被阻止冒泡的场景 就触发不到这里的事件了 + + // 有被阻止冒泡的场景 就触发不到这里的事件了 所以这个LastBodyPointerXY变量的赋值在scrollbar的down事件也进行了处理 document.body.addEventListener('pointerdown', e => { console.log('body pointerdown'); table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y }; From e84c0b3642b1b45de79c6cea38480aa0aef05949 Mon Sep 17 00:00:00 2001 From: fangsmile <892739385@qq.com> Date: Tue, 2 Jan 2024 10:54:54 +0800 Subject: [PATCH 3/5] fix: remove unused code --- packages/vtable/src/event/event.ts | 2 +- packages/vtable/src/event/listener/table-group.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/vtable/src/event/event.ts b/packages/vtable/src/event/event.ts index aa45e8751..a758b2b86 100644 --- a/packages/vtable/src/event/event.ts +++ b/packages/vtable/src/event/event.ts @@ -41,7 +41,7 @@ export class EventManager { gesture: Gesture; handleTextStickBindId: number; - //鼠标事件记录 + //鼠标事件记录。 PointerMove敏感度太高了 记录下上一个鼠标位置 在接收到PointerMove事件时做判断 是否到到触发框选或者移动表头操作的标准,防止误触 LastPointerXY: { x: number; y: number }; LastBodyPointerXY: { x: number; y: number }; isDown = false; diff --git a/packages/vtable/src/event/listener/table-group.ts b/packages/vtable/src/event/listener/table-group.ts index 62bbed40f..685f307d4 100644 --- a/packages/vtable/src/event/listener/table-group.ts +++ b/packages/vtable/src/event/listener/table-group.ts @@ -21,8 +21,6 @@ import type { IIconGraphicAttribute } from '../../scenegraph/graphic/icon'; import { getCellMergeInfo } from '../../scenegraph/utils/get-cell-merge'; import type { CheckBox, CheckboxAttributes } from '@visactor/vrender-components'; -// PointerMove敏感度太高了 记录下上一个鼠标位置 在接收到PointerMove事件时做判断 是否到到触发框选或者移动表头操作的标准,防止误触 - export function bindTableGroupListener(eventManager: EventManager) { const table = eventManager.table; const stateManager = table.stateManager; From 26216bbfc7c50236e531934792b7e896b6351a86 Mon Sep 17 00:00:00 2001 From: Rui-Sun Date: Tue, 2 Jan 2024 15:16:48 +0800 Subject: [PATCH 4/5] fix: fix frozen chart cell active problem --- ...x-chart-right-frozen_2024-01-02-07-16.json | 10 +++++ .../vtable/src/scenegraph/graphic/chart.ts | 44 ++++++++++++++++--- 2 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 common/changes/@visactor/vtable/fix-chart-right-frozen_2024-01-02-07-16.json diff --git a/common/changes/@visactor/vtable/fix-chart-right-frozen_2024-01-02-07-16.json b/common/changes/@visactor/vtable/fix-chart-right-frozen_2024-01-02-07-16.json new file mode 100644 index 000000000..5bce251b0 --- /dev/null +++ b/common/changes/@visactor/vtable/fix-chart-right-frozen_2024-01-02-07-16.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@visactor/vtable", + "comment": "fix: fix frozen chart cell active problem ", + "type": "none" + } + ], + "packageName": "@visactor/vtable" +} \ No newline at end of file diff --git a/packages/vtable/src/scenegraph/graphic/chart.ts b/packages/vtable/src/scenegraph/graphic/chart.ts index ba53d9066..c79447c1f 100644 --- a/packages/vtable/src/scenegraph/graphic/chart.ts +++ b/packages/vtable/src/scenegraph/graphic/chart.ts @@ -81,18 +81,14 @@ export class Chart extends Group { */ activate(table: BaseTableAPI) { this.active = true; + const { col, row } = this.parent; // this.chart = new TestChart(this.attribute.spec); // const ctx = this.attribute.canvas.getContext('2d'); // const { x1, y1, x2, y2 } = this.attribute.viewBox; const { x1, y1, x2, y2 } = this.getViewBox(); //获取渲染区域的bound 考虑被表头遮住部分的情况 - const tableBound = table.scenegraph.tableGroup.globalAABBBounds; - const bodyBound = new Bounds(); - bodyBound.x1 = tableBound.x1 + table.getFrozenColsWidth(); - bodyBound.x2 = tableBound.x2 - table.getRightFrozenColsWidth(); - bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight(); - bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight(); - const clipBound = bodyBound.intersect({ + const tableBound = getTableBounds(col, row, table); + const clipBound = tableBound.intersect({ x1: x1 - table.scrollLeft, x2: x2 - table.scrollLeft, y1: y1 - table.scrollTop, @@ -189,3 +185,37 @@ export class Chart extends Group { }; } } + +function getTableBounds(col: number, row: number, table: BaseTableAPI) { + const { layoutMap } = table.internalProps; + const bodyBound = new Bounds(); + const tableBound = table.scenegraph.tableGroup.globalAABBBounds; + bodyBound.x1 = tableBound.x1; + bodyBound.x2 = tableBound.x2; + bodyBound.y1 = tableBound.y1; + bodyBound.y2 = tableBound.y2; + + if (!layoutMap.isFrozenColumn(col, row) && !layoutMap.isRightFrozenColumn(col, row)) { + // no frozen body + bodyBound.x1 = tableBound.x1 + table.getFrozenColsWidth(); + bodyBound.x2 = tableBound.x2 - table.getRightFrozenColsWidth(); + bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight(); + bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight(); + } else if (layoutMap.isLeftBottomCorner(col, row) || layoutMap.isRightTopCorner(col, row)) { + // frozen cornor + } else if (layoutMap.isFrozenColumn(col, row)) { + // left frozen + bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight(); + bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight(); + } else if (layoutMap.isRightFrozenColumn(col, row)) { + // right frozen + bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight(); + bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight(); + } else if (layoutMap.isBottomFrozenRow(col, row)) { + // bottom frozen + bodyBound.x1 = tableBound.x1 + table.getFrozenColsWidth(); + bodyBound.x2 = tableBound.x2 - table.getRightFrozenColsWidth(); + } + + return bodyBound; +} From 39bd608dc1a8315f397de45dbbca733c416590d4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 2 Jan 2024 09:30:10 +0000 Subject: [PATCH 5/5] build: prelease version 0.17.4 --- .../fix-chart-right-frozen_2024-01-02-07-16.json | 10 ---------- common/config/rush/version-policies.json | 2 +- packages/react-vtable/package.json | 2 +- packages/vtable-editors/package.json | 2 +- packages/vtable-export/package.json | 2 +- packages/vtable/CHANGELOG.json | 12 ++++++++++++ packages/vtable/CHANGELOG.md | 9 ++++++++- packages/vtable/package.json | 2 +- 8 files changed, 25 insertions(+), 16 deletions(-) delete mode 100644 common/changes/@visactor/vtable/fix-chart-right-frozen_2024-01-02-07-16.json diff --git a/common/changes/@visactor/vtable/fix-chart-right-frozen_2024-01-02-07-16.json b/common/changes/@visactor/vtable/fix-chart-right-frozen_2024-01-02-07-16.json deleted file mode 100644 index 5bce251b0..000000000 --- a/common/changes/@visactor/vtable/fix-chart-right-frozen_2024-01-02-07-16.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vtable", - "comment": "fix: fix frozen chart cell active problem ", - "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 42001ccbc..b7a15804f 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -1 +1 @@ -[{"definitionName":"lockStepVersion","policyName":"vtableMain","version":"0.17.3","mainProject":"@visactor/vtable","nextBump":"patch"}] +[{"definitionName":"lockStepVersion","policyName":"vtableMain","version":"0.17.4","mainProject":"@visactor/vtable","nextBump":"patch"}] diff --git a/packages/react-vtable/package.json b/packages/react-vtable/package.json index 5733759e5..4fa80866f 100644 --- a/packages/react-vtable/package.json +++ b/packages/react-vtable/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/react-vtable", - "version": "0.17.3", + "version": "0.17.4", "description": "The react version of VTable", "keywords": [ "react", diff --git a/packages/vtable-editors/package.json b/packages/vtable-editors/package.json index ff340c683..a1aad247b 100644 --- a/packages/vtable-editors/package.json +++ b/packages/vtable-editors/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable-editors", - "version": "0.17.3", + "version": "0.17.4", "description": "", "sideEffects": false, "main": "cjs/index.js", diff --git a/packages/vtable-export/package.json b/packages/vtable-export/package.json index f62a6ac76..ae93e09f0 100644 --- a/packages/vtable-export/package.json +++ b/packages/vtable-export/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable-export", - "version": "0.17.3", + "version": "0.17.4", "description": "The export util of VTable", "author": { "name": "VisActor", diff --git a/packages/vtable/CHANGELOG.json b/packages/vtable/CHANGELOG.json index a2396c53d..85879786e 100644 --- a/packages/vtable/CHANGELOG.json +++ b/packages/vtable/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@visactor/vtable", "entries": [ + { + "version": "0.17.4", + "tag": "@visactor/vtable_v0.17.4", + "date": "Tue, 02 Jan 2024 09:23:54 GMT", + "comments": { + "none": [ + { + "comment": "fix: fix frozen chart cell active problem " + } + ] + } + }, { "version": "0.17.3", "tag": "@visactor/vtable_v0.17.3", diff --git a/packages/vtable/CHANGELOG.md b/packages/vtable/CHANGELOG.md index ef89a4e4f..468c5a774 100644 --- a/packages/vtable/CHANGELOG.md +++ b/packages/vtable/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @visactor/vtable -This log was last generated on Fri, 29 Dec 2023 12:31:07 GMT and should not be manually modified. +This log was last generated on Tue, 02 Jan 2024 09:23:54 GMT and should not be manually modified. + +## 0.17.4 +Tue, 02 Jan 2024 09:23:54 GMT + +### Updates + +- fix: fix frozen chart cell active problem ## 0.17.3 Fri, 29 Dec 2023 12:31:07 GMT diff --git a/packages/vtable/package.json b/packages/vtable/package.json index f9717d36b..3c5839353 100644 --- a/packages/vtable/package.json +++ b/packages/vtable/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vtable", - "version": "0.17.3", + "version": "0.17.4", "description": "canvas table width high performance", "keywords": [ "grid",