@mantine/form 3.7.0-alpha.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/README.md +19 -0
- package/cjs/filter-errors/filter-errors.js +19 -0
- package/cjs/filter-errors/filter-errors.js.map +1 -0
- package/cjs/form-list/form-list.js +21 -0
- package/cjs/form-list/form-list.js.map +1 -0
- package/cjs/get-error-path/get-error-path.js +10 -0
- package/cjs/get-error-path/get-error-path.js.map +1 -0
- package/cjs/get-input-on-change/get-input-on-change.js +25 -0
- package/cjs/get-input-on-change/get-input-on-change.js.map +1 -0
- package/cjs/index.js +19 -0
- package/cjs/index.js.map +1 -0
- package/cjs/resolvers/joi-resolver/joi-resolver.js +21 -0
- package/cjs/resolvers/joi-resolver/joi-resolver.js.map +1 -0
- package/cjs/resolvers/yup-resolver/yup-resolver.js +23 -0
- package/cjs/resolvers/yup-resolver/yup-resolver.js.map +1 -0
- package/cjs/resolvers/zod-resolver/zod-resolver.js +21 -0
- package/cjs/resolvers/zod-resolver/zod-resolver.js.map +1 -0
- package/cjs/use-form.js +146 -0
- package/cjs/use-form.js.map +1 -0
- package/cjs/validate-values/validate-list-values.js +24 -0
- package/cjs/validate-values/validate-list-values.js.map +1 -0
- package/cjs/validate-values/validate-values.js +58 -0
- package/cjs/validate-values/validate-values.js.map +1 -0
- package/esm/filter-errors/filter-errors.js +15 -0
- package/esm/filter-errors/filter-errors.js.map +1 -0
- package/esm/form-list/form-list.js +16 -0
- package/esm/form-list/form-list.js.map +1 -0
- package/esm/get-error-path/get-error-path.js +6 -0
- package/esm/get-error-path/get-error-path.js.map +1 -0
- package/esm/get-input-on-change/get-input-on-change.js +21 -0
- package/esm/get-input-on-change/get-input-on-change.js.map +1 -0
- package/esm/index.js +6 -0
- package/esm/index.js.map +1 -0
- package/esm/resolvers/joi-resolver/joi-resolver.js +17 -0
- package/esm/resolvers/joi-resolver/joi-resolver.js.map +1 -0
- package/esm/resolvers/yup-resolver/yup-resolver.js +19 -0
- package/esm/resolvers/yup-resolver/yup-resolver.js.map +1 -0
- package/esm/resolvers/zod-resolver/zod-resolver.js +17 -0
- package/esm/resolvers/zod-resolver/zod-resolver.js.map +1 -0
- package/esm/use-form.js +142 -0
- package/esm/use-form.js.map +1 -0
- package/esm/validate-values/validate-list-values.js +20 -0
- package/esm/validate-values/validate-list-values.js.map +1 -0
- package/esm/validate-values/validate-values.js +53 -0
- package/esm/validate-values/validate-values.js.map +1 -0
- package/lib/____get-input-on-change.internal.d.ts +2 -0
- package/lib/____get-input-on-change.internal.d.ts.map +1 -0
- package/lib/____use-form.internal.d.ts +37 -0
- package/lib/____use-form.internal.d.ts.map +1 -0
- package/lib/filter-errors/filter-errors.d.ts +3 -0
- package/lib/filter-errors/filter-errors.d.ts.map +1 -0
- package/lib/form-list/form-list.d.ts +8 -0
- package/lib/form-list/form-list.d.ts.map +1 -0
- package/lib/get-error-path/get-error-path.d.ts +2 -0
- package/lib/get-error-path/get-error-path.d.ts.map +1 -0
- package/lib/get-input-on-change/get-input-on-change.d.ts +2 -0
- package/lib/get-input-on-change/get-input-on-change.d.ts.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/resolvers/joi-resolver/joi-resolver.d.ts +3 -0
- package/lib/resolvers/joi-resolver/joi-resolver.d.ts.map +1 -0
- package/lib/resolvers/test-resolver.d.ts +9 -0
- package/lib/resolvers/test-resolver.d.ts.map +1 -0
- package/lib/resolvers/yup-resolver/yup-resolver.d.ts +3 -0
- package/lib/resolvers/yup-resolver/yup-resolver.d.ts.map +1 -0
- package/lib/resolvers/zod-resolver/zod-resolver.d.ts +3 -0
- package/lib/resolvers/zod-resolver/zod-resolver.d.ts.map +1 -0
- package/lib/types.d.ts +28 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/use-form.d.ts +42 -0
- package/lib/use-form.d.ts.map +1 -0
- package/lib/validate-values/validate-list-values.d.ts +3 -0
- package/lib/validate-values/validate-list-values.d.ts.map +1 -0
- package/lib/validate-values/validate-values.d.ts +4 -0
- package/lib/validate-values/validate-values.d.ts.map +1 -0
- package/package.json +22 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function yupResolver(schema) {
|
|
2
|
+
const _schema = schema;
|
|
3
|
+
return (values) => {
|
|
4
|
+
try {
|
|
5
|
+
_schema.validateSync(values, { abortEarly: false });
|
|
6
|
+
return {};
|
|
7
|
+
} catch (_yupError) {
|
|
8
|
+
const yupError = _yupError;
|
|
9
|
+
const results = {};
|
|
10
|
+
yupError.inner.forEach((error) => {
|
|
11
|
+
results[error.path.replace("[", ".").replace("]", "")] = error.message;
|
|
12
|
+
});
|
|
13
|
+
return results;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { yupResolver };
|
|
19
|
+
//# sourceMappingURL=yup-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yup-resolver.js","sources":["../../../src/resolvers/yup-resolver/yup-resolver.ts"],"sourcesContent":["import type { FormErrors } from '../../types';\n\ninterface YupError {\n path: string;\n message: string;\n}\n\ninterface YupValidationResult {\n inner: YupError[];\n}\n\ninterface YupSchema {\n validateSync(values: Record<string, any>, options: { abortEarly: boolean }): void;\n}\n\nexport function yupResolver(schema: any) {\n const _schema: YupSchema = schema;\n\n return (values: Record<string, any>): FormErrors => {\n try {\n _schema.validateSync(values, { abortEarly: false });\n return {};\n } catch (_yupError) {\n const yupError: YupValidationResult = _yupError;\n const results = {};\n\n yupError.inner.forEach((error) => {\n results[error.path.replace('[', '.').replace(']', '')] = error.message;\n });\n\n return results;\n }\n };\n}\n"],"names":[],"mappings":"AAAO,SAAS,WAAW,CAAC,MAAM,EAAE;AACpC,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC;AACzB,EAAE,OAAO,CAAC,MAAM,KAAK;AACrB,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK,CAAC,OAAO,SAAS,EAAE;AACxB,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC;AACjC,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACxC,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AAC/E,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,OAAO,CAAC;AACrB,KAAK;AACL,GAAG,CAAC;AACJ;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
function zodResolver(schema) {
|
|
2
|
+
const _schema = schema;
|
|
3
|
+
return (values) => {
|
|
4
|
+
const parsed = _schema.safeParse(values);
|
|
5
|
+
if (parsed.success) {
|
|
6
|
+
return {};
|
|
7
|
+
}
|
|
8
|
+
const results = {};
|
|
9
|
+
parsed.error.errors.forEach((error) => {
|
|
10
|
+
results[error.path.join(".")] = error.message;
|
|
11
|
+
});
|
|
12
|
+
return results;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { zodResolver };
|
|
17
|
+
//# sourceMappingURL=zod-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod-resolver.js","sources":["../../../src/resolvers/zod-resolver/zod-resolver.ts"],"sourcesContent":["import type { FormErrors } from '../../types';\n\ninterface ZodError {\n path: (string | number)[];\n message: string;\n}\n\ninterface ZodResults {\n success: boolean;\n error: {\n errors: ZodError[];\n };\n}\n\ninterface ZodSchema {\n safeParse(values: Record<string, any>): ZodResults;\n}\n\nexport function zodResolver<T extends Record<string, any>>(schema: any) {\n const _schema: ZodSchema = schema;\n\n return (values: T): FormErrors => {\n const parsed = _schema.safeParse(values);\n\n if (parsed.success) {\n return {};\n }\n\n const results = {};\n\n parsed.error.errors.forEach((error) => {\n results[error.path.join('.')] = error.message;\n });\n\n return results;\n };\n}\n"],"names":[],"mappings":"AAAO,SAAS,WAAW,CAAC,MAAM,EAAE;AACpC,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC;AACzB,EAAE,OAAO,CAAC,MAAM,KAAK;AACrB,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7C,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE;AACxB,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK;AACL,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC3C,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AACpD,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG,CAAC;AACJ;;;;"}
|
package/esm/use-form.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { isFormList, formList } from './form-list/form-list.js';
|
|
3
|
+
import { validateValues, validateFieldValue } from './validate-values/validate-values.js';
|
|
4
|
+
import { filterErrors } from './filter-errors/filter-errors.js';
|
|
5
|
+
import { getInputOnChange } from './get-input-on-change/get-input-on-change.js';
|
|
6
|
+
import { getErrorPath } from './get-error-path/get-error-path.js';
|
|
7
|
+
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __defProps = Object.defineProperties;
|
|
10
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
11
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
12
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
13
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
14
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
15
|
+
var __spreadValues = (a, b) => {
|
|
16
|
+
for (var prop in b || (b = {}))
|
|
17
|
+
if (__hasOwnProp.call(b, prop))
|
|
18
|
+
__defNormalProp(a, prop, b[prop]);
|
|
19
|
+
if (__getOwnPropSymbols)
|
|
20
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
21
|
+
if (__propIsEnum.call(b, prop))
|
|
22
|
+
__defNormalProp(a, prop, b[prop]);
|
|
23
|
+
}
|
|
24
|
+
return a;
|
|
25
|
+
};
|
|
26
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
27
|
+
function useForm({
|
|
28
|
+
initialValues,
|
|
29
|
+
initialErrors,
|
|
30
|
+
validate: rules,
|
|
31
|
+
schema
|
|
32
|
+
}) {
|
|
33
|
+
const [errors, setErrors] = useState(filterErrors(initialErrors));
|
|
34
|
+
const [values, setValues] = useState(initialValues);
|
|
35
|
+
const clearErrors = () => setErrors({});
|
|
36
|
+
const setFieldError = (field, error) => setErrors((current) => __spreadProps(__spreadValues({}, current), { [field]: error }));
|
|
37
|
+
const clearFieldError = (field) => setErrors((current) => {
|
|
38
|
+
const clone = __spreadValues({}, current);
|
|
39
|
+
delete clone[field];
|
|
40
|
+
return clone;
|
|
41
|
+
});
|
|
42
|
+
const setFieldValue = (field, value) => {
|
|
43
|
+
setValues((currentValues) => __spreadProps(__spreadValues({}, currentValues), { [field]: value }));
|
|
44
|
+
clearFieldError(field);
|
|
45
|
+
};
|
|
46
|
+
const setListItem = (field, index, value) => {
|
|
47
|
+
const list = values[field];
|
|
48
|
+
if (isFormList(list) && list[index] !== void 0) {
|
|
49
|
+
const cloned = [...list];
|
|
50
|
+
cloned[index] = value;
|
|
51
|
+
setFieldValue(field, formList(cloned));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const removeListItem = (field, indices) => {
|
|
55
|
+
const list = values[field];
|
|
56
|
+
if (isFormList(list)) {
|
|
57
|
+
setFieldValue(field, formList(list.filter((_, index) => Array.isArray(indices) ? !indices.includes(index) : indices !== index)));
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const addListItem = (field, payload) => {
|
|
61
|
+
const list = values[field];
|
|
62
|
+
if (isFormList(list)) {
|
|
63
|
+
setFieldValue(field, formList([...list, payload]));
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const reorderListItem = (field, { from, to }) => {
|
|
67
|
+
const list = values[field];
|
|
68
|
+
if (isFormList(list) && list[from] !== void 0 && list[to] !== void 0) {
|
|
69
|
+
const cloned = [...list];
|
|
70
|
+
const item = list[from];
|
|
71
|
+
cloned.splice(from, 1);
|
|
72
|
+
cloned.splice(to, 0, item);
|
|
73
|
+
setFieldValue(field, formList(cloned));
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const validate = () => {
|
|
77
|
+
const results = validateValues(schema || rules, values);
|
|
78
|
+
setErrors(results.errors);
|
|
79
|
+
return results;
|
|
80
|
+
};
|
|
81
|
+
const validateField = (field) => {
|
|
82
|
+
const results = validateFieldValue(field, schema || rules, values);
|
|
83
|
+
results.hasError ? setFieldError(field, results.error) : clearFieldError(field);
|
|
84
|
+
return results;
|
|
85
|
+
};
|
|
86
|
+
const onSubmit = (handleSubmit) => (event) => {
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
const results = validate();
|
|
89
|
+
!results.hasErrors && handleSubmit(values, event);
|
|
90
|
+
};
|
|
91
|
+
const reset = () => {
|
|
92
|
+
setValues(initialValues);
|
|
93
|
+
clearErrors();
|
|
94
|
+
};
|
|
95
|
+
const getInputProps = (field, { type, withError = true } = {}) => {
|
|
96
|
+
const value = values[field];
|
|
97
|
+
const onChange = getInputOnChange((val) => setFieldValue(field, val));
|
|
98
|
+
const payload = type === "checkbox" ? { checked: value, onChange } : { value, onChange };
|
|
99
|
+
if (withError && errors[field]) {
|
|
100
|
+
payload.error = errors[field];
|
|
101
|
+
}
|
|
102
|
+
return payload;
|
|
103
|
+
};
|
|
104
|
+
const getListInputProps = (field, index, listField, { type, withError = true } = {}) => {
|
|
105
|
+
const list = values[field];
|
|
106
|
+
if (isFormList(list) && list[index] && listField in list[index]) {
|
|
107
|
+
const listValue = list[index];
|
|
108
|
+
const value = listValue[listField];
|
|
109
|
+
const onChange = getInputOnChange((val) => setListItem(field, index, __spreadProps(__spreadValues({}, listValue), { [listField]: val })));
|
|
110
|
+
const payload = type === "checkbox" ? { checked: value, onChange } : { value, onChange };
|
|
111
|
+
const error = errors[getErrorPath([field, index, listField])];
|
|
112
|
+
if (withError && error) {
|
|
113
|
+
payload.error = error;
|
|
114
|
+
}
|
|
115
|
+
return payload;
|
|
116
|
+
}
|
|
117
|
+
return {};
|
|
118
|
+
};
|
|
119
|
+
return {
|
|
120
|
+
values,
|
|
121
|
+
setValues,
|
|
122
|
+
setFieldValue,
|
|
123
|
+
errors,
|
|
124
|
+
setErrors,
|
|
125
|
+
clearErrors,
|
|
126
|
+
clearFieldError,
|
|
127
|
+
setFieldError,
|
|
128
|
+
setListItem,
|
|
129
|
+
removeListItem,
|
|
130
|
+
addListItem,
|
|
131
|
+
reorderListItem,
|
|
132
|
+
validate,
|
|
133
|
+
validateField,
|
|
134
|
+
onSubmit,
|
|
135
|
+
reset,
|
|
136
|
+
getInputProps,
|
|
137
|
+
getListInputProps
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export { useForm };
|
|
142
|
+
//# sourceMappingURL=use-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form.js","sources":["../src/use-form.ts"],"sourcesContent":["import { useState } from 'react';\nimport { formList, isFormList, FormList } from './form-list/form-list';\nimport { validateValues, validateFieldValue } from './validate-values/validate-values';\nimport { filterErrors } from './filter-errors/filter-errors';\nimport { getInputOnChange } from './get-input-on-change/get-input-on-change';\nimport { getErrorPath } from './get-error-path/get-error-path';\nimport type {\n FormErrors,\n FormRules,\n FormValidationResult,\n FormFieldValidationResult,\n GetInputProps,\n GetInputPropsFieldType,\n} from './types';\n\nexport interface UseFormInput<T, K extends keyof T> {\n initialValues: T;\n initialErrors?: FormErrors;\n validate?: FormRules<T, K>;\n schema?: (values: Record<string, any>) => FormErrors;\n}\n\nexport interface UseFormReturnType<T> {\n values: T;\n setValues: React.Dispatch<React.SetStateAction<T>>;\n setFieldValue: <K extends keyof T, V extends T[K]>(field: K, value: V) => void;\n errors: FormErrors;\n setErrors: React.Dispatch<React.SetStateAction<FormErrors>>;\n setFieldError: <K extends keyof T>(field: K, error: React.ReactNode) => void;\n clearFieldError: <K extends keyof T>(field: K) => void;\n clearErrors(): void;\n setListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V extends FormList<infer U> ? U : never\n ) => void;\n addListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n payload: V extends FormList<infer U> ? U : never\n ) => void;\n removeListItem: <K extends keyof T>(field: K, indices: number[] | number) => void;\n reorderListItem: <K extends keyof T>(field: K, payload: { from: number; to: number }) => void;\n validate(): FormValidationResult;\n validateField: (field: string) => FormFieldValidationResult;\n onSubmit(\n handleSubmit: (values: T, event: React.FormEvent) => void\n ): (event?: React.FormEvent) => void;\n reset(): void;\n getInputProps: <K extends keyof T, L extends GetInputPropsFieldType = 'input'>(\n field: K,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n\n getListInputProps: <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: U extends FormList<infer V> ? keyof V : never,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n}\n\nexport function useForm<T extends { [key: string]: any }, KK extends keyof T = string>({\n initialValues,\n initialErrors,\n validate: rules,\n schema,\n}: UseFormInput<T, KK>): UseFormReturnType<T> {\n const [errors, setErrors] = useState(filterErrors(initialErrors));\n const [values, setValues] = useState(initialValues);\n\n const clearErrors = () => setErrors({});\n const setFieldError = (field: keyof T, error: React.ReactNode) =>\n setErrors((current) => ({ ...current, [field]: error }));\n\n const clearFieldError = (field: keyof T) =>\n setErrors((current) => {\n const clone: any = { ...current };\n delete clone[field];\n return clone;\n });\n\n const setFieldValue = <K extends keyof T, V extends T[K]>(field: K, value: V) => {\n setValues((currentValues) => ({ ...currentValues, [field]: value }));\n clearFieldError(field);\n };\n\n const setListItem = <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V[K][number]\n ) => {\n const list = values[field];\n if (isFormList(list) && list[index] !== undefined) {\n const cloned = [...list];\n cloned[index] = value;\n setFieldValue(field, formList(cloned) as any);\n }\n };\n\n const removeListItem = <K extends keyof T>(field: K, indices: number[] | number) => {\n const list = values[field];\n\n if (isFormList(list)) {\n setFieldValue(\n field,\n formList(\n list.filter((_: any, index: number) =>\n Array.isArray(indices) ? !indices.includes(index) : indices !== index\n )\n ) as any\n );\n }\n };\n\n const addListItem = <K extends keyof T, V extends T[K]>(field: K, payload: V[number]) => {\n const list = values[field];\n\n if (isFormList(list)) {\n setFieldValue(field, formList([...list, payload]) as any);\n }\n };\n\n const reorderListItem = <K extends keyof T>(\n field: K,\n { from, to }: { from: number; to: number }\n ) => {\n const list = values[field];\n\n if (isFormList(list) && list[from] !== undefined && list[to] !== undefined) {\n const cloned = [...list];\n const item = list[from];\n\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n setFieldValue(field, formList(cloned) as any);\n }\n };\n\n const validate = () => {\n const results = validateValues(schema || rules, values);\n setErrors(results.errors);\n return results;\n };\n\n const validateField = (field: string) => {\n const results = validateFieldValue(field, schema || rules, values);\n results.hasError ? setFieldError(field, results.error) : clearFieldError(field);\n return results;\n };\n\n const onSubmit =\n (handleSubmit: (values: T, event: React.FormEvent) => void) => (event: React.FormEvent) => {\n event.preventDefault();\n const results = validate();\n !results.hasErrors && handleSubmit(values, event);\n };\n\n const reset = () => {\n setValues(initialValues);\n clearErrors();\n };\n\n const getInputProps = <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const value = values[field];\n const onChange = getInputOnChange<U>((val: U) => setFieldValue(field, val)) as any;\n\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n\n if (withError && errors[field as any]) {\n payload.error = errors[field as any];\n }\n\n return payload as any;\n };\n\n const getListInputProps = <\n K extends keyof T,\n U extends T[K][number],\n LK extends keyof U,\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: LK,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const list = values[field];\n\n if (isFormList(list) && list[index] && listField in list[index]) {\n const listValue = list[index];\n const value = listValue[listField];\n const onChange = getInputOnChange<U[LK]>((val: U[LK]) =>\n setListItem(field, index, { ...listValue, [listField]: val })\n ) as any;\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n const error = errors[getErrorPath([field, index, listField])];\n\n if (withError && error) {\n payload.error = error;\n }\n\n return payload;\n }\n\n return {} as any;\n };\n\n return {\n values,\n setValues,\n setFieldValue,\n errors,\n setErrors,\n clearErrors,\n clearFieldError,\n setFieldError,\n setListItem,\n removeListItem,\n addListItem,\n reorderListItem,\n validate,\n validateField,\n onSubmit,\n reset,\n getInputProps,\n getListInputProps,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
function validateListValues(values, key, rules) {
|
|
2
|
+
const list = values[key];
|
|
3
|
+
const results = {};
|
|
4
|
+
list.forEach((item, itemIndex) => {
|
|
5
|
+
if (typeof item === "object" && item !== null) {
|
|
6
|
+
Object.keys(item).forEach((listItemKey) => {
|
|
7
|
+
if (typeof rules[key][listItemKey] === "function") {
|
|
8
|
+
const error = rules[key][listItemKey](item[listItemKey]);
|
|
9
|
+
if (error) {
|
|
10
|
+
results[`${key}.${itemIndex}.${listItemKey}`] = error;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
return results;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { validateListValues };
|
|
20
|
+
//# sourceMappingURL=validate-list-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-list-values.js","sources":["../../src/validate-values/validate-list-values.ts"],"sourcesContent":["import type { FormList } from '../form-list/form-list';\nimport type { FormRulesRecord, FormErrors } from '../types';\n\nexport function validateListValues<T, K extends keyof T>(\n values: T,\n key: string,\n rules: FormRulesRecord<T, K>\n) {\n const list: FormList<any> = values[key] as any;\n const results: FormErrors = {};\n\n list.forEach((item, itemIndex) => {\n if (typeof item === 'object' && item !== null) {\n Object.keys(item).forEach((listItemKey) => {\n if (typeof rules[key][listItemKey] === 'function') {\n const error = rules[key][listItemKey](item[listItemKey]);\n if (error) {\n results[`${key}.${itemIndex}.${listItemKey}`] = error;\n }\n }\n });\n }\n });\n\n return results;\n}\n"],"names":[],"mappings":"AAAO,SAAS,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;AACvD,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,EAAE,MAAM,OAAO,GAAG,EAAE,CAAC;AACrB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK;AACpC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;AACnD,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK;AACjD,QAAQ,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE;AAC3D,UAAU,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACnE,UAAU,IAAI,KAAK,EAAE;AACrB,YAAY,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAClE,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,OAAO,CAAC;AACjB;;;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { isFormList } from '../form-list/form-list.js';
|
|
2
|
+
import { filterErrors } from '../filter-errors/filter-errors.js';
|
|
3
|
+
import { validateListValues } from './validate-list-values.js';
|
|
4
|
+
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
9
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
+
var __spreadValues = (a, b) => {
|
|
11
|
+
for (var prop in b || (b = {}))
|
|
12
|
+
if (__hasOwnProp.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
if (__getOwnPropSymbols)
|
|
15
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
+
if (__propIsEnum.call(b, prop))
|
|
17
|
+
__defNormalProp(a, prop, b[prop]);
|
|
18
|
+
}
|
|
19
|
+
return a;
|
|
20
|
+
};
|
|
21
|
+
function validateRecordRules(rules, values) {
|
|
22
|
+
return Object.keys(rules).reduce((acc, key) => {
|
|
23
|
+
const rule = rules[key];
|
|
24
|
+
if (isFormList(values[key])) {
|
|
25
|
+
return __spreadValues(__spreadValues({}, acc), validateListValues(values, key, rules));
|
|
26
|
+
}
|
|
27
|
+
if (typeof rule === "function") {
|
|
28
|
+
acc[key] = rule(values[key], values);
|
|
29
|
+
}
|
|
30
|
+
return acc;
|
|
31
|
+
}, {});
|
|
32
|
+
}
|
|
33
|
+
function getValidationResults(errors) {
|
|
34
|
+
const filteredErrors = filterErrors(errors);
|
|
35
|
+
return { hasErrors: Object.keys(filteredErrors).length > 0, errors: filteredErrors };
|
|
36
|
+
}
|
|
37
|
+
function validateValues(rules, values) {
|
|
38
|
+
if (rules === void 0 || rules === null) {
|
|
39
|
+
return { hasErrors: false, errors: {} };
|
|
40
|
+
}
|
|
41
|
+
if (typeof rules === "function") {
|
|
42
|
+
return getValidationResults(rules(values));
|
|
43
|
+
}
|
|
44
|
+
return getValidationResults(validateRecordRules(rules, values));
|
|
45
|
+
}
|
|
46
|
+
function validateFieldValue(field, rules, values) {
|
|
47
|
+
const results = validateValues(rules, values);
|
|
48
|
+
const hasError = field in results.errors;
|
|
49
|
+
return { hasError, error: hasError ? results.errors[field] : null };
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { validateFieldValue, validateValues };
|
|
53
|
+
//# sourceMappingURL=validate-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-values.js","sources":["../../src/validate-values/validate-values.ts"],"sourcesContent":["import type {\n FormErrors,\n FormRulesRecord,\n FormRules,\n FormValidationResult,\n FormFieldValidationResult,\n} from '../types';\nimport { isFormList } from '../form-list/form-list';\nimport { filterErrors } from '../filter-errors/filter-errors';\nimport { validateListValues } from './validate-list-values';\n\nfunction validateRecordRules(\n rules: FormRulesRecord<any, any>,\n values: Record<string, any>\n): FormErrors {\n return Object.keys(rules).reduce<FormErrors>((acc, key) => {\n const rule = rules[key];\n\n if (isFormList(values[key])) {\n return { ...acc, ...validateListValues(values, key, rules) };\n }\n\n if (typeof rule === 'function') {\n acc[key] = rule(values[key], values);\n }\n\n return acc;\n }, {});\n}\n\nfunction getValidationResults(errors: FormErrors) {\n const filteredErrors = filterErrors(errors);\n return { hasErrors: Object.keys(filteredErrors).length > 0, errors: filteredErrors };\n}\n\nexport function validateValues(\n rules: FormRules<any, any>,\n values: Record<string, any>\n): FormValidationResult {\n if (rules === undefined || rules === null) {\n return { hasErrors: false, errors: {} };\n }\n\n if (typeof rules === 'function') {\n return getValidationResults(rules(values));\n }\n\n return getValidationResults(validateRecordRules(rules, values));\n}\n\nexport function validateFieldValue(\n field: string,\n rules: FormRules<any, any>,\n values: Record<string, any>\n): FormFieldValidationResult {\n const results = validateValues(rules, values);\n const hasError = field in results.errors;\n return { hasError, error: hasError ? results.errors[field] : null };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"____get-input-on-change.internal.d.ts","sourceRoot":"","sources":["../src/____get-input-on-change.internal.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,2DAEG,CAAC,KAAK,CAAC,WAiBhF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare type ValidationRule<T> = {
|
|
3
|
+
readonly [P in keyof T]?: (value: T[P], values?: T) => boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare type UseFormErrors<T> = {
|
|
6
|
+
readonly [P in keyof T]?: React.ReactNode | null;
|
|
7
|
+
};
|
|
8
|
+
interface UseFormInput<T> {
|
|
9
|
+
validationRules?: ValidationRule<T>;
|
|
10
|
+
errorMessages?: UseFormErrors<T>;
|
|
11
|
+
initialValues: T;
|
|
12
|
+
}
|
|
13
|
+
export interface UseForm<T> {
|
|
14
|
+
values: T;
|
|
15
|
+
errors: Record<keyof T, React.ReactNode>;
|
|
16
|
+
validate: () => boolean;
|
|
17
|
+
reset: () => void;
|
|
18
|
+
setErrors: React.Dispatch<React.SetStateAction<Record<keyof T, React.ReactNode>>>;
|
|
19
|
+
setValues: React.Dispatch<React.SetStateAction<T>>;
|
|
20
|
+
setFieldValue: <K extends keyof T, U extends T[K]>(field: K, value: U) => void;
|
|
21
|
+
setFieldError: (field: keyof T, error: React.ReactNode) => void;
|
|
22
|
+
validateField: (field: keyof T) => void;
|
|
23
|
+
resetErrors: () => void;
|
|
24
|
+
onSubmit: (handleSubmit: (values: T) => any) => (event?: React.FormEvent) => void;
|
|
25
|
+
getInputProps: <K extends keyof T>(field: K, options?: {
|
|
26
|
+
type?: 'checkbox' | 'default';
|
|
27
|
+
}) => {
|
|
28
|
+
[x: string]: any;
|
|
29
|
+
onChange: any;
|
|
30
|
+
error: Record<keyof T, React.ReactNode>[K];
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export declare function useForm<T extends {
|
|
34
|
+
[key: string]: any;
|
|
35
|
+
}>({ initialValues, validationRules, errorMessages, }: UseFormInput<T>): UseForm<T>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=____use-form.internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"____use-form.internal.d.ts","sourceRoot":"","sources":["../src/____use-form.internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,oBAAY,cAAc,CAAC,CAAC,IAAI;IAC9B,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,OAAO;CAC/D,CAAC;AAEF,oBAAY,aAAa,CAAC,CAAC,IAAI;IAC7B,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;CACjD,CAAC;AAEF,UAAU,YAAY,CAAC,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACjC,aAAa,EAAE,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzC,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClF,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/E,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAChE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAClF,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAC/B,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;KAC/B,KACE;QACH,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;QACjB,QAAQ,EAAE,GAAG,CAAC;QACd,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5C,CAAC;CACH;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAAE,EACxD,aAAa,EACb,eAAoB,EACpB,aAAkB,GACnB,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAuF9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-errors.d.ts","sourceRoot":"","sources":["../../src/filter-errors/filter-errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAc3D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
declare const LIST_IDENTIFIER: unique symbol;
|
|
2
|
+
export interface FormList<T> extends Array<T> {
|
|
3
|
+
[LIST_IDENTIFIER]: true;
|
|
4
|
+
}
|
|
5
|
+
export declare function formList<T>(list: T[]): FormList<T>;
|
|
6
|
+
export declare function isFormList(list: unknown): boolean;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=form-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-list.d.ts","sourceRoot":"","sources":["../../src/form-list/form-list.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,eAAe,eAA+B,CAAC;AAErD,MAAM,WAAW,QAAQ,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;CACzB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CASlD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,WAEvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-error-path.d.ts","sourceRoot":"","sources":["../../src/get-error-path/get-error-path.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,UAE9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-input-on-change.d.ts","sourceRoot":"","sources":["../../src/get-input-on-change/get-input-on-change.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,2DAEG,CAAC,KAAK,CAAC,WAiBhF"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { formList, isFormList } from './form-list/form-list';
|
|
2
|
+
export { useForm } from './use-form';
|
|
3
|
+
export { zodResolver } from './resolvers/zod-resolver/zod-resolver';
|
|
4
|
+
export { yupResolver } from './resolvers/yup-resolver/yup-resolver';
|
|
5
|
+
export { joiResolver } from './resolvers/joi-resolver/joi-resolver';
|
|
6
|
+
export type { FormErrors, FormRules } from './types';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joi-resolver.d.ts","sourceRoot":"","sources":["../../../src/resolvers/joi-resolver/joi-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkB9C,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,YAErB,OAAO,MAAM,EAAE,GAAG,CAAC,KAAG,UAAU,CAcjD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FormErrors } from '../index';
|
|
2
|
+
export declare const RESOLVER_ERROR_MESSAGES: {
|
|
3
|
+
name: string;
|
|
4
|
+
age: string;
|
|
5
|
+
fruitName: string;
|
|
6
|
+
fruitStock: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function testResolver(schema: (values: Record<string, any>) => FormErrors): void;
|
|
9
|
+
//# sourceMappingURL=test-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-resolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/test-resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,UAAU,EAAW,MAAM,UAAU,CAAC;AAEzD,eAAO,MAAM,uBAAuB;;;;;CAKnC,CAAC;AA6BF,wBAAgB,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,UAAU,QAsD/E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yup-resolver.d.ts","sourceRoot":"","sources":["../../../src/resolvers/yup-resolver/yup-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAe9C,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,YAGrB,OAAO,MAAM,EAAE,GAAG,CAAC,KAAG,UAAU,CAejD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod-resolver.d.ts","sourceRoot":"","sources":["../../../src/resolvers/zod-resolver/zod-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkB9C,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,YAGpD,CAAC,KAAG,UAAU,CAe/B"}
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import type { FormList } from './form-list/form-list';
|
|
3
|
+
export declare type FormErrors = Record<string, React.ReactNode>;
|
|
4
|
+
export declare type FormRulesRecord<T, K extends keyof T = any> = Record<K, T[K] extends FormList<infer U> ? {
|
|
5
|
+
[P in keyof U]?: (value: U[P], values: T) => React.ReactNode;
|
|
6
|
+
} : (value: T[K], values: T) => React.ReactNode>;
|
|
7
|
+
export declare type FormRules<T, K extends keyof T = any> = ((values: T) => FormErrors) | FormRulesRecord<T, K>;
|
|
8
|
+
export interface FormValidationResult {
|
|
9
|
+
hasErrors: boolean;
|
|
10
|
+
errors: FormErrors;
|
|
11
|
+
}
|
|
12
|
+
export interface FormFieldValidationResult {
|
|
13
|
+
hasError: boolean;
|
|
14
|
+
error: React.ReactNode;
|
|
15
|
+
}
|
|
16
|
+
export interface GetInputPropsPayload {
|
|
17
|
+
value: any;
|
|
18
|
+
onChange(event: any): void;
|
|
19
|
+
error?: React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
export interface GetCheckboxPropsPayload {
|
|
22
|
+
checked: boolean;
|
|
23
|
+
onChange(event: any): void;
|
|
24
|
+
error?: React.ReactNode;
|
|
25
|
+
}
|
|
26
|
+
export declare type GetInputPropsFieldType = 'checkbox' | 'input';
|
|
27
|
+
export declare type GetInputProps<T extends GetInputPropsFieldType> = T extends 'checkbox' ? GetCheckboxPropsPayload : GetInputPropsPayload;
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,oBAAY,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AAEzD,oBAAY,eAAe,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,GAAG,IAAI,MAAM,CAC9D,CAAC,EACD,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAC1B;KACG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS;CAC7D,GACD,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAChD,CAAC;AAEF,oBAAY,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,GAAG,IAC5C,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,UAAU,CAAC,GAC3B,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB;AAED,oBAAY,sBAAsB,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1D,oBAAY,aAAa,CAAC,CAAC,SAAS,sBAAsB,IAAI,CAAC,SAAS,UAAU,GAC9E,uBAAuB,GACvB,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { FormList } from './form-list/form-list';
|
|
3
|
+
import type { FormErrors, FormRules, FormValidationResult, FormFieldValidationResult, GetInputProps, GetInputPropsFieldType } from './types';
|
|
4
|
+
export interface UseFormInput<T, K extends keyof T> {
|
|
5
|
+
initialValues: T;
|
|
6
|
+
initialErrors?: FormErrors;
|
|
7
|
+
validate?: FormRules<T, K>;
|
|
8
|
+
schema?: (values: Record<string, any>) => FormErrors;
|
|
9
|
+
}
|
|
10
|
+
export interface UseFormReturnType<T> {
|
|
11
|
+
values: T;
|
|
12
|
+
setValues: React.Dispatch<React.SetStateAction<T>>;
|
|
13
|
+
setFieldValue: <K extends keyof T, V extends T[K]>(field: K, value: V) => void;
|
|
14
|
+
errors: FormErrors;
|
|
15
|
+
setErrors: React.Dispatch<React.SetStateAction<FormErrors>>;
|
|
16
|
+
setFieldError: <K extends keyof T>(field: K, error: React.ReactNode) => void;
|
|
17
|
+
clearFieldError: <K extends keyof T>(field: K) => void;
|
|
18
|
+
clearErrors(): void;
|
|
19
|
+
setListItem: <K extends keyof T, V extends T[K]>(field: K, index: number, value: V extends FormList<infer U> ? U : never) => void;
|
|
20
|
+
addListItem: <K extends keyof T, V extends T[K]>(field: K, payload: V extends FormList<infer U> ? U : never) => void;
|
|
21
|
+
removeListItem: <K extends keyof T>(field: K, indices: number[] | number) => void;
|
|
22
|
+
reorderListItem: <K extends keyof T>(field: K, payload: {
|
|
23
|
+
from: number;
|
|
24
|
+
to: number;
|
|
25
|
+
}) => void;
|
|
26
|
+
validate(): FormValidationResult;
|
|
27
|
+
validateField: (field: string) => FormFieldValidationResult;
|
|
28
|
+
onSubmit(handleSubmit: (values: T, event: React.FormEvent) => void): (event?: React.FormEvent) => void;
|
|
29
|
+
reset(): void;
|
|
30
|
+
getInputProps: <K extends keyof T, L extends GetInputPropsFieldType = 'input'>(field: K, options?: {
|
|
31
|
+
type?: L;
|
|
32
|
+
withError?: boolean;
|
|
33
|
+
}) => GetInputProps<L>;
|
|
34
|
+
getListInputProps: <K extends keyof T, U extends T[K], L extends GetInputPropsFieldType = 'input'>(field: K, index: number, listField: U extends FormList<infer V> ? keyof V : never, options?: {
|
|
35
|
+
type?: L;
|
|
36
|
+
withError?: boolean;
|
|
37
|
+
}) => GetInputProps<L>;
|
|
38
|
+
}
|
|
39
|
+
export declare function useForm<T extends {
|
|
40
|
+
[key: string]: any;
|
|
41
|
+
}, KK extends keyof T = string>({ initialValues, initialErrors, validate: rules, schema, }: UseFormInput<T, KK>): UseFormReturnType<T>;
|
|
42
|
+
//# sourceMappingURL=use-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["../src/use-form.ts"],"names":[],"mappings":";AACA,OAAO,EAAwB,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKvE,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC;IAChD,aAAa,EAAE,CAAC,CAAC;IACjB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,UAAU,CAAC;CACtD;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC;IACV,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/E,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5D,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAC7E,eAAe,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACvD,WAAW,IAAI,IAAI,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC7C,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,KAC3C,IAAI,CAAC;IACV,WAAW,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC7C,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,KAC7C,IAAI,CAAC;IACV,cAAc,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC;IAClF,eAAe,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9F,QAAQ,IAAI,oBAAoB,CAAC;IACjC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,yBAAyB,CAAC;IAC5D,QAAQ,CACN,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,GACxD,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IACrC,KAAK,IAAI,IAAI,CAAC;IACd,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,sBAAsB,GAAG,OAAO,EAC3E,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACxC,aAAa,CAAC,CAAC,CAAC,CAAC;IAEtB,iBAAiB,EAAE,CACjB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,sBAAsB,GAAG,OAAO,EAE1C,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,EACxD,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACxC,aAAa,CAAC,CAAC,CAAC,CAAC;CACvB;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAAE,EAAE,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,EACrF,aAAa,EACb,aAAa,EACb,QAAQ,EAAE,KAAK,EACf,MAAM,GACP,EAAE,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAwK5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-list-values.d.ts","sourceRoot":"","sources":["../../src/validate-values/validate-list-values.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5D,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EACrD,MAAM,EAAE,CAAC,EACT,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,cAmB7B"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FormRules, FormValidationResult, FormFieldValidationResult } from '../types';
|
|
2
|
+
export declare function validateValues(rules: FormRules<any, any>, values: Record<string, any>): FormValidationResult;
|
|
3
|
+
export declare function validateFieldValue(field: string, rules: FormRules<any, any>, values: Record<string, any>): FormFieldValidationResult;
|
|
4
|
+
//# sourceMappingURL=validate-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-values.d.ts","sourceRoot":"","sources":["../../src/validate-values/validate-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,SAAS,EACT,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AA6BlB,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,oBAAoB,CAUtB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,yBAAyB,CAI3B"}
|
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mantine/form",
|
|
3
|
+
"description": "Mantine form management library",
|
|
4
|
+
"version": "3.7.0-alpha.0",
|
|
5
|
+
"main": "cjs/index.js",
|
|
6
|
+
"module": "esm/index.js",
|
|
7
|
+
"types": "lib/index.d.ts",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"author": "Vitaly Rtishchev <rtivital@gmail.com>",
|
|
10
|
+
"sideEffects": false,
|
|
11
|
+
"homepage": "https://mantine.dev",
|
|
12
|
+
"repository": {
|
|
13
|
+
"url": "https://github.com/mantinedev/mantine.git",
|
|
14
|
+
"type": "git",
|
|
15
|
+
"directory": "src/mantine-hooks"
|
|
16
|
+
},
|
|
17
|
+
"peerDependencies": {
|
|
18
|
+
"react": ">=16.8.0"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {},
|
|
21
|
+
"devDependencies": {}
|
|
22
|
+
}
|