mobx-react-hook-form 4.0.2 → 5.1.0

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.
@@ -0,0 +1,7 @@
1
+ import { AnyObject } from 'yummies/utils/types';
2
+ export declare class DeepObservableStruct<TData extends AnyObject> {
3
+ data: TData;
4
+ constructor(data: TData);
5
+ set(newData: Partial<TData>): void;
6
+ }
7
+ //# sourceMappingURL=deep-observable-struct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-observable-struct.d.ts","sourceRoot":"","sources":["../../src/mobx-form/deep-observable-struct.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qBAAa,oBAAoB,CAAC,KAAK,SAAS,SAAS;IACvD,IAAI,EAAE,KAAK,CAAC;gBAEA,IAAI,EAAE,KAAK;IASvB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC;CAoD5B"}
@@ -0,0 +1,59 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
2
+ /* eslint-disable no-prototype-builtins */
3
+ /* eslint-disable sonarjs/cognitive-complexity */
4
+ import { action, makeObservable, observable, toJS } from 'mobx';
5
+ import { typeGuard } from 'yummies/type-guard';
6
+ export class DeepObservableStruct {
7
+ data;
8
+ constructor(data) {
9
+ this.data = data;
10
+ makeObservable(this, {
11
+ data: observable.deep,
12
+ set: action,
13
+ });
14
+ }
15
+ set(newData) {
16
+ const currentData = toJS(this.data);
17
+ const stack = Object.keys(currentData).map((it) => ({
18
+ key: it,
19
+ currObservable: this.data,
20
+ curr: currentData,
21
+ new: newData,
22
+ }));
23
+ while (stack.length > 0) {
24
+ const item = stack.shift();
25
+ const newValue = item.new[item.key];
26
+ const currValue = item.curr[item.key];
27
+ if (item.key in item.new) {
28
+ if (typeGuard.isObject(newValue) && typeGuard.isObject(currValue)) {
29
+ const newValueKeys = Object.keys(newValue);
30
+ Object.keys(currValue).forEach((key) => {
31
+ if (!(key in newValue)) {
32
+ delete item.currObservable[item.key][key];
33
+ }
34
+ });
35
+ newValueKeys.forEach((key) => {
36
+ stack.push({
37
+ key,
38
+ currObservable: item.currObservable[item.key],
39
+ curr: currValue,
40
+ new: newValue,
41
+ });
42
+ });
43
+ }
44
+ else if (newValue !== currValue) {
45
+ item.currObservable[item.key] = newValue;
46
+ }
47
+ }
48
+ else {
49
+ delete item.currObservable[item.key];
50
+ }
51
+ }
52
+ Object.keys(newData).forEach((newDataKey) => {
53
+ if (!currentData[newDataKey]) {
54
+ // @ts-ignore
55
+ this.data[newDataKey] = newData[newDataKey];
56
+ }
57
+ });
58
+ }
59
+ }
@@ -252,12 +252,17 @@ export declare class Form<TFieldValues extends FieldValues = FieldValues, TConte
252
252
  */
253
253
  resetForm: UseFormReset<TFieldValues>;
254
254
  protected abortController: AbortController;
255
- protected lastRafId: number | undefined;
256
255
  /**
257
256
  * Original react-hook-form form
258
257
  */
259
258
  originalForm: ReturnType<typeof createFormControl<TFieldValues, TContext, TTransformedValues>>;
259
+ private _observableStruct;
260
260
  constructor(config: FormParams<TFieldValues, TContext, TTransformedValues>);
261
+ /**
262
+ * The same as setValue, but will trigger validation if form was submitted
263
+ * It should work the same as field.onChange from react-hook-form's Controller
264
+ */
265
+ changeField: UseFormSetValue<TFieldValues>;
261
266
  /**
262
267
  * Method to manually submit form.
263
268
  * Used to attach this method to <form /> element
@@ -277,6 +282,10 @@ export declare class Form<TFieldValues extends FieldValues = FieldValues, TConte
277
282
  */
278
283
  reset(e?: BaseSyntheticEvent): void;
279
284
  private updateFormState;
285
+ protected lastRafId: number | undefined;
286
+ protected lastTimeoutId: number | undefined;
287
+ private stopScheduledFormStateUpdate;
288
+ private scheduleUpdateFormState;
280
289
  destroy(): void;
281
290
  }
282
291
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mobx-form.d.ts","sourceRoot":"","sources":["../../src/mobx-form/mobx-form.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mobx-form.d.ts","sourceRoot":"","sources":["../../src/mobx-form/mobx-form.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  /* eslint-disable @typescript-eslint/ban-ts-comment */
2
2
  import { LinkedAbortController } from 'linked-abort-controller';
3
- import { action, comparer, isObservableObject, makeObservable, observable, toJS, } from 'mobx';
3
+ import { action, isObservableObject, makeObservable, observable, toJS, } from 'mobx';
4
4
  import { createFormControl, get, set, } from 'react-hook-form';
5
+ import { DeepObservableStruct } from './deep-observable-struct.js';
5
6
  export class Form {
6
7
  config;
7
8
  values;
@@ -19,10 +20,10 @@ export class Form {
19
20
  * Use {resetForm} method
20
21
  */
21
22
  defaultValues;
22
- dirtyFields = {};
23
- touchedFields = {};
24
- validatingFields = {};
25
- errors = {};
23
+ dirtyFields;
24
+ touchedFields;
25
+ validatingFields;
26
+ errors;
26
27
  isReady = false;
27
28
  /**
28
29
  * Set an error for the field. When set an error which is not associated to a field then manual `clearErrors` invoke is required.
@@ -250,11 +251,11 @@ export class Form {
250
251
  */
251
252
  resetForm;
252
253
  abortController;
253
- lastRafId;
254
254
  /**
255
255
  * Original react-hook-form form
256
256
  */
257
257
  originalForm;
258
+ _observableStruct;
258
259
  constructor(config) {
259
260
  this.config = config;
260
261
  this.abortController = new LinkedAbortController(config.abortSignal);
@@ -294,8 +295,19 @@ export class Form {
294
295
  this.values = defaultValues;
295
296
  return this.originalForm.reset(...args);
296
297
  });
297
- Object.assign(this, {
298
+ this._observableStruct = new DeepObservableStruct({
298
299
  values: this.originalForm.getValues(),
300
+ errors: {},
301
+ dirtyFields: {},
302
+ touchedFields: {},
303
+ validatingFields: {},
304
+ });
305
+ this.values = this._observableStruct.data.values;
306
+ this.errors = this._observableStruct.data.errors;
307
+ this.validatingFields = this._observableStruct.data.validatingFields;
308
+ this.dirtyFields = this._observableStruct.data.dirtyFields;
309
+ this.touchedFields = this._observableStruct.data.touchedFields;
310
+ Object.assign(this, {
299
311
  defaultValues,
300
312
  });
301
313
  const subscription = this.originalForm.subscribe({
@@ -314,18 +326,10 @@ export class Form {
314
326
  this.updateFormState(rawFormState);
315
327
  }
316
328
  else {
317
- if (this.lastRafId !== undefined) {
318
- cancelAnimationFrame(this.lastRafId);
319
- this.lastRafId = undefined;
320
- }
321
- this.lastRafId = requestAnimationFrame(() => {
322
- this.updateFormState(rawFormState);
323
- this.lastRafId = undefined;
324
- });
329
+ this.scheduleUpdateFormState(rawFormState);
325
330
  }
326
331
  },
327
332
  });
328
- observable.deep(this, 'values');
329
333
  observable.ref(this, 'isDirty');
330
334
  observable.ref(this, 'isLoading');
331
335
  observable.ref(this, 'isSubmitted');
@@ -337,10 +341,6 @@ export class Form {
337
341
  observable.ref(this, 'submitCount');
338
342
  observable.ref(this, 'isReady');
339
343
  observable.deep(this, 'defaultValues');
340
- observable.deep(this, 'dirtyFields');
341
- observable.deep(this, 'touchedFields');
342
- observable.deep(this, 'validatingFields');
343
- observable.deep(this, 'errors');
344
344
  action(this, 'updateFormState');
345
345
  observable.ref(this, 'originalForm');
346
346
  action.bound(this, 'submit');
@@ -354,6 +354,16 @@ export class Form {
354
354
  this.data = null;
355
355
  });
356
356
  }
357
+ /**
358
+ * The same as setValue, but will trigger validation if form was submitted
359
+ * It should work the same as field.onChange from react-hook-form's Controller
360
+ */
361
+ changeField = (name, value, opts) => {
362
+ this.setValue(name, value, {
363
+ ...opts,
364
+ shouldValidate: opts?.shouldValidate ?? this.isSubmitted,
365
+ });
366
+ };
357
367
  /**
358
368
  * Method to manually submit form.
359
369
  * Used to attach this method to <form /> element
@@ -385,45 +395,46 @@ export class Form {
385
395
  this.resetForm();
386
396
  this.config.onReset?.(e);
387
397
  }
388
- updateFormState({ values, errors, ...simpleProperties }) {
398
+ updateFormState({ values, errors, dirtyFields, validatingFields, touchedFields, ...simpleProperties }) {
389
399
  Object.entries(simpleProperties).forEach(([key, value]) => {
390
400
  if (value != null) {
391
401
  // @ts-ignore
392
402
  this[key] = value;
393
403
  }
394
404
  });
395
- if (errors) {
396
- const currentErrorsSet = new Set(Object.keys(this.errors));
397
- const newErrors = Object.keys(errors);
398
- for (const errorField of newErrors) {
399
- if (currentErrorsSet.has(errorField)) {
400
- currentErrorsSet.delete(errorField);
401
- if (!comparer.structural(this.errors[errorField], errors[errorField])) {
402
- // @ts-ignore
403
- Object.assign(this.errors[errorField], errors[errorField]);
404
- }
405
- }
406
- else {
407
- // @ts-ignore
408
- this.errors[errorField] = errors[errorField];
409
- }
410
- }
411
- currentErrorsSet.forEach((errorField) => {
412
- // @ts-ignore
413
- delete this.errors[errorField];
414
- });
415
- }
416
- else {
417
- this.errors = {};
418
- }
419
- // @ts-ignore
420
- this.values = values ?? {};
405
+ this._observableStruct.set({
406
+ dirtyFields,
407
+ errors,
408
+ touchedFields,
409
+ validatingFields,
410
+ values,
411
+ });
421
412
  }
422
- destroy() {
423
- this.abortController.abort();
413
+ lastRafId;
414
+ lastTimeoutId;
415
+ stopScheduledFormStateUpdate = () => {
424
416
  if (this.lastRafId !== undefined) {
425
417
  cancelAnimationFrame(this.lastRafId);
418
+ this.lastRafId = undefined;
419
+ }
420
+ if (this.lastTimeoutId !== undefined) {
421
+ clearTimeout(this.lastTimeoutId);
422
+ this.lastTimeoutId = undefined;
426
423
  }
424
+ };
425
+ scheduleUpdateFormState = (rawFormState) => {
426
+ this.stopScheduledFormStateUpdate();
427
+ this.lastTimeoutId = setTimeout(() => {
428
+ this.lastRafId = requestAnimationFrame(() => {
429
+ this.updateFormState(rawFormState);
430
+ this.lastTimeoutId = undefined;
431
+ this.lastRafId = undefined;
432
+ });
433
+ }, this.config.lazyUpdatesTimer ?? 0);
434
+ };
435
+ destroy() {
436
+ this.abortController.abort();
437
+ this.stopScheduledFormStateUpdate();
427
438
  }
428
439
  }
429
440
  /**
@@ -30,10 +30,15 @@ export interface FormParams<TFieldValues extends FieldValues = FieldValues, TCon
30
30
  */
31
31
  onReset?: (event: any) => void;
32
32
  /**
33
- * lazy mobx form state updates using requestAnimationFrame
34
- * @default - {true}
33
+ * lazy mobx form state updates using setTimeout
34
+ * @defaults `true`
35
35
  */
36
36
  lazyUpdates?: boolean;
37
+ /**
38
+ * lazy mobx form state updates timer in ms
39
+ * @defaults `0`
40
+ */
41
+ lazyUpdatesTimer?: number;
37
42
  }
38
43
  /**
39
44
  * @deprecated ⚠️ use `FormParams`. This export will be removed in next major release
@@ -1 +1 @@
1
- {"version":3,"file":"mobx-form.types.d.ts","sourceRoot":"","sources":["../../src/mobx-form/mobx-form.types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,YAAY,EACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1C;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,UAAU,CACzB,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,CACjC,SAAQ,IAAI,CACV,YAAY,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,EACxD,eAAe,CAChB;IACD;;OAEG;IACH,aAAa,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IAC1C;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC7C;;OAEG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAClD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CACxB,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,IAC/B,UAAU,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAE3D,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,OAAO,IAAI,OAAO,CAC7D,CAAC,CAAC,QAAQ,CAAC,EACX,SAAS,GAAG,IAAI,CACjB,CAAC;AAEF,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,OAAO,IACxD,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC,GAC9C,kBAAkB,GAClB,KAAK,CAAC"}
1
+ {"version":3,"file":"mobx-form.types.d.ts","sourceRoot":"","sources":["../../src/mobx-form/mobx-form.types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,YAAY,EACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1C;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,UAAU,CACzB,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,CACjC,SAAQ,IAAI,CACV,YAAY,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,EACxD,eAAe,CAChB;IACD;;OAEG;IACH,aAAa,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IAC1C;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC7C;;OAEG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAClD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CACxB,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,IAC/B,UAAU,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAE3D,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,OAAO,IAAI,OAAO,CAC7D,CAAC,CAAC,QAAQ,CAAC,EACX,SAAS,GAAG,IAAI,CACjB,CAAC;AAEF,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,OAAO,IACxD,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC,GAC9C,kBAAkB,GAClB,KAAK,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobx-react-hook-form",
3
- "version": "4.0.2",
3
+ "version": "5.1.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "keywords": [],
@@ -52,6 +52,11 @@
52
52
  "default": "./index.js",
53
53
  "types": "./index.d.ts"
54
54
  },
55
+ "./mobx-form/deep-observable-struct": {
56
+ "import": "./mobx-form/deep-observable-struct.js",
57
+ "default": "./mobx-form/deep-observable-struct.js",
58
+ "types": "./mobx-form/deep-observable-struct.d.ts"
59
+ },
55
60
  "./mobx-form": {
56
61
  "import": "./mobx-form/index.js",
57
62
  "default": "./mobx-form/index.js",