solid-hook-form 2.4.0 → 2.5.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
@@ -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
- if (error) {
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
- if (error) {
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,18 +402,21 @@ var createForm = (arg) => {
401
402
  return {
402
403
  name,
403
404
  onInput(event) {
404
- if (mode === "onChange") {
405
- onFieldChange(event, name);
405
+ onFieldChange(event, name);
406
+ if (mode === "onChange" || mode === "onTouched" && isTouched(name)) {
407
+ validateField(name);
406
408
  }
407
409
  },
408
410
  onChange(event) {
409
- if (mode === "onChange") {
410
- onFieldChange(event, name);
411
+ onFieldChange(event, name);
412
+ if (mode === "onChange" || mode === "onTouched" && isTouched(name)) {
413
+ validateField(name);
411
414
  }
412
415
  },
413
416
  onBlur(event) {
414
- if (mode === "onBlur") {
415
- onFieldChange(event, name);
417
+ onFieldChange(event, name);
418
+ if (mode === "onBlur" || mode === "onTouched" && !isTouched(name)) {
419
+ validateField(name);
416
420
  }
417
421
  addTouched(name);
418
422
  },
@@ -465,7 +469,9 @@ var createForm = (arg) => {
465
469
  return;
466
470
  }
467
471
  onError?.(errors);
468
- focusFirstError();
472
+ if (shouldFocusError) {
473
+ focusFirstError();
474
+ }
469
475
  };
470
476
  };
471
477
  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
- if (error) {
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
- if (error) {
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,18 +411,21 @@ var createForm = (arg) => {
410
411
  return {
411
412
  name,
412
413
  onInput(event) {
413
- if (mode === "onChange") {
414
- onFieldChange(event, name);
414
+ onFieldChange(event, name);
415
+ if (mode === "onChange" || mode === "onTouched" && isTouched(name)) {
416
+ validateField(name);
415
417
  }
416
418
  },
417
419
  onChange(event) {
418
- if (mode === "onChange") {
419
- onFieldChange(event, name);
420
+ onFieldChange(event, name);
421
+ if (mode === "onChange" || mode === "onTouched" && isTouched(name)) {
422
+ validateField(name);
420
423
  }
421
424
  },
422
425
  onBlur(event) {
423
- if (mode === "onBlur") {
424
- onFieldChange(event, name);
426
+ onFieldChange(event, name);
427
+ if (mode === "onBlur" || mode === "onTouched" && !isTouched(name)) {
428
+ validateField(name);
425
429
  }
426
430
  addTouched(name);
427
431
  },
@@ -474,7 +478,9 @@ var createForm = (arg) => {
474
478
  return;
475
479
  }
476
480
  onError?.(errors);
477
- focusFirstError();
481
+ if (shouldFocusError) {
482
+ focusFirstError();
483
+ }
478
484
  };
479
485
  };
480
486
  const reset = (values2, options = {}) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-hook-form",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "type": "module",
5
5
  "main": "./dist/main.js",
6
6
  "module": "./dist/main.js",