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 +12 -5
- package/dist/main.js +33 -5
- package/dist/main.jsx +40 -9
- package/package.json +1 -1
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
|
-
|
|
429
|
-
|
|
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
|
|
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/
|
|
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] =
|
|
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] =
|
|
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
|
-
|
|
435
|
-
|
|
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,
|