solid-hook-form 2.1.0 → 2.3.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.
package/dist/main.d.ts CHANGED
@@ -67,6 +67,16 @@ type ControllerProps<F extends FormValues> = {
67
67
 
68
68
  type DirtyFields<F extends FormValues = FormValues> = Partial<Record<Path<F>, boolean>>;
69
69
 
70
+ type ResetOptions = {
71
+ keepErrors?: boolean;
72
+ keepValues?: boolean;
73
+ keepTouched?: boolean;
74
+ keepDirty?: boolean;
75
+ keepIsSubmitted?: boolean;
76
+ keepSubmitCount?: boolean;
77
+ };
78
+ type Reset<F extends FormValues> = (values?: Partial<F>, options?: ResetOptions) => void;
79
+
70
80
  type TouchedFields<F extends FormValues = FormValues> = Partial<Record<Path<F>, boolean>>;
71
81
 
72
82
  type FormValues = Record<string, any>;
@@ -87,11 +97,6 @@ type Trigger<F extends FormValues> = (name?: Path<F> | Path<F>[], options?: Trig
87
97
  type SubmitHandler<F extends FormValues> = (values: F) => void;
88
98
  type SubmitErrorHandler<F extends FormValues> = (errors: FieldErrors<F>) => void;
89
99
  type HandleSubmit<F extends FormValues> = (onSubmit: SubmitHandler<F>, onError?: SubmitErrorHandler<F>) => (event: SubmitEvent) => void;
90
- type ResetOptions = {
91
- keepTouched?: boolean;
92
- keepDirty?: boolean;
93
- };
94
- type Reset<F extends FormValues> = (newDefaultValues?: Partial<F>, options?: ResetOptions) => void;
95
100
  type CreateFormArg<F extends FormValues> = {
96
101
  defaultValues: F;
97
102
  mode?: "onChange" | "onSubmit" | "onBlur";
@@ -105,6 +110,8 @@ type CreateFormReturn<F extends FormValues = FormValues> = {
105
110
  isDirty: Accessor<boolean>;
106
111
  touchedFields: Accessor<TouchedFields<F>>;
107
112
  dirtyFields: Accessor<DirtyFields<F>>;
113
+ isSubmitted: Accessor<boolean>;
114
+ submitCount: Accessor<number>;
108
115
  };
109
116
  values: Accessor<F>;
110
117
  errors: FieldErrors<F>;
package/dist/main.js CHANGED
@@ -95,7 +95,10 @@ var createErrors = () => {
95
95
  })
96
96
  );
97
97
  };
98
- const resetErrors = () => {
98
+ const resetErrors = (keepErrors) => {
99
+ if (keepErrors) {
100
+ return;
101
+ }
99
102
  setErrors(reconcile({}));
100
103
  };
101
104
  return {
@@ -143,6 +146,23 @@ var createRules = () => {
143
146
  };
144
147
  return { rules, addRule, getRule };
145
148
  };
149
+ var createSubmit = () => {
150
+ const [isSubmitted, setIsSubmitted] = createSignal(false);
151
+ const [submitCount, setSubmitCount] = createSignal(0);
152
+ const logSubmit = () => {
153
+ setIsSubmitted(true);
154
+ setSubmitCount((prev) => prev + 1);
155
+ };
156
+ const resetSubmit = (keepIsSubmitted, keepSubmitCount) => {
157
+ if (!keepIsSubmitted) {
158
+ setIsSubmitted(false);
159
+ }
160
+ if (!keepSubmitCount) {
161
+ setSubmitCount(0);
162
+ }
163
+ };
164
+ return { isSubmitted, submitCount, logSubmit, resetSubmit };
165
+ };
146
166
  var createTouchedFields = () => {
147
167
  const [touchedFields, setTouchedFields] = createSignal({});
148
168
  const addTouched = (name) => {
@@ -280,6 +300,7 @@ var createForm = (arg) => {
280
300
  const { errors, appendError, removeError, resetErrors, getError } = createErrors();
281
301
  const { touchedFields, addTouched, resetTouched } = createTouchedFields();
282
302
  const { dirtyFields, isDirty, checkDirty, resetDirty } = createDirtyFields(defaultValues);
303
+ const { isSubmitted, submitCount, logSubmit, resetSubmit } = createSubmit();
283
304
  const isValid = createMemo(() => {
284
305
  return !Object.keys(errors).length;
285
306
  });
@@ -415,6 +436,7 @@ var createForm = (arg) => {
415
436
  const handleSubmit = (onSubmit, onError) => {
416
437
  return async (event) => {
417
438
  event.preventDefault();
439
+ logSubmit();
418
440
  await validateAllFields();
419
441
  if (isValid()) {
420
442
  onSubmit(getValues());
@@ -425,11 +447,15 @@ var createForm = (arg) => {
425
447
  };
426
448
  };
427
449
  const reset = (values2, options = {}) => {
428
- const newValues = values2 ? values2 : structuredClone(defaultValues);
429
- setValues(() => newValues);
430
- resetErrors();
450
+ resetSubmit(options.keepIsSubmitted, options.keepSubmitCount);
451
+ resetErrors(options.keepErrors);
431
452
  resetTouched(options.keepTouched);
432
453
  resetDirty(options.keepDirty);
454
+ if (options.keepValues) {
455
+ return;
456
+ }
457
+ const newValues = values2 ? values2 : structuredClone(defaultValues);
458
+ setValues(() => newValues);
433
459
  Object.entries(fields).forEach(([name, field]) => {
434
460
  setFieldValue(field, get(newValues, name));
435
461
  });
@@ -452,7 +478,9 @@ var createForm = (arg) => {
452
478
  isValid,
453
479
  isDirty,
454
480
  touchedFields,
455
- dirtyFields
481
+ dirtyFields,
482
+ isSubmitted,
483
+ submitCount
456
484
  },
457
485
  values,
458
486
  errors,
package/dist/main.jsx CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/create_form.ts
2
- import { createMemo as createMemo2, createSignal as createSignal3 } from "solid-js";
2
+ import { createMemo as createMemo2, createSignal as createSignal4 } from "solid-js";
3
3
 
4
4
  // src/logic/create_dirty_fields.ts
5
5
  import { createMemo, createSignal } from "solid-js";
@@ -98,7 +98,10 @@ var createErrors = () => {
98
98
  })
99
99
  );
100
100
  };
101
- const resetErrors = () => {
101
+ const resetErrors = (keepErrors) => {
102
+ if (keepErrors) {
103
+ return;
104
+ }
102
105
  setErrors(reconcile({}));
103
106
  };
104
107
  return {
@@ -147,10 +150,30 @@ var createRules = () => {
147
150
  return { rules, addRule, getRule };
148
151
  };
149
152
 
150
- // src/logic/create_touched_fields.ts
153
+ // src/logic/create_submit.ts
151
154
  import { createSignal as createSignal2 } from "solid-js";
155
+ var createSubmit = () => {
156
+ const [isSubmitted, setIsSubmitted] = createSignal2(false);
157
+ const [submitCount, setSubmitCount] = createSignal2(0);
158
+ const logSubmit = () => {
159
+ setIsSubmitted(true);
160
+ setSubmitCount((prev) => prev + 1);
161
+ };
162
+ const resetSubmit = (keepIsSubmitted, keepSubmitCount) => {
163
+ if (!keepIsSubmitted) {
164
+ setIsSubmitted(false);
165
+ }
166
+ if (!keepSubmitCount) {
167
+ setSubmitCount(0);
168
+ }
169
+ };
170
+ return { isSubmitted, submitCount, logSubmit, resetSubmit };
171
+ };
172
+
173
+ // src/logic/create_touched_fields.ts
174
+ import { createSignal as createSignal3 } from "solid-js";
152
175
  var createTouchedFields = () => {
153
- const [touchedFields, setTouchedFields] = createSignal2({});
176
+ const [touchedFields, setTouchedFields] = createSignal3({});
154
177
  const addTouched = (name) => {
155
178
  setTouchedFields((prev) => {
156
179
  const newState = { ...prev };
@@ -282,10 +305,11 @@ var createForm = (arg) => {
282
305
  const { defaultValues, mode = "onChange", resolver } = arg;
283
306
  const { fields, getField, setField } = createFields();
284
307
  const { rules, addRule, getRule } = createRules();
285
- const [values, setValues] = createSignal3(structuredClone(defaultValues));
308
+ const [values, setValues] = createSignal4(structuredClone(defaultValues));
286
309
  const { errors, appendError, removeError, resetErrors, getError } = createErrors();
287
310
  const { touchedFields, addTouched, resetTouched } = createTouchedFields();
288
311
  const { dirtyFields, isDirty, checkDirty, resetDirty } = createDirtyFields(defaultValues);
312
+ const { isSubmitted, submitCount, logSubmit, resetSubmit } = createSubmit();
289
313
  const isValid = createMemo2(() => {
290
314
  return !Object.keys(errors).length;
291
315
  });
@@ -421,6 +445,7 @@ var createForm = (arg) => {
421
445
  const handleSubmit = (onSubmit, onError) => {
422
446
  return async (event) => {
423
447
  event.preventDefault();
448
+ logSubmit();
424
449
  await validateAllFields();
425
450
  if (isValid()) {
426
451
  onSubmit(getValues());
@@ -431,11 +456,15 @@ var createForm = (arg) => {
431
456
  };
432
457
  };
433
458
  const reset = (values2, options = {}) => {
434
- const newValues = values2 ? values2 : structuredClone(defaultValues);
435
- setValues(() => newValues);
436
- resetErrors();
459
+ resetSubmit(options.keepIsSubmitted, options.keepSubmitCount);
460
+ resetErrors(options.keepErrors);
437
461
  resetTouched(options.keepTouched);
438
462
  resetDirty(options.keepDirty);
463
+ if (options.keepValues) {
464
+ return;
465
+ }
466
+ const newValues = values2 ? values2 : structuredClone(defaultValues);
467
+ setValues(() => newValues);
439
468
  Object.entries(fields).forEach(([name, field]) => {
440
469
  setFieldValue(field, get(newValues, name));
441
470
  });
@@ -458,7 +487,9 @@ var createForm = (arg) => {
458
487
  isValid,
459
488
  isDirty,
460
489
  touchedFields,
461
- dirtyFields
490
+ dirtyFields,
491
+ isSubmitted,
492
+ submitCount
462
493
  },
463
494
  values,
464
495
  errors,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-hook-form",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "type": "module",
5
5
  "main": "./dist/main.js",
6
6
  "module": "./dist/main.js",