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 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, reconcile, produce } from 'solid-js/store';
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 removeError = (name) => {
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
- removeError,
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, removeError, resetErrors, getError } = createErrors();
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 setFieldError = (name, error) => {
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
- const clearFieldError = (name) => {
315
- removeError(name);
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
- setFieldError(name, error);
350
+ setError(name, error);
329
351
  } else {
330
- clearFieldError(name);
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
- setFieldError(name, error);
364
+ setError(name, error);
343
365
  } else {
344
- clearFieldError(name);
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 removeError = (name) => {
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
- removeError,
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, removeError, resetErrors, getError } = createErrors();
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 setFieldError = (name, error) => {
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
- const clearFieldError = (name) => {
324
- removeError(name);
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
- setFieldError(name, error);
359
+ setError(name, error);
338
360
  } else {
339
- clearFieldError(name);
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
- setFieldError(name, error);
373
+ setError(name, error);
352
374
  } else {
353
- clearFieldError(name);
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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-hook-form",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "type": "module",
5
5
  "main": "./dist/main.js",
6
6
  "module": "./dist/main.js",