solid-hook-form 1.3.5 → 1.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/form_context.d.ts +1 -1
- package/dist/logic/get_value.d.ts +1 -1
- package/dist/main.js +62 -53
- package/dist/main.umd.cjs +1 -2
- package/package.json +1 -1
- package/dist/main.js.map +0 -1
- package/dist/main.umd.cjs.map +0 -1
package/dist/form_context.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const FormContext: import('solid-js').Context<
|
|
1
|
+
export declare const FormContext: import('solid-js').Context<unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const getFieldValue: (event: Event) => string | boolean;
|
|
1
|
+
export declare const getFieldValue: (event: Event) => string | boolean | FileList | null;
|
package/dist/main.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createSignal as
|
|
2
|
-
const
|
|
1
|
+
import { createSignal as d, createContext as H, createComponent as T, useContext as q } from "solid-js";
|
|
2
|
+
const S = (e) => {
|
|
3
3
|
const n = e.target;
|
|
4
|
-
return n instanceof HTMLSelectElement ? n.value : n instanceof HTMLInputElement && n.type === "checkbox" ? n.checked : n.value;
|
|
5
|
-
},
|
|
4
|
+
return n instanceof HTMLSelectElement ? n.value : n instanceof HTMLInputElement && n.type === "checkbox" ? n.checked : n instanceof HTMLInputElement && n.type === "file" ? n.files : n.value;
|
|
5
|
+
}, y = (e, n) => {
|
|
6
6
|
if (e instanceof HTMLSelectElement) {
|
|
7
7
|
e.value = n;
|
|
8
8
|
return;
|
|
@@ -11,65 +11,75 @@ const H = (e) => {
|
|
|
11
11
|
e.checked = n;
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
|
-
e.value = n;
|
|
15
|
-
},
|
|
14
|
+
e instanceof HTMLInputElement && e.type === "file" || (e.value = n);
|
|
15
|
+
}, p = (e) => e instanceof RegExp || typeof e == "string" || typeof e == "number" ? e : e.value, g = (e) => typeof e == "string" ? e : typeof e.message == "string" ? e.message : "", N = (e, n, r = {}) => {
|
|
16
16
|
const i = e[n];
|
|
17
17
|
if (r.required && !i)
|
|
18
18
|
return { type: "required", message: g(r.required) };
|
|
19
|
-
if (r.min && Number(i) < Number(
|
|
19
|
+
if (r.min && Number(i) < Number(p(r.min)))
|
|
20
20
|
return { type: "min", message: g(r.min) };
|
|
21
|
-
if (r.max && Number(i) > Number(
|
|
21
|
+
if (r.max && Number(i) > Number(p(r.max)))
|
|
22
22
|
return { type: "max", message: g(r.max) };
|
|
23
|
-
if (r.minLength && i.length <
|
|
23
|
+
if (r.minLength && i.length < p(r.minLength))
|
|
24
24
|
return { type: "minLength", message: g(r.minLength) };
|
|
25
|
-
if (r.maxLength && i.length >
|
|
25
|
+
if (r.maxLength && i.length > p(r.maxLength))
|
|
26
26
|
return { type: "maxLength", message: g(r.maxLength) };
|
|
27
|
-
if (r.pattern && !
|
|
27
|
+
if (r.pattern && !p(r.pattern).test(i))
|
|
28
28
|
return { type: "pattern", message: g(r.pattern) };
|
|
29
29
|
if (r.validate) {
|
|
30
|
-
const
|
|
31
|
-
if (
|
|
30
|
+
const c = r.validate(i, e);
|
|
31
|
+
if (c === !1)
|
|
32
32
|
return { type: "validate" };
|
|
33
|
-
if (typeof
|
|
34
|
-
return { type: "validate", message:
|
|
33
|
+
if (typeof c == "string")
|
|
34
|
+
return { type: "validate", message: c };
|
|
35
35
|
}
|
|
36
|
-
},
|
|
37
|
-
const [e, n] =
|
|
36
|
+
}, j = () => {
|
|
37
|
+
const [e, n] = d({});
|
|
38
38
|
return {
|
|
39
39
|
errors: e,
|
|
40
|
-
appendError: (
|
|
41
|
-
n((
|
|
40
|
+
appendError: (a, f) => {
|
|
41
|
+
n((m) => ({ ...m, [a]: f }));
|
|
42
42
|
},
|
|
43
|
-
removeError: (
|
|
43
|
+
removeError: (a) => {
|
|
44
44
|
n((f) => {
|
|
45
|
-
const
|
|
46
|
-
return delete
|
|
45
|
+
const m = { ...f };
|
|
46
|
+
return delete m[a], m;
|
|
47
47
|
});
|
|
48
48
|
},
|
|
49
49
|
resetErrors: () => {
|
|
50
50
|
n({});
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
|
-
},
|
|
53
|
+
}, A = ({
|
|
54
54
|
defaultValues: e,
|
|
55
55
|
mode: n = "onInput"
|
|
56
56
|
}) => {
|
|
57
|
-
const r = {}, i = {}, [
|
|
57
|
+
const r = {}, i = {}, [c, a] = d(e), { errors: f, appendError: m, removeError: F, resetErrors: b } = j(), [l, h] = d(!0), C = (t, o) => {
|
|
58
58
|
const s = r[t];
|
|
59
|
-
s && (o.ref = s),
|
|
59
|
+
s && (o.ref = s), m(t, o);
|
|
60
60
|
}, I = (t) => {
|
|
61
|
-
|
|
62
|
-
},
|
|
63
|
-
const o = i[t], s = N(
|
|
64
|
-
s ?
|
|
61
|
+
F(t);
|
|
62
|
+
}, E = (t) => {
|
|
63
|
+
const o = i[t], s = N(c(), t, o);
|
|
64
|
+
s ? C(t, s) : I(t), h(!Object.keys(f()).length);
|
|
65
65
|
}, k = () => {
|
|
66
|
-
Object.keys(
|
|
67
|
-
|
|
66
|
+
Object.keys(c()).forEach((t) => {
|
|
67
|
+
E(t);
|
|
68
68
|
});
|
|
69
|
+
}, V = () => {
|
|
70
|
+
var o;
|
|
71
|
+
const t = Object.keys(r);
|
|
72
|
+
for (const s of t) {
|
|
73
|
+
const u = f()[s];
|
|
74
|
+
if (u) {
|
|
75
|
+
(o = u.ref) == null || o.focus();
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
69
79
|
}, v = (t, o) => {
|
|
70
|
-
const s =
|
|
71
|
-
|
|
72
|
-
},
|
|
80
|
+
const s = S(t);
|
|
81
|
+
a((u) => ({ ...u, [o]: s })), E(o);
|
|
82
|
+
}, M = (t, o = {}) => (i[t] = {
|
|
73
83
|
required: o.required,
|
|
74
84
|
min: o.min,
|
|
75
85
|
max: o.max,
|
|
@@ -87,46 +97,45 @@ const H = (e) => {
|
|
|
87
97
|
(n === "onChange" || n === "onInput") && v(s, t);
|
|
88
98
|
},
|
|
89
99
|
ref(s) {
|
|
90
|
-
r[t] || (r[t] = s, s &&
|
|
100
|
+
r[t] || (r[t] = s, s && y(s, c()[t]));
|
|
91
101
|
}
|
|
92
|
-
}),
|
|
102
|
+
}), x = (t) => t ? c()[t] : c();
|
|
93
103
|
return {
|
|
94
|
-
values:
|
|
104
|
+
values: c,
|
|
95
105
|
errors: f,
|
|
96
|
-
isValid:
|
|
97
|
-
register:
|
|
98
|
-
getValues:
|
|
106
|
+
isValid: l,
|
|
107
|
+
register: M,
|
|
108
|
+
getValues: x,
|
|
99
109
|
setValue: (t, o) => {
|
|
100
|
-
|
|
110
|
+
a((u) => ({ ...u, [t]: o }));
|
|
101
111
|
const s = r[t];
|
|
102
|
-
s &&
|
|
112
|
+
s && y(s, o);
|
|
103
113
|
},
|
|
104
114
|
onSubmit: (t) => (o) => {
|
|
105
|
-
o.preventDefault(), k(),
|
|
115
|
+
o.preventDefault(), k(), l() && t(x()), V();
|
|
106
116
|
},
|
|
107
117
|
reset: (t = {}) => {
|
|
108
|
-
|
|
118
|
+
a(() => ({
|
|
109
119
|
...e,
|
|
110
120
|
...t
|
|
111
|
-
})),
|
|
121
|
+
})), b(), h(!0);
|
|
112
122
|
}
|
|
113
123
|
};
|
|
114
|
-
},
|
|
124
|
+
}, L = H(), D = (e) => T(L.Provider, {
|
|
115
125
|
get value() {
|
|
116
126
|
return e.form;
|
|
117
127
|
},
|
|
118
128
|
get children() {
|
|
119
129
|
return e.children;
|
|
120
130
|
}
|
|
121
|
-
}),
|
|
122
|
-
const e =
|
|
123
|
-
if (
|
|
131
|
+
}), z = () => {
|
|
132
|
+
const e = q(L);
|
|
133
|
+
if (!e)
|
|
124
134
|
throw new Error("useFormContext: cannot find a FormProvider");
|
|
125
135
|
return e;
|
|
126
136
|
};
|
|
127
137
|
export {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
138
|
+
D as FormProvider,
|
|
139
|
+
A as useForm,
|
|
140
|
+
z as useFormContext
|
|
131
141
|
};
|
|
132
|
-
//# sourceMappingURL=main.js.map
|
package/dist/main.umd.cjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
(function(f,
|
|
2
|
-
//# sourceMappingURL=main.umd.cjs.map
|
|
1
|
+
(function(f,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("solid-js")):typeof define=="function"&&define.amd?define(["exports","solid-js"],a):(f=typeof globalThis<"u"?globalThis:f||self,a(f["solid-hook-form"]={},f.solid))})(this,function(f,a){"use strict";const b=e=>{const n=e.target;return n instanceof HTMLSelectElement?n.value:n instanceof HTMLInputElement&&n.type==="checkbox"?n.checked:n instanceof HTMLInputElement&&n.type==="file"?n.files:n.value},h=(e,n)=>{if(e instanceof HTMLSelectElement){e.value=n;return}if(e instanceof HTMLInputElement&&e.type==="checkbox"){e.checked=n;return}e instanceof HTMLInputElement&&e.type==="file"||(e.value=n)},l=e=>e instanceof RegExp||typeof e=="string"||typeof e=="number"?e:e.value,d=e=>typeof e=="string"?e:typeof e.message=="string"?e.message:"",C=(e,n,r={})=>{const s=e[n];if(r.required&&!s)return{type:"required",message:d(r.required)};if(r.min&&Number(s)<Number(l(r.min)))return{type:"min",message:d(r.min)};if(r.max&&Number(s)>Number(l(r.max)))return{type:"max",message:d(r.max)};if(r.minLength&&s.length<l(r.minLength))return{type:"minLength",message:d(r.minLength)};if(r.maxLength&&s.length>l(r.maxLength))return{type:"maxLength",message:d(r.maxLength)};if(r.pattern&&!l(r.pattern).test(s))return{type:"pattern",message:d(r.pattern)};if(r.validate){const c=r.validate(s,e);if(c===!1)return{type:"validate"};if(typeof c=="string")return{type:"validate",message:c}}},k=()=>{const[e,n]=a.createSignal({});return{errors:e,appendError:(u,m)=>{n(p=>({...p,[u]:m}))},removeError:u=>{n(m=>{const p={...m};return delete p[u],p})},resetErrors:()=>{n({})}}},I=({defaultValues:e,mode:n="onInput"})=>{const r={},s={},[c,u]=a.createSignal(e),{errors:m,appendError:p,removeError:M,resetErrors:V}=k(),[v,E]=a.createSignal(!0),j=(t,o)=>{const i=r[t];i&&(o.ref=i),p(t,o)},q=t=>{M(t)},x=t=>{const o=s[t],i=C(c(),t,o);i?j(t,i):q(t),E(!Object.keys(m()).length)},H=()=>{Object.keys(c()).forEach(t=>{x(t)})},P=()=>{var o;const t=Object.keys(r);for(const i of t){const g=m()[i];if(g){(o=g.ref)==null||o.focus();break}}},L=(t,o)=>{const i=b(t);u(g=>({...g,[o]:i})),x(o)},N=(t,o={})=>(s[t]={required:o.required,min:o.min,max:o.max,minLength:o.minLength,maxLength:o.maxLength,pattern:o.pattern,validate:o.validate},{name:t,onInput(i){n==="onInput"&&L(i,t)},onChange(i){(n==="onChange"||n==="onInput")&&L(i,t)},ref(i){r[t]||(r[t]=i,i&&h(i,c()[t]))}}),F=t=>t?c()[t]:c();return{values:c,errors:m,isValid:v,register:N,getValues:F,setValue:(t,o)=>{u(g=>({...g,[t]:o}));const i=r[t];i&&h(i,o)},onSubmit:t=>o=>{o.preventDefault(),H(),v()&&t(F()),P()},reset:(t={})=>{u(()=>({...e,...t})),V(),E(!0)}}},y=a.createContext(),S=e=>a.createComponent(y.Provider,{get value(){return e.form},get children(){return e.children}}),T=()=>{const e=a.useContext(y);if(!e)throw new Error("useFormContext: cannot find a FormProvider");return e};f.FormProvider=S,f.useForm=I,f.useFormContext=T,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
package/dist/main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../src/logic/get_value.ts","../src/logic/set_value.ts","../src/logic/validate.ts","../src/logic/create_errors.ts","../src/use_form.ts","../src/form_context.ts","../src/form_provider.tsx","../src/use_form_context.ts"],"sourcesContent":["export const getFieldValue = (event: Event) => {\n const field = event.target;\n\n if (field instanceof HTMLSelectElement) {\n return field.value;\n }\n\n if (field instanceof HTMLInputElement && field.type === \"checkbox\") {\n return field.checked;\n }\n\n return (field as HTMLInputElement).value;\n};\n","export const setFieldValue = (field: HTMLElement, value: any) => {\n if (field instanceof HTMLSelectElement) {\n field.value = value;\n\n return;\n }\n\n if (field instanceof HTMLInputElement && field.type === \"checkbox\") {\n field.checked = value;\n\n return;\n }\n\n (field as HTMLInputElement).value = value;\n};\n","import { FieldError } from \"../types/errors\";\nimport { FormValues } from \"../types/form\";\nimport { Path } from \"../types/path\";\nimport { Rules, ValidationRule } from \"../types/validate\";\n\nconst getRuleValue = (rule: ValidationRule<any>) => {\n if (rule instanceof RegExp) {\n return rule;\n }\n\n if (typeof rule === \"string\" || typeof rule === \"number\") {\n return rule;\n }\n\n return rule.value;\n};\n\nconst getRuleMessage = (rule: ValidationRule<any>) => {\n if (typeof rule === \"string\") {\n return rule;\n }\n\n if (typeof rule.message === \"string\") {\n return rule.message;\n }\n\n return \"\";\n};\n\nexport const validate = <F extends FormValues>(\n values: F,\n name: Path<F>,\n rules: Rules<F, Path<F>> = {}\n): FieldError | undefined => {\n const value = values[name];\n\n if (rules.required && !value) {\n return { type: \"required\", message: getRuleMessage(rules.required) };\n }\n\n if (rules.min && Number(value) < Number(getRuleValue(rules.min))) {\n return { type: \"min\", message: getRuleMessage(rules.min) };\n }\n\n if (rules.max && Number(value) > Number(getRuleValue(rules.max))) {\n return { type: \"max\", message: getRuleMessage(rules.max) };\n }\n\n if (rules.minLength && value.length < getRuleValue(rules.minLength)) {\n return { type: \"minLength\", message: getRuleMessage(rules.minLength) };\n }\n\n if (rules.maxLength && value.length > getRuleValue(rules.maxLength)) {\n return { type: \"maxLength\", message: getRuleMessage(rules.maxLength) };\n }\n\n if (rules.pattern && !getRuleValue(rules.pattern).test(value)) {\n return { type: \"pattern\", message: getRuleMessage(rules.pattern) };\n }\n\n if (rules.validate) {\n const message = rules.validate(value, values);\n\n if (message === false) {\n return { type: \"validate\" };\n }\n\n if (typeof message === \"string\") {\n return { type: \"validate\", message };\n }\n }\n};\n","import { createSignal } from \"solid-js\";\nimport { FieldError, FieldErrors } from \"../types/errors\";\nimport { FormValues } from \"../types/form\";\nimport { Path } from \"../types/path\";\n\nexport const createErrors = <F extends FormValues>() => {\n const [errors, setErrors] = createSignal<FieldErrors<F>>({});\n\n const appendError = (name: Path<F>, error: FieldError) => {\n setErrors((prev) => ({ ...prev, [name]: error }));\n };\n\n const removeError = (name: Path<F>) => {\n setErrors((prev) => {\n const errors = { ...prev };\n\n delete errors[name];\n return errors;\n });\n };\n\n const resetErrors = () => {\n setErrors({});\n };\n\n return {\n errors,\n appendError,\n removeError,\n resetErrors,\n };\n};\n","import { createSignal } from \"solid-js\";\nimport {\n FormFields,\n FormValues,\n GetValues,\n OnSubmit,\n Register,\n Reset,\n SetValue,\n UseFormReturn,\n} from \"./types/form\";\nimport { Path } from \"./types/path\";\nimport { FieldError } from \"./types/errors\";\nimport { getFieldValue } from \"./logic/get_value\";\nimport { setFieldValue } from \"./logic/set_value\";\nimport { Rules } from \"./types/validate\";\nimport { validate } from \"./logic/validate\";\nimport { createErrors } from \"./logic/create_errors\";\n\ntype UseFormArg<T extends FormValues> = {\n defaultValues: T;\n mode?: \"onInput\" | \"onChange\" | \"onSubmit\";\n};\n\nexport const useForm = <F extends FormValues>({\n defaultValues,\n mode = \"onInput\",\n}: UseFormArg<F>): UseFormReturn<F> => {\n const fields: FormFields = {};\n const rules: Record<string, Rules<F, Path<F>>> = {};\n\n const [values, setValues] = createSignal<F>(defaultValues);\n const { errors, appendError, removeError, resetErrors } = createErrors<F>();\n const [isValid, setIsValid] = createSignal<boolean>(true);\n\n const setFieldError = (name: Path<F>, error: FieldError) => {\n const field = fields[name];\n\n if (field) {\n error.ref = field;\n }\n\n appendError(name, error);\n };\n\n const clearFieldError = (name: Path<F>) => {\n removeError(name);\n };\n\n const validateField = (name: Path<F>) => {\n const rule = rules[name];\n const error = validate(values(), name, rule);\n\n if (error) {\n setFieldError(name, error);\n } else {\n clearFieldError(name);\n }\n\n setIsValid(!Object.keys(errors()).length);\n };\n\n const validateAllFields = () => {\n Object.keys(values()).forEach((key) => {\n validateField(key as Path<F>);\n });\n };\n\n const onFieldChange = (event: Event, name: Path<F>) => {\n const value = getFieldValue(event);\n\n setValues((prev) => ({ ...prev, [name]: value }));\n validateField(name);\n };\n\n const register: Register<F> = (name, options = {}) => {\n rules[name] = {\n required: options.required,\n min: options.min,\n max: options.max,\n minLength: options.minLength,\n maxLength: options.maxLength,\n pattern: options.pattern,\n validate: options.validate,\n };\n\n return {\n name,\n // value: values()[name],\n onInput(event) {\n if (mode === \"onInput\") {\n onFieldChange(event, name);\n }\n },\n onChange(event) {\n if (mode === \"onChange\" || mode === \"onInput\") {\n onFieldChange(event, name);\n }\n },\n ref(element) {\n const field = fields[name];\n\n if (field) {\n return;\n }\n\n fields[name] = element;\n\n if (element) {\n setFieldValue(element, values()[name]);\n }\n },\n };\n };\n\n const getValues: GetValues<F> = (name?: string) => {\n if (name) {\n return values()[name];\n }\n\n return values();\n };\n\n const setValue: SetValue<F> = (name, value) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n\n const field = fields[name];\n\n if (field) {\n setFieldValue(field, value);\n }\n };\n\n const onSubmit: OnSubmit<F> = (submit) => {\n return (event) => {\n event.preventDefault();\n validateAllFields();\n\n if (isValid()) {\n submit(getValues());\n }\n };\n };\n\n const reset: Reset<F> = (newDefaultValues = {}) => {\n setValues(() => ({\n ...defaultValues,\n ...newDefaultValues,\n }));\n resetErrors();\n setIsValid(true);\n };\n\n return {\n values,\n errors,\n isValid,\n register,\n getValues,\n setValue,\n onSubmit,\n reset,\n };\n};\n","import { createContext } from \"solid-js\";\n\nexport const FormContext = createContext({});\n","import { ParentProps } from \"solid-js\";\nimport { FormValues, UseFormReturn } from \"./types/form\";\nimport { FormContext } from \"./form_context\";\n\ntype FormProviderProps<T extends FormValues> = ParentProps & {\n form: UseFormReturn<T>;\n};\n\nexport const FormProvider = <T extends FormValues>(props: FormProviderProps<T>) => {\n return <FormContext.Provider value={props.form}>{props.children}</FormContext.Provider>;\n};\n","import { useContext } from \"solid-js\";\nimport { FormContext } from \"./form_context\";\nimport { FormValues, UseFormReturn } from \"./types/form\";\n\nexport const useFormContext = <T extends FormValues>() => {\n const form = useContext(FormContext) as UseFormReturn<T>;\n\n console.log(\"context\", form, useContext);\n\n if (!form) {\n throw new Error(\"useFormContext: cannot find a FormProvider\");\n }\n\n return form;\n};\n"],"names":["getFieldValue","event","field","setFieldValue","value","getRuleValue","rule","getRuleMessage","validate","values","name","rules","message","createErrors","errors","setErrors","createSignal","error","prev","useForm","defaultValues","mode","fields","setValues","appendError","removeError","resetErrors","isValid","setIsValid","setFieldError","clearFieldError","validateField","validateAllFields","key","onFieldChange","register","options","element","getValues","submit","newDefaultValues","FormContext","createContext","FormProvider","props","_$createComponent","Provider","form","children","useFormContext","useContext"],"mappings":"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"}
|
package/dist/main.umd.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.umd.cjs","sources":["../src/logic/get_value.ts","../src/logic/set_value.ts","../src/logic/validate.ts","../src/logic/create_errors.ts","../src/use_form.ts","../src/form_context.ts","../src/form_provider.tsx","../src/use_form_context.ts"],"sourcesContent":["export const getFieldValue = (event: Event) => {\n const field = event.target;\n\n if (field instanceof HTMLSelectElement) {\n return field.value;\n }\n\n if (field instanceof HTMLInputElement && field.type === \"checkbox\") {\n return field.checked;\n }\n\n return (field as HTMLInputElement).value;\n};\n","export const setFieldValue = (field: HTMLElement, value: any) => {\n if (field instanceof HTMLSelectElement) {\n field.value = value;\n\n return;\n }\n\n if (field instanceof HTMLInputElement && field.type === \"checkbox\") {\n field.checked = value;\n\n return;\n }\n\n (field as HTMLInputElement).value = value;\n};\n","import { FieldError } from \"../types/errors\";\nimport { FormValues } from \"../types/form\";\nimport { Path } from \"../types/path\";\nimport { Rules, ValidationRule } from \"../types/validate\";\n\nconst getRuleValue = (rule: ValidationRule<any>) => {\n if (rule instanceof RegExp) {\n return rule;\n }\n\n if (typeof rule === \"string\" || typeof rule === \"number\") {\n return rule;\n }\n\n return rule.value;\n};\n\nconst getRuleMessage = (rule: ValidationRule<any>) => {\n if (typeof rule === \"string\") {\n return rule;\n }\n\n if (typeof rule.message === \"string\") {\n return rule.message;\n }\n\n return \"\";\n};\n\nexport const validate = <F extends FormValues>(\n values: F,\n name: Path<F>,\n rules: Rules<F, Path<F>> = {}\n): FieldError | undefined => {\n const value = values[name];\n\n if (rules.required && !value) {\n return { type: \"required\", message: getRuleMessage(rules.required) };\n }\n\n if (rules.min && Number(value) < Number(getRuleValue(rules.min))) {\n return { type: \"min\", message: getRuleMessage(rules.min) };\n }\n\n if (rules.max && Number(value) > Number(getRuleValue(rules.max))) {\n return { type: \"max\", message: getRuleMessage(rules.max) };\n }\n\n if (rules.minLength && value.length < getRuleValue(rules.minLength)) {\n return { type: \"minLength\", message: getRuleMessage(rules.minLength) };\n }\n\n if (rules.maxLength && value.length > getRuleValue(rules.maxLength)) {\n return { type: \"maxLength\", message: getRuleMessage(rules.maxLength) };\n }\n\n if (rules.pattern && !getRuleValue(rules.pattern).test(value)) {\n return { type: \"pattern\", message: getRuleMessage(rules.pattern) };\n }\n\n if (rules.validate) {\n const message = rules.validate(value, values);\n\n if (message === false) {\n return { type: \"validate\" };\n }\n\n if (typeof message === \"string\") {\n return { type: \"validate\", message };\n }\n }\n};\n","import { createSignal } from \"solid-js\";\nimport { FieldError, FieldErrors } from \"../types/errors\";\nimport { FormValues } from \"../types/form\";\nimport { Path } from \"../types/path\";\n\nexport const createErrors = <F extends FormValues>() => {\n const [errors, setErrors] = createSignal<FieldErrors<F>>({});\n\n const appendError = (name: Path<F>, error: FieldError) => {\n setErrors((prev) => ({ ...prev, [name]: error }));\n };\n\n const removeError = (name: Path<F>) => {\n setErrors((prev) => {\n const errors = { ...prev };\n\n delete errors[name];\n return errors;\n });\n };\n\n const resetErrors = () => {\n setErrors({});\n };\n\n return {\n errors,\n appendError,\n removeError,\n resetErrors,\n };\n};\n","import { createSignal } from \"solid-js\";\nimport {\n FormFields,\n FormValues,\n GetValues,\n OnSubmit,\n Register,\n Reset,\n SetValue,\n UseFormReturn,\n} from \"./types/form\";\nimport { Path } from \"./types/path\";\nimport { FieldError } from \"./types/errors\";\nimport { getFieldValue } from \"./logic/get_value\";\nimport { setFieldValue } from \"./logic/set_value\";\nimport { Rules } from \"./types/validate\";\nimport { validate } from \"./logic/validate\";\nimport { createErrors } from \"./logic/create_errors\";\n\ntype UseFormArg<T extends FormValues> = {\n defaultValues: T;\n mode?: \"onInput\" | \"onChange\" | \"onSubmit\";\n};\n\nexport const useForm = <F extends FormValues>({\n defaultValues,\n mode = \"onInput\",\n}: UseFormArg<F>): UseFormReturn<F> => {\n const fields: FormFields = {};\n const rules: Record<string, Rules<F, Path<F>>> = {};\n\n const [values, setValues] = createSignal<F>(defaultValues);\n const { errors, appendError, removeError, resetErrors } = createErrors<F>();\n const [isValid, setIsValid] = createSignal<boolean>(true);\n\n const setFieldError = (name: Path<F>, error: FieldError) => {\n const field = fields[name];\n\n if (field) {\n error.ref = field;\n }\n\n appendError(name, error);\n };\n\n const clearFieldError = (name: Path<F>) => {\n removeError(name);\n };\n\n const validateField = (name: Path<F>) => {\n const rule = rules[name];\n const error = validate(values(), name, rule);\n\n if (error) {\n setFieldError(name, error);\n } else {\n clearFieldError(name);\n }\n\n setIsValid(!Object.keys(errors()).length);\n };\n\n const validateAllFields = () => {\n Object.keys(values()).forEach((key) => {\n validateField(key as Path<F>);\n });\n };\n\n const onFieldChange = (event: Event, name: Path<F>) => {\n const value = getFieldValue(event);\n\n setValues((prev) => ({ ...prev, [name]: value }));\n validateField(name);\n };\n\n const register: Register<F> = (name, options = {}) => {\n rules[name] = {\n required: options.required,\n min: options.min,\n max: options.max,\n minLength: options.minLength,\n maxLength: options.maxLength,\n pattern: options.pattern,\n validate: options.validate,\n };\n\n return {\n name,\n // value: values()[name],\n onInput(event) {\n if (mode === \"onInput\") {\n onFieldChange(event, name);\n }\n },\n onChange(event) {\n if (mode === \"onChange\" || mode === \"onInput\") {\n onFieldChange(event, name);\n }\n },\n ref(element) {\n const field = fields[name];\n\n if (field) {\n return;\n }\n\n fields[name] = element;\n\n if (element) {\n setFieldValue(element, values()[name]);\n }\n },\n };\n };\n\n const getValues: GetValues<F> = (name?: string) => {\n if (name) {\n return values()[name];\n }\n\n return values();\n };\n\n const setValue: SetValue<F> = (name, value) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n\n const field = fields[name];\n\n if (field) {\n setFieldValue(field, value);\n }\n };\n\n const onSubmit: OnSubmit<F> = (submit) => {\n return (event) => {\n event.preventDefault();\n validateAllFields();\n\n if (isValid()) {\n submit(getValues());\n }\n };\n };\n\n const reset: Reset<F> = (newDefaultValues = {}) => {\n setValues(() => ({\n ...defaultValues,\n ...newDefaultValues,\n }));\n resetErrors();\n setIsValid(true);\n };\n\n return {\n values,\n errors,\n isValid,\n register,\n getValues,\n setValue,\n onSubmit,\n reset,\n };\n};\n","import { createContext } from \"solid-js\";\n\nexport const FormContext = createContext({});\n","import { ParentProps } from \"solid-js\";\nimport { FormValues, UseFormReturn } from \"./types/form\";\nimport { FormContext } from \"./form_context\";\n\ntype FormProviderProps<T extends FormValues> = ParentProps & {\n form: UseFormReturn<T>;\n};\n\nexport const FormProvider = <T extends FormValues>(props: FormProviderProps<T>) => {\n return <FormContext.Provider value={props.form}>{props.children}</FormContext.Provider>;\n};\n","import { useContext } from \"solid-js\";\nimport { FormContext } from \"./form_context\";\nimport { FormValues, UseFormReturn } from \"./types/form\";\n\nexport const useFormContext = <T extends FormValues>() => {\n const form = useContext(FormContext) as UseFormReturn<T>;\n\n console.log(\"context\", form, useContext);\n\n if (!form) {\n throw new Error(\"useFormContext: cannot find a FormProvider\");\n }\n\n return form;\n};\n"],"names":["getFieldValue","event","field","setFieldValue","value","getRuleValue","rule","getRuleMessage","validate","values","name","rules","message","createErrors","errors","setErrors","createSignal","error","prev","useForm","defaultValues","mode","fields","setValues","appendError","removeError","resetErrors","isValid","setIsValid","setFieldError","clearFieldError","validateField","validateAllFields","key","onFieldChange","register","options","element","getValues","submit","newDefaultValues","FormContext","createContext","FormProvider","props","_$createComponent","Provider","form","children","useFormContext","useContext"],"mappings":"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"}
|