solid-hook-form 2.4.0 → 2.5.1
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 +2 -1
- package/dist/main.js +32 -24
- package/dist/main.jsx +32 -24
- package/package.json +1 -1
package/dist/main.d.ts
CHANGED
|
@@ -104,7 +104,8 @@ type SubmitErrorHandler<F extends FormValues> = (errors: FieldErrors<F>) => void
|
|
|
104
104
|
type HandleSubmit<F extends FormValues> = (onSubmit: SubmitHandler<F>, onError?: SubmitErrorHandler<F>) => (event: SubmitEvent) => void;
|
|
105
105
|
type CreateFormArg<F extends FormValues> = {
|
|
106
106
|
defaultValues: F;
|
|
107
|
-
mode?: "onChange" | "onSubmit" | "onBlur";
|
|
107
|
+
mode?: "onChange" | "onSubmit" | "onBlur" | "onTouched";
|
|
108
|
+
shouldFocusError?: boolean;
|
|
108
109
|
resolver?: Resolver<F>;
|
|
109
110
|
};
|
|
110
111
|
type CreateFormReturn<F extends FormValues = FormValues> = {
|
package/dist/main.js
CHANGED
|
@@ -315,7 +315,7 @@ var getResolverFields = (fields) => {
|
|
|
315
315
|
|
|
316
316
|
// src/create_form.ts
|
|
317
317
|
var createForm = (arg) => {
|
|
318
|
-
const { defaultValues, mode = "onChange", resolver } = arg;
|
|
318
|
+
const { defaultValues, mode = "onChange", shouldFocusError = true, resolver } = arg;
|
|
319
319
|
const { fields, getField, setField, focusField } = createFields();
|
|
320
320
|
const { rules, addRule, getRule } = createRules();
|
|
321
321
|
const [values, setValues] = createSignal(structuredClone(defaultValues));
|
|
@@ -326,6 +326,9 @@ var createForm = (arg) => {
|
|
|
326
326
|
const isValid = createMemo(() => {
|
|
327
327
|
return !Object.keys(errors).length;
|
|
328
328
|
});
|
|
329
|
+
const isTouched = (name) => {
|
|
330
|
+
return get(touchedFields(), name);
|
|
331
|
+
};
|
|
329
332
|
const setError = (name, error, options) => {
|
|
330
333
|
const field = getField(name);
|
|
331
334
|
if (field) {
|
|
@@ -336,6 +339,13 @@ var createForm = (arg) => {
|
|
|
336
339
|
focusField(name);
|
|
337
340
|
}
|
|
338
341
|
};
|
|
342
|
+
const renderError = (name, error) => {
|
|
343
|
+
if (error) {
|
|
344
|
+
setError(name, error);
|
|
345
|
+
} else {
|
|
346
|
+
clearError(name);
|
|
347
|
+
}
|
|
348
|
+
};
|
|
339
349
|
const runSchema = async (names) => {
|
|
340
350
|
if (!resolver) {
|
|
341
351
|
return;
|
|
@@ -346,25 +356,17 @@ var createForm = (arg) => {
|
|
|
346
356
|
});
|
|
347
357
|
for (const name of names) {
|
|
348
358
|
const error = get(result.errors, name);
|
|
349
|
-
|
|
350
|
-
setError(name, error);
|
|
351
|
-
} else {
|
|
352
|
-
clearError(name);
|
|
353
|
-
}
|
|
359
|
+
renderError(name, error);
|
|
354
360
|
}
|
|
355
361
|
};
|
|
356
|
-
const validateField = (name) => {
|
|
362
|
+
const validateField = async (name) => {
|
|
357
363
|
if (resolver) {
|
|
358
|
-
runSchema([name]);
|
|
364
|
+
await runSchema([name]);
|
|
359
365
|
return;
|
|
360
366
|
}
|
|
361
367
|
const rule = getRule(name);
|
|
362
368
|
const error = validate(values(), name, rule);
|
|
363
|
-
|
|
364
|
-
setError(name, error);
|
|
365
|
-
} else {
|
|
366
|
-
clearError(name);
|
|
367
|
-
}
|
|
369
|
+
renderError(name, error);
|
|
368
370
|
};
|
|
369
371
|
const validateAllFields = async () => {
|
|
370
372
|
if (resolver) {
|
|
@@ -393,7 +395,6 @@ var createForm = (arg) => {
|
|
|
393
395
|
set(newState, name, value);
|
|
394
396
|
return newState;
|
|
395
397
|
});
|
|
396
|
-
validateField(name);
|
|
397
398
|
checkDirty(name, value);
|
|
398
399
|
};
|
|
399
400
|
const register = (name, options = {}) => {
|
|
@@ -401,27 +402,32 @@ var createForm = (arg) => {
|
|
|
401
402
|
return {
|
|
402
403
|
name,
|
|
403
404
|
onInput(event) {
|
|
404
|
-
|
|
405
|
-
|
|
405
|
+
onFieldChange(event, name);
|
|
406
|
+
if (mode === "onChange" || mode === "onTouched" && isTouched(name)) {
|
|
407
|
+
validateField(name);
|
|
406
408
|
}
|
|
407
409
|
},
|
|
408
410
|
onChange(event) {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
+
onFieldChange(event, name);
|
|
412
|
+
if (mode === "onChange" || mode === "onTouched" && isTouched(name)) {
|
|
413
|
+
validateField(name);
|
|
411
414
|
}
|
|
412
415
|
},
|
|
413
416
|
onBlur(event) {
|
|
414
|
-
|
|
415
|
-
|
|
417
|
+
onFieldChange(event, name);
|
|
418
|
+
if (mode === "onBlur" || mode === "onTouched" && !isTouched(name)) {
|
|
419
|
+
validateField(name);
|
|
416
420
|
}
|
|
417
421
|
addTouched(name);
|
|
418
422
|
},
|
|
419
423
|
ref(element) {
|
|
420
|
-
|
|
421
|
-
if (field) {
|
|
424
|
+
if (!element) {
|
|
422
425
|
return;
|
|
423
426
|
}
|
|
424
|
-
|
|
427
|
+
const field = getField(name);
|
|
428
|
+
if (field !== element) {
|
|
429
|
+
setField(name, element);
|
|
430
|
+
}
|
|
425
431
|
setFieldValue(element, get(values(), name));
|
|
426
432
|
}
|
|
427
433
|
};
|
|
@@ -465,7 +471,9 @@ var createForm = (arg) => {
|
|
|
465
471
|
return;
|
|
466
472
|
}
|
|
467
473
|
onError?.(errors);
|
|
468
|
-
|
|
474
|
+
if (shouldFocusError) {
|
|
475
|
+
focusFirstError();
|
|
476
|
+
}
|
|
469
477
|
};
|
|
470
478
|
};
|
|
471
479
|
const reset = (values2, options = {}) => {
|
package/dist/main.jsx
CHANGED
|
@@ -324,7 +324,7 @@ var getResolverFields = (fields) => {
|
|
|
324
324
|
|
|
325
325
|
// src/create_form.ts
|
|
326
326
|
var createForm = (arg) => {
|
|
327
|
-
const { defaultValues, mode = "onChange", resolver } = arg;
|
|
327
|
+
const { defaultValues, mode = "onChange", shouldFocusError = true, resolver } = arg;
|
|
328
328
|
const { fields, getField, setField, focusField } = createFields();
|
|
329
329
|
const { rules, addRule, getRule } = createRules();
|
|
330
330
|
const [values, setValues] = createSignal4(structuredClone(defaultValues));
|
|
@@ -335,6 +335,9 @@ var createForm = (arg) => {
|
|
|
335
335
|
const isValid = createMemo2(() => {
|
|
336
336
|
return !Object.keys(errors).length;
|
|
337
337
|
});
|
|
338
|
+
const isTouched = (name) => {
|
|
339
|
+
return get(touchedFields(), name);
|
|
340
|
+
};
|
|
338
341
|
const setError = (name, error, options) => {
|
|
339
342
|
const field = getField(name);
|
|
340
343
|
if (field) {
|
|
@@ -345,6 +348,13 @@ var createForm = (arg) => {
|
|
|
345
348
|
focusField(name);
|
|
346
349
|
}
|
|
347
350
|
};
|
|
351
|
+
const renderError = (name, error) => {
|
|
352
|
+
if (error) {
|
|
353
|
+
setError(name, error);
|
|
354
|
+
} else {
|
|
355
|
+
clearError(name);
|
|
356
|
+
}
|
|
357
|
+
};
|
|
348
358
|
const runSchema = async (names) => {
|
|
349
359
|
if (!resolver) {
|
|
350
360
|
return;
|
|
@@ -355,25 +365,17 @@ var createForm = (arg) => {
|
|
|
355
365
|
});
|
|
356
366
|
for (const name of names) {
|
|
357
367
|
const error = get(result.errors, name);
|
|
358
|
-
|
|
359
|
-
setError(name, error);
|
|
360
|
-
} else {
|
|
361
|
-
clearError(name);
|
|
362
|
-
}
|
|
368
|
+
renderError(name, error);
|
|
363
369
|
}
|
|
364
370
|
};
|
|
365
|
-
const validateField = (name) => {
|
|
371
|
+
const validateField = async (name) => {
|
|
366
372
|
if (resolver) {
|
|
367
|
-
runSchema([name]);
|
|
373
|
+
await runSchema([name]);
|
|
368
374
|
return;
|
|
369
375
|
}
|
|
370
376
|
const rule = getRule(name);
|
|
371
377
|
const error = validate(values(), name, rule);
|
|
372
|
-
|
|
373
|
-
setError(name, error);
|
|
374
|
-
} else {
|
|
375
|
-
clearError(name);
|
|
376
|
-
}
|
|
378
|
+
renderError(name, error);
|
|
377
379
|
};
|
|
378
380
|
const validateAllFields = async () => {
|
|
379
381
|
if (resolver) {
|
|
@@ -402,7 +404,6 @@ var createForm = (arg) => {
|
|
|
402
404
|
set(newState, name, value);
|
|
403
405
|
return newState;
|
|
404
406
|
});
|
|
405
|
-
validateField(name);
|
|
406
407
|
checkDirty(name, value);
|
|
407
408
|
};
|
|
408
409
|
const register = (name, options = {}) => {
|
|
@@ -410,27 +411,32 @@ var createForm = (arg) => {
|
|
|
410
411
|
return {
|
|
411
412
|
name,
|
|
412
413
|
onInput(event) {
|
|
413
|
-
|
|
414
|
-
|
|
414
|
+
onFieldChange(event, name);
|
|
415
|
+
if (mode === "onChange" || mode === "onTouched" && isTouched(name)) {
|
|
416
|
+
validateField(name);
|
|
415
417
|
}
|
|
416
418
|
},
|
|
417
419
|
onChange(event) {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
+
onFieldChange(event, name);
|
|
421
|
+
if (mode === "onChange" || mode === "onTouched" && isTouched(name)) {
|
|
422
|
+
validateField(name);
|
|
420
423
|
}
|
|
421
424
|
},
|
|
422
425
|
onBlur(event) {
|
|
423
|
-
|
|
424
|
-
|
|
426
|
+
onFieldChange(event, name);
|
|
427
|
+
if (mode === "onBlur" || mode === "onTouched" && !isTouched(name)) {
|
|
428
|
+
validateField(name);
|
|
425
429
|
}
|
|
426
430
|
addTouched(name);
|
|
427
431
|
},
|
|
428
432
|
ref(element) {
|
|
429
|
-
|
|
430
|
-
if (field) {
|
|
433
|
+
if (!element) {
|
|
431
434
|
return;
|
|
432
435
|
}
|
|
433
|
-
|
|
436
|
+
const field = getField(name);
|
|
437
|
+
if (field !== element) {
|
|
438
|
+
setField(name, element);
|
|
439
|
+
}
|
|
434
440
|
setFieldValue(element, get(values(), name));
|
|
435
441
|
}
|
|
436
442
|
};
|
|
@@ -474,7 +480,9 @@ var createForm = (arg) => {
|
|
|
474
480
|
return;
|
|
475
481
|
}
|
|
476
482
|
onError?.(errors);
|
|
477
|
-
|
|
483
|
+
if (shouldFocusError) {
|
|
484
|
+
focusFirstError();
|
|
485
|
+
}
|
|
478
486
|
};
|
|
479
487
|
};
|
|
480
488
|
const reset = (values2, options = {}) => {
|