solid-hook-form 2.3.0 → 2.4.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 +7 -0
- package/dist/main.js +39 -15
- package/dist/main.jsx +38 -14
- package/package.json +1 -1
package/dist/main.d.ts
CHANGED
|
@@ -29,6 +29,11 @@ type FieldError = {
|
|
|
29
29
|
message?: Message;
|
|
30
30
|
};
|
|
31
31
|
type FieldErrors<F extends FormValues = FormValues> = Partial<Record<Path<F>, FieldError>>;
|
|
32
|
+
type SetErrorOptions = {
|
|
33
|
+
shouldFocus?: boolean;
|
|
34
|
+
};
|
|
35
|
+
type SetError<F extends FormValues = FormValues> = (name: Path<F>, error: FieldError, options?: SetErrorOptions) => void;
|
|
36
|
+
type ClearErrors<F extends FormValues = FormValues> = (name?: Path<F> | Path<F>[]) => void;
|
|
32
37
|
|
|
33
38
|
type Ref = HTMLElement | null;
|
|
34
39
|
type RegisterReturn<F extends FormValues> = {
|
|
@@ -120,6 +125,8 @@ type CreateFormReturn<F extends FormValues = FormValues> = {
|
|
|
120
125
|
setValue: SetValue<F>;
|
|
121
126
|
handleSubmit: HandleSubmit<F>;
|
|
122
127
|
reset: Reset<F>;
|
|
128
|
+
setError: SetError<F>;
|
|
129
|
+
clearErrors: ClearErrors<F>;
|
|
123
130
|
trigger: Trigger<F>;
|
|
124
131
|
};
|
|
125
132
|
type CreateForm = <F extends FormValues>(arg: CreateFormArg<F>) => CreateFormReturn<F>;
|
package/dist/main.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createContext, createSignal, createMemo, useContext } from 'solid-js';
|
|
2
|
-
import { createStore,
|
|
2
|
+
import { createStore, produce, reconcile } from 'solid-js/store';
|
|
3
3
|
import { memo, createComponent } from 'solid-js/web';
|
|
4
4
|
|
|
5
5
|
// src/create_form.ts
|
|
@@ -88,7 +88,7 @@ var createErrors = () => {
|
|
|
88
88
|
})
|
|
89
89
|
);
|
|
90
90
|
};
|
|
91
|
-
const
|
|
91
|
+
const clearError = (name) => {
|
|
92
92
|
setErrors(
|
|
93
93
|
produce((prevState) => {
|
|
94
94
|
delete prevState[name];
|
|
@@ -101,12 +101,30 @@ var createErrors = () => {
|
|
|
101
101
|
}
|
|
102
102
|
setErrors(reconcile({}));
|
|
103
103
|
};
|
|
104
|
+
const clearErrors = (name) => {
|
|
105
|
+
if (!name) {
|
|
106
|
+
resetErrors();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (typeof name === "string") {
|
|
110
|
+
clearError(name);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
setErrors(
|
|
114
|
+
produce((prevState) => {
|
|
115
|
+
name.forEach((name2) => {
|
|
116
|
+
delete prevState[name2];
|
|
117
|
+
});
|
|
118
|
+
})
|
|
119
|
+
);
|
|
120
|
+
};
|
|
104
121
|
return {
|
|
105
122
|
errors,
|
|
106
123
|
appendError,
|
|
107
|
-
|
|
124
|
+
clearError,
|
|
108
125
|
resetErrors,
|
|
109
|
-
getError
|
|
126
|
+
getError,
|
|
127
|
+
clearErrors
|
|
110
128
|
};
|
|
111
129
|
};
|
|
112
130
|
|
|
@@ -119,10 +137,14 @@ var createFields = () => {
|
|
|
119
137
|
const setField = (name, element) => {
|
|
120
138
|
fields[name] = element;
|
|
121
139
|
};
|
|
140
|
+
const focusField = (name) => {
|
|
141
|
+
getField(name)?.focus();
|
|
142
|
+
};
|
|
122
143
|
return {
|
|
123
144
|
fields,
|
|
124
145
|
getField,
|
|
125
|
-
setField
|
|
146
|
+
setField,
|
|
147
|
+
focusField
|
|
126
148
|
};
|
|
127
149
|
};
|
|
128
150
|
|
|
@@ -294,25 +316,25 @@ var getResolverFields = (fields) => {
|
|
|
294
316
|
// src/create_form.ts
|
|
295
317
|
var createForm = (arg) => {
|
|
296
318
|
const { defaultValues, mode = "onChange", resolver } = arg;
|
|
297
|
-
const { fields, getField, setField } = createFields();
|
|
319
|
+
const { fields, getField, setField, focusField } = createFields();
|
|
298
320
|
const { rules, addRule, getRule } = createRules();
|
|
299
321
|
const [values, setValues] = createSignal(structuredClone(defaultValues));
|
|
300
|
-
const { errors, appendError,
|
|
322
|
+
const { errors, appendError, clearError, resetErrors, clearErrors, getError } = createErrors();
|
|
301
323
|
const { touchedFields, addTouched, resetTouched } = createTouchedFields();
|
|
302
324
|
const { dirtyFields, isDirty, checkDirty, resetDirty } = createDirtyFields(defaultValues);
|
|
303
325
|
const { isSubmitted, submitCount, logSubmit, resetSubmit } = createSubmit();
|
|
304
326
|
const isValid = createMemo(() => {
|
|
305
327
|
return !Object.keys(errors).length;
|
|
306
328
|
});
|
|
307
|
-
const
|
|
329
|
+
const setError = (name, error, options) => {
|
|
308
330
|
const field = getField(name);
|
|
309
331
|
if (field) {
|
|
310
332
|
error.ref = field;
|
|
311
333
|
}
|
|
312
334
|
appendError(name, error);
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
335
|
+
if (options?.shouldFocus) {
|
|
336
|
+
focusField(name);
|
|
337
|
+
}
|
|
316
338
|
};
|
|
317
339
|
const runSchema = async (names) => {
|
|
318
340
|
if (!resolver) {
|
|
@@ -325,9 +347,9 @@ var createForm = (arg) => {
|
|
|
325
347
|
for (const name of names) {
|
|
326
348
|
const error = get(result.errors, name);
|
|
327
349
|
if (error) {
|
|
328
|
-
|
|
350
|
+
setError(name, error);
|
|
329
351
|
} else {
|
|
330
|
-
|
|
352
|
+
clearError(name);
|
|
331
353
|
}
|
|
332
354
|
}
|
|
333
355
|
};
|
|
@@ -339,9 +361,9 @@ var createForm = (arg) => {
|
|
|
339
361
|
const rule = getRule(name);
|
|
340
362
|
const error = validate(values(), name, rule);
|
|
341
363
|
if (error) {
|
|
342
|
-
|
|
364
|
+
setError(name, error);
|
|
343
365
|
} else {
|
|
344
|
-
|
|
366
|
+
clearError(name);
|
|
345
367
|
}
|
|
346
368
|
};
|
|
347
369
|
const validateAllFields = async () => {
|
|
@@ -489,6 +511,8 @@ var createForm = (arg) => {
|
|
|
489
511
|
setValue,
|
|
490
512
|
handleSubmit,
|
|
491
513
|
reset,
|
|
514
|
+
setError,
|
|
515
|
+
clearErrors,
|
|
492
516
|
trigger
|
|
493
517
|
};
|
|
494
518
|
};
|
package/dist/main.jsx
CHANGED
|
@@ -91,7 +91,7 @@ var createErrors = () => {
|
|
|
91
91
|
})
|
|
92
92
|
);
|
|
93
93
|
};
|
|
94
|
-
const
|
|
94
|
+
const clearError = (name) => {
|
|
95
95
|
setErrors(
|
|
96
96
|
produce((prevState) => {
|
|
97
97
|
delete prevState[name];
|
|
@@ -104,12 +104,30 @@ var createErrors = () => {
|
|
|
104
104
|
}
|
|
105
105
|
setErrors(reconcile({}));
|
|
106
106
|
};
|
|
107
|
+
const clearErrors = (name) => {
|
|
108
|
+
if (!name) {
|
|
109
|
+
resetErrors();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (typeof name === "string") {
|
|
113
|
+
clearError(name);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
setErrors(
|
|
117
|
+
produce((prevState) => {
|
|
118
|
+
name.forEach((name2) => {
|
|
119
|
+
delete prevState[name2];
|
|
120
|
+
});
|
|
121
|
+
})
|
|
122
|
+
);
|
|
123
|
+
};
|
|
107
124
|
return {
|
|
108
125
|
errors,
|
|
109
126
|
appendError,
|
|
110
|
-
|
|
127
|
+
clearError,
|
|
111
128
|
resetErrors,
|
|
112
|
-
getError
|
|
129
|
+
getError,
|
|
130
|
+
clearErrors
|
|
113
131
|
};
|
|
114
132
|
};
|
|
115
133
|
|
|
@@ -122,10 +140,14 @@ var createFields = () => {
|
|
|
122
140
|
const setField = (name, element) => {
|
|
123
141
|
fields[name] = element;
|
|
124
142
|
};
|
|
143
|
+
const focusField = (name) => {
|
|
144
|
+
getField(name)?.focus();
|
|
145
|
+
};
|
|
125
146
|
return {
|
|
126
147
|
fields,
|
|
127
148
|
getField,
|
|
128
|
-
setField
|
|
149
|
+
setField,
|
|
150
|
+
focusField
|
|
129
151
|
};
|
|
130
152
|
};
|
|
131
153
|
|
|
@@ -303,25 +325,25 @@ var getResolverFields = (fields) => {
|
|
|
303
325
|
// src/create_form.ts
|
|
304
326
|
var createForm = (arg) => {
|
|
305
327
|
const { defaultValues, mode = "onChange", resolver } = arg;
|
|
306
|
-
const { fields, getField, setField } = createFields();
|
|
328
|
+
const { fields, getField, setField, focusField } = createFields();
|
|
307
329
|
const { rules, addRule, getRule } = createRules();
|
|
308
330
|
const [values, setValues] = createSignal4(structuredClone(defaultValues));
|
|
309
|
-
const { errors, appendError,
|
|
331
|
+
const { errors, appendError, clearError, resetErrors, clearErrors, getError } = createErrors();
|
|
310
332
|
const { touchedFields, addTouched, resetTouched } = createTouchedFields();
|
|
311
333
|
const { dirtyFields, isDirty, checkDirty, resetDirty } = createDirtyFields(defaultValues);
|
|
312
334
|
const { isSubmitted, submitCount, logSubmit, resetSubmit } = createSubmit();
|
|
313
335
|
const isValid = createMemo2(() => {
|
|
314
336
|
return !Object.keys(errors).length;
|
|
315
337
|
});
|
|
316
|
-
const
|
|
338
|
+
const setError = (name, error, options) => {
|
|
317
339
|
const field = getField(name);
|
|
318
340
|
if (field) {
|
|
319
341
|
error.ref = field;
|
|
320
342
|
}
|
|
321
343
|
appendError(name, error);
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
344
|
+
if (options?.shouldFocus) {
|
|
345
|
+
focusField(name);
|
|
346
|
+
}
|
|
325
347
|
};
|
|
326
348
|
const runSchema = async (names) => {
|
|
327
349
|
if (!resolver) {
|
|
@@ -334,9 +356,9 @@ var createForm = (arg) => {
|
|
|
334
356
|
for (const name of names) {
|
|
335
357
|
const error = get(result.errors, name);
|
|
336
358
|
if (error) {
|
|
337
|
-
|
|
359
|
+
setError(name, error);
|
|
338
360
|
} else {
|
|
339
|
-
|
|
361
|
+
clearError(name);
|
|
340
362
|
}
|
|
341
363
|
}
|
|
342
364
|
};
|
|
@@ -348,9 +370,9 @@ var createForm = (arg) => {
|
|
|
348
370
|
const rule = getRule(name);
|
|
349
371
|
const error = validate(values(), name, rule);
|
|
350
372
|
if (error) {
|
|
351
|
-
|
|
373
|
+
setError(name, error);
|
|
352
374
|
} else {
|
|
353
|
-
|
|
375
|
+
clearError(name);
|
|
354
376
|
}
|
|
355
377
|
};
|
|
356
378
|
const validateAllFields = async () => {
|
|
@@ -498,6 +520,8 @@ var createForm = (arg) => {
|
|
|
498
520
|
setValue,
|
|
499
521
|
handleSubmit,
|
|
500
522
|
reset,
|
|
523
|
+
setError,
|
|
524
|
+
clearErrors,
|
|
501
525
|
trigger
|
|
502
526
|
};
|
|
503
527
|
};
|