Skip to content

Commit 4eefb01

Browse files
committed
Merge remote-tracking branch 'origin/develop' into fix/gantt-secondsUnit-parse
2 parents c4b9082 + 2bfc78d commit 4eefb01

28 files changed

Lines changed: 955 additions & 456 deletions
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@visactor/vtable",
5+
"comment": "fix: toggleSelectAll only in searched item. fix#4838",
6+
"type": "none"
7+
}
8+
],
9+
"packageName": "@visactor/vtable"
10+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"changes": [
3+
{
4+
"comment": "Revert \"feat: vtable mcp cli and server\"\n\nThis reverts commit f0a179f7c7e277ee6179b96096f6fc71b1678e88.\n\n",
5+
"type": "none",
6+
"packageName": "@visactor/vtable"
7+
}
8+
],
9+
"packageName": "@visactor/vtable",
10+
"email": "892739385@qq.com"
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"changes": [
3+
{
4+
"comment": "fix: pivot chart no left axis case\n\n",
5+
"type": "none",
6+
"packageName": "@visactor/vtable"
7+
}
8+
],
9+
"packageName": "@visactor/vtable",
10+
"email": "892739385@qq.com"
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"changes": [
3+
{
4+
"comment": "fix: show dimension tooltip delay logic error\n\n",
5+
"type": "none",
6+
"packageName": "@visactor/vtable"
7+
}
8+
],
9+
"packageName": "@visactor/vtable",
10+
"email": "892739385@qq.com"
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"changes": [
3+
{
4+
"comment": "refactor: when set editCellTrigger keydown input chinese first letter problem #4847\n\n",
5+
"type": "none",
6+
"packageName": "@visactor/vtable"
7+
}
8+
],
9+
"packageName": "@visactor/vtable",
10+
"email": "892739385@qq.com"
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"changes": [
3+
{
4+
"comment": "fix: editor support keydown chinese #4847\n\n",
5+
"type": "none",
6+
"packageName": "@visactor/vtable"
7+
}
8+
],
9+
"packageName": "@visactor/vtable",
10+
"email": "892739385@qq.com"
11+
}

packages/vtable-editors/src/input-editor.ts

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { CellAddress, EditContext, IEditor, RectProps } from './types';
1+
import type { CellAddress, EditContext, IEditor, PrepareEditContext, RectProps } from './types';
22
import type { ValidateEnum } from './types';
33

44
export interface InputEditorConfig {
@@ -14,10 +14,12 @@ export class InputEditor implements IEditor {
1414
table?: any;
1515
col?: number;
1616
row?: number;
17-
1817
constructor(editorConfig?: InputEditorConfig) {
1918
this.editorConfig = editorConfig;
2019
}
20+
getInputElement(): HTMLInputElement {
21+
return this.element;
22+
}
2123

2224
createElement() {
2325
const input = document.createElement('input');
@@ -40,9 +42,15 @@ export class InputEditor implements IEditor {
4042
input.style.outline = 'none';
4143
});
4244

43-
input.addEventListener('blur', () => {
45+
input.addEventListener('blur', e => {
4446
input.style.borderColor = '#d9d9d9';
4547
// input.style.boxShadow = 'none';
48+
if (this.table && this.element.style.opacity === '0') {
49+
const selectCell = this.table.stateManager.select.cellPos;
50+
if (selectCell.col !== this.col || selectCell.row !== this.row) {
51+
this.onEnd();
52+
}
53+
}
4654
});
4755
// #endregion
4856
this.element = input;
@@ -69,7 +77,31 @@ export class InputEditor implements IEditor {
6977
getValue() {
7078
return this.element.value;
7179
}
72-
80+
/**
81+
* 如果表格编辑时机配置editCellTrigger为keydown,则需要调用prepareEdit来准备编辑环境,否则中文输入法第一个字符会被当做英文字符
82+
* @param param0
83+
*/
84+
prepareEdit({ referencePosition, container, table, col, row }: PrepareEditContext<string>) {
85+
this.container = container;
86+
this.table = table;
87+
this.col = col;
88+
this.row = row;
89+
const selectCell = this.table.stateManager.select.cellPos;
90+
if (selectCell.col !== this.col || selectCell.row !== this.row) {
91+
return;
92+
}
93+
if (!this.element) {
94+
this.createElement();
95+
}
96+
this.element.style.opacity = '0';
97+
//这个pointerEvents = 'none'很重要,如果没有的话会引起vtable.getElement()元素和这里的element元素的focus和blur的切换,
98+
//也会引起mouseleave_table mouseleave_cell和mouseenter的切换
99+
this.element.style.pointerEvents = 'none';
100+
if (referencePosition?.rect) {
101+
this.adjustPosition(referencePosition.rect);
102+
}
103+
this.element.focus();
104+
}
73105
onStart({ value, referencePosition, container, endEdit, table, col, row }: EditContext<string>) {
74106
this.container = container;
75107
this.successCallback = endEdit;
@@ -78,14 +110,16 @@ export class InputEditor implements IEditor {
78110
this.row = row;
79111
if (!this.element) {
80112
this.createElement();
81-
82-
if (value !== undefined && value !== null) {
83-
this.setValue(value);
84-
}
85113
if (referencePosition?.rect) {
86114
this.adjustPosition(referencePosition.rect);
87115
}
88116
}
117+
if (value !== undefined && value !== null) {
118+
this.setValue(value);
119+
}
120+
//防止调用过prepareEdit 后,元素的显示和可操作性被影响
121+
this.element.style.opacity = '1';
122+
this.element.style.pointerEvents = 'auto';
89123
this.element.focus();
90124
// do nothing
91125
}
@@ -112,8 +146,8 @@ export class InputEditor implements IEditor {
112146
// do nothing
113147
if (this.container?.contains(this.element)) {
114148
this.container.removeChild(this.element);
149+
this.element = undefined;
115150
}
116-
this.element = undefined;
117151
}
118152

119153
isEditorElement(target: HTMLElement) {

packages/vtable-editors/src/types.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export interface IEditor<V = any, T = any> {
1717
*/
1818
onEnd: () => void;
1919
getInputElement?: () => HTMLElement;
20+
setElement?: (element: HTMLInputElement) => void;
2021
/**
2122
* Called when user click somewhere while editor is in edit mode.
2223
*
@@ -46,6 +47,11 @@ export interface IEditor<V = any, T = any> {
4647
* Expected to return the current value of the cell.
4748
*/
4849
getValue: () => V;
50+
/**
51+
* If the table editing trigger is configured as keydown, you need to call prepareEdit to prepare the editing environment, otherwise the first character of the Chinese input method will be treated as an English character.
52+
* @param param0
53+
*/
54+
prepareEdit?: (context: PrepareEditContext<V, T>) => void;
4955
/**
5056
* Called when cell enter edit mode.
5157
* @deprecated use `onStart` instead.
@@ -68,6 +74,7 @@ export interface IEditor<V = any, T = any> {
6874
* @deprecated callback is provided as `endEdit` in `EditContext`, use `onStart` instead.
6975
*/
7076
bindSuccessCallback?: (callback: () => void) => void;
77+
adjustPosition?: (rect: RectProps) => void;
7178
}
7279

7380
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -96,6 +103,13 @@ export interface EditContext<V = any, T = any> {
96103
row: number;
97104
}
98105

106+
export interface PrepareEditContext<V = any, T = any> {
107+
container: HTMLElement;
108+
table: T;
109+
col: number;
110+
row: number;
111+
referencePosition: ReferencePosition;
112+
}
99113
export interface RectProps {
100114
left: number;
101115
top: number;

0 commit comments

Comments
 (0)