@flowgram.ai/form 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -46,6 +46,16 @@ function shallowSetIn(obj, path, value) {
46
46
  }
47
47
  return res;
48
48
  }
49
+ function keepValidKeys(obj, validKeys) {
50
+ const validKeysSet = new Set(validKeys);
51
+ const newObj = {};
52
+ Object.keys(obj).forEach((key) => {
53
+ if (validKeysSet.has(key)) {
54
+ newObj[key] = obj[key];
55
+ }
56
+ });
57
+ return newObj;
58
+ }
49
59
 
50
60
  // src/utils/dom.ts
51
61
  function isReactChangeEvent(e) {
@@ -463,6 +473,9 @@ function toForm(model) {
463
473
  get values() {
464
474
  return model.values;
465
475
  },
476
+ set values(v) {
477
+ model.values = v;
478
+ },
466
479
  state: toFormState(model.state),
467
480
  getValueIn: (name) => model.getValueIn(name),
468
481
  setValueIn: (name, value) => model.setValueIn(name, value)
@@ -563,7 +576,8 @@ function Field({
563
576
  if (fieldModel.renderCount > 1) {
564
577
  fieldModel.renderCount = fieldModel.renderCount - 1;
565
578
  } else {
566
- fieldModel.dispose();
579
+ const newFieldModel = formModel.getField(fieldModel.name);
580
+ if (newFieldModel === fieldModel) fieldModel.dispose();
567
581
  }
568
582
  };
569
583
  }, [fieldModel]);
@@ -679,6 +693,9 @@ var Store = class {
679
693
  get values() {
680
694
  return this._values;
681
695
  }
696
+ set values(v) {
697
+ this._values = v;
698
+ }
682
699
  setInitialValues(values) {
683
700
  this._values = values;
684
701
  }
@@ -1080,6 +1097,7 @@ var FieldArrayModel = class extends FieldModel {
1080
1097
  f.dispose();
1081
1098
  });
1082
1099
  this.form.fieldMap = newFieldMap;
1100
+ this.form.alignStateWithFieldMap();
1083
1101
  }
1084
1102
  swap(from, to) {
1085
1103
  if (!this.value) {
@@ -1155,6 +1173,15 @@ var FormModel = class {
1155
1173
  get values() {
1156
1174
  return cloneDeep(this.store.values) || cloneDeep(this.initialValues);
1157
1175
  }
1176
+ set values(v) {
1177
+ const prevValues = this.values;
1178
+ this.store.values = v;
1179
+ this.fireOnFormValuesChange({
1180
+ values: this.values,
1181
+ prevValues,
1182
+ name: ""
1183
+ });
1184
+ }
1158
1185
  get validationTrigger() {
1159
1186
  return this._options.validateTrigger;
1160
1187
  }
@@ -1317,6 +1344,23 @@ var FormModel = class {
1317
1344
  this.onValidateEmitter.fire(this.state);
1318
1345
  return flatten2(feedbacksArr).filter(Boolean);
1319
1346
  }
1347
+ alignStateWithFieldMap() {
1348
+ const keys = Array.from(this.fieldMap.keys());
1349
+ if (this.state.errors) {
1350
+ this.state.errors = keepValidKeys(this.state.errors, keys);
1351
+ }
1352
+ if (this.state.warnings) {
1353
+ this.state.warnings = keepValidKeys(this.state.warnings, keys);
1354
+ }
1355
+ this.fieldMap.forEach((f) => {
1356
+ if (f.state.errors) {
1357
+ f.state.errors = keepValidKeys(f.state.errors, keys);
1358
+ }
1359
+ if (f.state.warnings) {
1360
+ f.state.warnings = keepValidKeys(f.state.warnings, keys);
1361
+ }
1362
+ });
1363
+ }
1320
1364
  dispose() {
1321
1365
  this.fieldMap.forEach((f) => f.dispose());
1322
1366
  this.store.dispose();
@@ -1442,7 +1486,8 @@ function FieldArray({
1442
1486
  if (fieldModel.renderCount > 1) {
1443
1487
  fieldModel.renderCount = fieldModel.renderCount - 1;
1444
1488
  } else {
1445
- fieldModel.dispose();
1489
+ const newFieldModel = formModel.getField(fieldModel.name);
1490
+ if (newFieldModel === fieldModel) fieldModel.dispose();
1446
1491
  }
1447
1492
  };
1448
1493
  }, [fieldModel]);