From 906c46cd3e670153ce8c56717c01d721361051e1 Mon Sep 17 00:00:00 2001 From: fangsmile <892739385@qq.com> Date: Mon, 18 Nov 2024 15:07:50 +0800 Subject: [PATCH] fix: add isValidatingValue state to fix call validateValue api repeatedly #2830 --- packages/vtable/src/edit/edit-manager.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/vtable/src/edit/edit-manager.ts b/packages/vtable/src/edit/edit-manager.ts index a801db35b..7a73d4891 100644 --- a/packages/vtable/src/edit/edit-manager.ts +++ b/packages/vtable/src/edit/edit-manager.ts @@ -10,6 +10,7 @@ import { isValid } from '@visactor/vutils'; export class EditManeger { table: BaseTableAPI; editingEditor: IEditor; + isValidatingValue: boolean = false; editCell: { col: number; row: number }; constructor(table: BaseTableAPI) { @@ -121,7 +122,9 @@ export class EditManeger { if (!this.editingEditor) { return true; } - + if (this.isValidatingValue) { + return false; + } const target = e?.target as HTMLElement | undefined; const { editingEditor: editor } = this; @@ -141,6 +144,7 @@ export class EditManeger { console.warn('VTable Warn: `getValue` is not provided, did you forget to implement it?'); } if (this.editingEditor.validateValue) { + this.isValidatingValue = true; const maybePromiseOrValue = this.editingEditor.validateValue?.(); if (isPromise(maybePromiseOrValue)) { return new Promise((resolve, reject) => { @@ -150,10 +154,12 @@ export class EditManeger { this.doExit(); resolve(true); } else { + this.isValidatingValue = false; resolve(false); } }) .catch((err: Error) => { + this.isValidatingValue = false; console.error('VTable Error:', err); reject(err); }); @@ -184,6 +190,7 @@ export class EditManeger { this.editingEditor.exit?.(); this.editingEditor.onEnd?.(); this.editingEditor = null; + this.isValidatingValue = false; } cancelEdit() {