Kaynağa Gözat

fix(form): effect return map share same instance (#263)

Yiwei Mao 7 ay önce
ebeveyn
işleme
102980a23b
1 değiştirilmiş dosya ile 17 ekleme ve 15 silme
  1. 17 15
      packages/node-engine/node/src/form-model-v2.ts

+ 17 - 15
packages/node-engine/node/src/form-model-v2.ts

@@ -44,29 +44,31 @@ import { renderForm } from './form-render';
 import { FormPlugin } from './form-plugin';
 
 const DEFAULT = {
-  EFFECT_MAP: {},
-  EFFECT_RETURN_MAP: new Map([
-    [DataEvent.onValueInitOrChange, {}],
-    [DataEvent.onValueChange, {}],
-    [DataEvent.onValueInit, {}],
-    [DataEvent.onArrayAppend, {}],
-    [DataEvent.onArrayDelete, {}],
-  ]),
-  FORM_FEEDBACKS: [],
+  // Different formModel should have different reference
+  EFFECT_MAP: () => ({}),
+  EFFECT_RETURN_MAP: () =>
+    new Map([
+      [DataEvent.onValueInitOrChange, {}],
+      [DataEvent.onValueChange, {}],
+      [DataEvent.onValueInit, {}],
+      [DataEvent.onArrayAppend, {}],
+      [DataEvent.onArrayDelete, {}],
+    ]),
+  FORM_FEEDBACKS: () => [],
   VALID: null,
 };
 
 export class FormModelV2 extends FormModel implements Disposable {
-  protected effectMap: Record<string, EffectOptions[]> = DEFAULT.EFFECT_MAP;
+  protected effectMap: Record<string, EffectOptions[]> = DEFAULT.EFFECT_MAP();
 
   protected effectReturnMap: Map<DataEvent, Record<string, EffectReturn>> =
-    DEFAULT.EFFECT_RETURN_MAP;
+    DEFAULT.EFFECT_RETURN_MAP();
 
   protected plugins: FormPlugin[] = [];
 
   protected node: FlowNodeEntity;
 
-  protected formFeedbacks: FormValidateReturn | undefined = DEFAULT.FORM_FEEDBACKS;
+  protected formFeedbacks: FormValidateReturn | undefined = DEFAULT.FORM_FEEDBACKS();
 
   protected onInitializedEmitter = new Emitter<FormModel>();
 
@@ -522,8 +524,8 @@ export class FormModelV2 extends FormModel implements Disposable {
       });
     });
 
-    this.effectMap = DEFAULT.EFFECT_MAP;
-    this.effectReturnMap = DEFAULT.EFFECT_RETURN_MAP;
+    this.effectMap = DEFAULT.EFFECT_MAP();
+    this.effectReturnMap = DEFAULT.EFFECT_RETURN_MAP();
 
     this.plugins.forEach((p) => {
       p.dispose();
@@ -531,7 +533,7 @@ export class FormModelV2 extends FormModel implements Disposable {
 
     this.plugins = [];
 
-    this.formFeedbacks = DEFAULT.FORM_FEEDBACKS;
+    this.formFeedbacks = DEFAULT.FORM_FEEDBACKS();
     this._valid = DEFAULT.VALID;
 
     this._formControl = undefined;