@jcoreio/zod-forms 1.2.0 → 2.0.0-beta.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/ConditionalValidator.d.ts +2 -0
- package/ConditionalValidator.d.ts.map +1 -1
- package/ConditionalValidator.js +6 -2
- package/ConditionalValidator.js.map +1 -1
- package/ConditionalValidator.mjs +2 -0
- package/ConditionalValidator.mjs.map +1 -1
- package/FieldPath.d.ts +2 -2
- package/FieldPath.d.ts.map +1 -1
- package/FieldPath.js.map +1 -1
- package/FieldPath.mjs.map +1 -1
- package/FormAction.d.ts +2 -2
- package/FormAction.d.ts.map +1 -1
- package/FormAction.js.map +1 -1
- package/FormAction.mjs.map +1 -1
- package/FormContext.d.ts +7 -6
- package/FormContext.d.ts.map +1 -1
- package/FormContext.js.map +1 -1
- package/FormContext.mjs.map +1 -1
- package/FormState.d.ts +10 -8
- package/FormState.d.ts.map +1 -1
- package/FormState.js.map +1 -1
- package/FormState.mjs.map +1 -1
- package/README.md +2 -2
- package/actions/arrayActions.d.ts +40 -39
- package/actions/arrayActions.d.ts.map +1 -1
- package/actions/arrayActions.js +37 -37
- package/actions/arrayActions.js.map +1 -1
- package/actions/arrayActions.mjs +29 -29
- package/actions/arrayActions.mjs.map +1 -1
- package/actions/initialize.d.ts +5 -4
- package/actions/initialize.d.ts.map +1 -1
- package/actions/initialize.js.map +1 -1
- package/actions/initialize.mjs.map +1 -1
- package/actions/setParsedValue.d.ts +12 -0
- package/actions/setParsedValue.d.ts.map +1 -0
- package/{reducers/setRawValue.js → actions/setParsedValue.js} +9 -26
- package/actions/setParsedValue.js.map +1 -0
- package/actions/setParsedValue.mjs +9 -0
- package/actions/setParsedValue.mjs.map +1 -0
- package/actions/setSubmitStatus.d.ts +3 -3
- package/actions/setSubmitStatus.d.ts.map +1 -1
- package/actions/setSubmitStatus.js.map +1 -1
- package/actions/setSubmitStatus.mjs.map +1 -1
- package/actions/setValue.d.ts +3 -5
- package/actions/setValue.d.ts.map +1 -1
- package/actions/setValue.js +3 -7
- package/actions/setValue.js.map +1 -1
- package/actions/setValue.mjs +2 -3
- package/actions/setValue.mjs.map +1 -1
- package/createFormMiddleware.d.ts.map +1 -1
- package/createFormMiddleware.js +7 -5
- package/createFormMiddleware.js.map +1 -1
- package/createFormMiddleware.mjs +7 -5
- package/createFormMiddleware.mjs.map +1 -1
- package/createFormProvider.d.ts.map +1 -1
- package/createFormProvider.js +10 -10
- package/createFormProvider.js.map +1 -1
- package/createFormProvider.mjs +7 -7
- package/createFormProvider.mjs.map +1 -1
- package/createFormReducer.js +17 -17
- package/createFormReducer.js.map +1 -1
- package/createFormReducer.mjs +17 -17
- package/createFormReducer.mjs.map +1 -1
- package/createSelectFormStatus.d.ts +1 -1
- package/createSelectFormStatus.d.ts.map +1 -1
- package/createSelectFormStatus.js +6 -6
- package/createSelectFormStatus.js.map +1 -1
- package/createSelectFormStatus.mjs +1 -1
- package/createSelectFormStatus.mjs.map +1 -1
- package/createSelectFormValues.d.ts +19 -19
- package/createSelectFormValues.d.ts.map +1 -1
- package/createSelectFormValues.js +5 -5
- package/createSelectFormValues.js.map +1 -1
- package/createSelectFormValues.mjs +3 -3
- package/createSelectFormValues.mjs.map +1 -1
- package/createZodForm.d.ts +4 -4
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js.map +1 -1
- package/index.mjs.map +1 -1
- package/initFormState.js +1 -1
- package/initFormState.js.map +1 -1
- package/initFormState.mjs +1 -1
- package/initFormState.mjs.map +1 -1
- package/package.json +5 -2
- package/reducers/addHandlers.d.ts +6 -6
- package/reducers/arrayInsert.d.ts.map +1 -1
- package/reducers/arrayInsert.js +10 -4
- package/reducers/arrayInsert.js.map +1 -1
- package/reducers/arrayInsert.mjs +6 -4
- package/reducers/arrayInsert.mjs.map +1 -1
- package/reducers/arrayInsertParsed.d.ts +7 -0
- package/reducers/arrayInsertParsed.d.ts.map +1 -0
- package/reducers/arrayInsertParsed.js +16 -0
- package/reducers/arrayInsertParsed.js.map +1 -0
- package/reducers/arrayInsertParsed.mjs +12 -0
- package/reducers/arrayInsertParsed.mjs.map +1 -0
- package/reducers/arrayPush.d.ts.map +1 -1
- package/reducers/arrayPush.js +6 -4
- package/reducers/arrayPush.js.map +1 -1
- package/reducers/arrayPush.mjs +2 -4
- package/reducers/arrayPush.mjs.map +1 -1
- package/reducers/arrayPushParsed.d.ts +7 -0
- package/reducers/{arrayUnshiftRaw.d.ts.map → arrayPushParsed.d.ts.map} +1 -1
- package/reducers/arrayPushParsed.js +15 -0
- package/reducers/arrayPushParsed.js.map +1 -0
- package/reducers/arrayPushParsed.mjs +11 -0
- package/reducers/arrayPushParsed.mjs.map +1 -0
- package/reducers/arraySplice.d.ts.map +1 -1
- package/reducers/arraySplice.js +12 -6
- package/reducers/arraySplice.js.map +1 -1
- package/reducers/arraySplice.mjs +9 -5
- package/reducers/arraySplice.mjs.map +1 -1
- package/reducers/arraySpliceParsed.d.ts +7 -0
- package/reducers/arraySpliceParsed.d.ts.map +1 -0
- package/reducers/arraySpliceParsed.js +20 -0
- package/reducers/arraySpliceParsed.js.map +1 -0
- package/reducers/arraySpliceParsed.mjs +14 -0
- package/reducers/arraySpliceParsed.mjs.map +1 -0
- package/reducers/arrayUnshift.d.ts.map +1 -1
- package/reducers/arrayUnshift.js +6 -4
- package/reducers/arrayUnshift.js.map +1 -1
- package/reducers/arrayUnshift.mjs +2 -4
- package/reducers/arrayUnshift.mjs.map +1 -1
- package/reducers/arrayUnshiftParsed.d.ts +7 -0
- package/reducers/arrayUnshiftParsed.d.ts.map +1 -0
- package/reducers/arrayUnshiftParsed.js +15 -0
- package/reducers/arrayUnshiftParsed.js.map +1 -0
- package/reducers/arrayUnshiftParsed.mjs +11 -0
- package/reducers/arrayUnshiftParsed.mjs.map +1 -0
- package/reducers/initialize.d.ts +12 -12
- package/reducers/initialize.d.ts.map +1 -1
- package/reducers/initialize.js +9 -9
- package/reducers/initialize.js.map +1 -1
- package/reducers/initialize.mjs +8 -8
- package/reducers/initialize.mjs.map +1 -1
- package/reducers/removeHandlers.d.ts +6 -6
- package/reducers/setParsedValue.d.ts +47 -0
- package/reducers/setParsedValue.d.ts.map +1 -0
- package/reducers/setParsedValue.js +41 -0
- package/reducers/setParsedValue.js.map +1 -0
- package/reducers/setParsedValue.mjs +32 -0
- package/reducers/setParsedValue.mjs.map +1 -0
- package/reducers/setSubmitStatus.d.ts +6 -6
- package/reducers/setValue.d.ts +9 -10
- package/reducers/setValue.d.ts.map +1 -1
- package/reducers/setValue.js +9 -15
- package/reducers/setValue.js.map +1 -1
- package/reducers/setValue.mjs +9 -15
- package/reducers/setValue.mjs.map +1 -1
- package/reducers/submitSucceeded.d.ts +6 -6
- package/reducers/submitSucceeded.js +2 -2
- package/reducers/submitSucceeded.js.map +1 -1
- package/reducers/submitSucceeded.mjs +2 -2
- package/reducers/submitSucceeded.mjs.map +1 -1
- package/reducers/util/updateRawArray.d.ts +2 -2
- package/reducers/util/updateRawArray.d.ts.map +1 -1
- package/reducers/util/updateRawArray.js +3 -3
- package/reducers/util/updateRawArray.js.map +1 -1
- package/reducers/util/updateRawArray.mjs +3 -3
- package/reducers/util/updateRawArray.mjs.map +1 -1
- package/src/ConditionalValidator.ts +4 -1
- package/src/FieldPath.ts +3 -5
- package/src/FormAction.ts +2 -2
- package/src/FormContext.ts +7 -6
- package/src/FormState.ts +12 -8
- package/src/actions/arrayActions.ts +66 -58
- package/src/actions/initialize.ts +3 -2
- package/src/actions/setParsedValue.ts +21 -0
- package/src/actions/setSubmitStatus.ts +1 -1
- package/src/actions/setValue.ts +2 -5
- package/src/createFormMiddleware.ts +5 -3
- package/src/createFormProvider.tsx +12 -9
- package/src/createFormReducer.ts +17 -17
- package/src/createSelectFormStatus.ts +5 -5
- package/src/createSelectFormValues.ts +2 -2
- package/src/index.ts +1 -1
- package/src/initFormState.ts +1 -1
- package/src/reducers/arrayInsert.ts +9 -6
- package/src/reducers/arrayInsertParsed.ts +19 -0
- package/src/reducers/arrayPush.ts +5 -7
- package/src/reducers/arrayPushParsed.ts +23 -0
- package/src/reducers/arraySplice.ts +18 -5
- package/src/reducers/arraySpliceParsed.ts +17 -0
- package/src/reducers/arrayUnshift.ts +6 -4
- package/src/reducers/arrayUnshiftParsed.ts +16 -0
- package/src/reducers/initialize.ts +10 -8
- package/src/reducers/setParsedValue.ts +61 -0
- package/src/reducers/setValue.ts +12 -21
- package/src/reducers/submitSucceeded.ts +1 -1
- package/src/reducers/util/updateRawArray.ts +5 -5
- package/src/useArrayField.ts +17 -14
- package/src/useField.ts +27 -25
- package/src/useHtmlField.ts +42 -42
- package/src/useInitialize.ts +1 -1
- package/src/util/maybeParse.ts +2 -2
- package/useArrayField.d.ts +4 -4
- package/useArrayField.d.ts.map +1 -1
- package/useArrayField.js +16 -16
- package/useArrayField.js.map +1 -1
- package/useArrayField.mjs +12 -12
- package/useArrayField.mjs.map +1 -1
- package/useField.d.ts +7 -6
- package/useField.d.ts.map +1 -1
- package/useField.js +25 -25
- package/useField.js.map +1 -1
- package/useField.mjs +19 -19
- package/useField.mjs.map +1 -1
- package/useFormValues.d.ts +4 -4
- package/useHtmlField.js +40 -40
- package/useHtmlField.js.map +1 -1
- package/useHtmlField.mjs +36 -36
- package/useHtmlField.mjs.map +1 -1
- package/useInitialize.d.ts.map +1 -1
- package/useInitialize.js +1 -1
- package/useInitialize.js.map +1 -1
- package/useInitialize.mjs +1 -1
- package/useInitialize.mjs.map +1 -1
- package/util/maybeParse.d.ts +1 -1
- package/util/maybeParse.d.ts.map +1 -1
- package/util/maybeParse.js +2 -2
- package/util/maybeParse.js.map +1 -1
- package/util/maybeParse.mjs +2 -2
- package/util/maybeParse.mjs.map +1 -1
- package/actions/setRawValue.d.ts +0 -9
- package/actions/setRawValue.d.ts.map +0 -1
- package/actions/setRawValue.js +0 -14
- package/actions/setRawValue.js.map +0 -1
- package/actions/setRawValue.mjs +0 -8
- package/actions/setRawValue.mjs.map +0 -1
- package/reducers/arrayInsertRaw.d.ts +0 -7
- package/reducers/arrayInsertRaw.d.ts.map +0 -1
- package/reducers/arrayInsertRaw.js +0 -22
- package/reducers/arrayInsertRaw.js.map +0 -1
- package/reducers/arrayInsertRaw.mjs +0 -14
- package/reducers/arrayInsertRaw.mjs.map +0 -1
- package/reducers/arrayPushRaw.d.ts +0 -7
- package/reducers/arrayPushRaw.d.ts.map +0 -1
- package/reducers/arrayPushRaw.js +0 -17
- package/reducers/arrayPushRaw.js.map +0 -1
- package/reducers/arrayPushRaw.mjs +0 -9
- package/reducers/arrayPushRaw.mjs.map +0 -1
- package/reducers/arraySpliceRaw.d.ts +0 -7
- package/reducers/arraySpliceRaw.d.ts.map +0 -1
- package/reducers/arraySpliceRaw.js +0 -26
- package/reducers/arraySpliceRaw.js.map +0 -1
- package/reducers/arraySpliceRaw.mjs +0 -18
- package/reducers/arraySpliceRaw.mjs.map +0 -1
- package/reducers/arrayUnshiftRaw.d.ts +0 -7
- package/reducers/arrayUnshiftRaw.js +0 -17
- package/reducers/arrayUnshiftRaw.js.map +0 -1
- package/reducers/arrayUnshiftRaw.mjs +0 -9
- package/reducers/arrayUnshiftRaw.mjs.map +0 -1
- package/reducers/setRawValue.d.ts +0 -27
- package/reducers/setRawValue.d.ts.map +0 -1
- package/reducers/setRawValue.js.map +0 -1
- package/reducers/setRawValue.mjs +0 -26
- package/reducers/setRawValue.mjs.map +0 -1
- package/src/actions/setRawValue.ts +0 -17
- package/src/reducers/arrayInsertRaw.ts +0 -22
- package/src/reducers/arrayPushRaw.ts +0 -18
- package/src/reducers/arraySpliceRaw.ts +0 -30
- package/src/reducers/arrayUnshiftRaw.ts +0 -18
- package/src/reducers/setRawValue.ts +0 -40
package/src/useField.ts
CHANGED
|
@@ -3,8 +3,8 @@ import { BasePath, FieldPath } from './FieldPath'
|
|
|
3
3
|
import { FieldMeta } from './FormState'
|
|
4
4
|
import { get } from './util/get'
|
|
5
5
|
import React from 'react'
|
|
6
|
+
import { setParsedValue } from './actions/setParsedValue'
|
|
6
7
|
import { setValue } from './actions/setValue'
|
|
7
|
-
import { setRawValue } from './actions/setRawValue'
|
|
8
8
|
import { setMeta } from './actions/setMeta'
|
|
9
9
|
import {
|
|
10
10
|
useFormSelector as untypedUseFormSelector,
|
|
@@ -19,19 +19,20 @@ import { parsePathstring } from './util/parsePathstring'
|
|
|
19
19
|
import { SchemaAt } from './util/SchemaAt'
|
|
20
20
|
import { maybeParse } from './util/maybeParse'
|
|
21
21
|
import { bindActionsToField } from './util/bindActionsToField'
|
|
22
|
+
import { DeepPartial } from './util/DeepPartial'
|
|
22
23
|
|
|
23
24
|
export type UseFieldProps<Field extends FieldPath> = FieldMeta &
|
|
24
25
|
ReturnType<
|
|
25
26
|
typeof bindActionsToField<{
|
|
27
|
+
setParsedValue: typeof setParsedValue
|
|
26
28
|
setValue: typeof setValue
|
|
27
|
-
setRawValue: typeof setRawValue
|
|
28
29
|
setMeta: typeof setMeta
|
|
29
30
|
}>
|
|
30
31
|
> & {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
parsedValue: DeepPartial<z.output<Field['schema']>> | undefined
|
|
33
|
+
value: DeepPartial<z.input<Field['schema']>> | undefined
|
|
34
|
+
initialParsedValue: DeepPartial<z.output<Field['schema']>> | undefined
|
|
35
|
+
initialValue: DeepPartial<z.input<Field['schema']>> | undefined
|
|
35
36
|
error?: string
|
|
36
37
|
dirty: boolean
|
|
37
38
|
pristine: boolean
|
|
@@ -55,8 +56,8 @@ function useFieldBase<T extends z.ZodTypeAny, Field extends FieldPath>(
|
|
|
55
56
|
type Schema = Field['schema']
|
|
56
57
|
|
|
57
58
|
const {
|
|
59
|
+
setParsedValue,
|
|
58
60
|
setValue,
|
|
59
|
-
setRawValue,
|
|
60
61
|
setMeta,
|
|
61
62
|
selectFormValues,
|
|
62
63
|
selectFieldErrorMap,
|
|
@@ -71,29 +72,30 @@ function useFieldBase<T extends z.ZodTypeAny, Field extends FieldPath>(
|
|
|
71
72
|
createSelector(
|
|
72
73
|
[
|
|
73
74
|
createStructuredSelector({
|
|
74
|
-
|
|
75
|
-
get(
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
parsedValue: ({ parsedValues }) =>
|
|
76
|
+
get(parsedValues, field.path) as z.output<Schema> | undefined,
|
|
77
|
+
value: ({ values }) => get(values, field.path) as unknown,
|
|
78
|
+
initialParsedValue: ({ initialParsedValues }) =>
|
|
79
|
+
get(initialParsedValues, field.path) as
|
|
80
|
+
| z.output<Schema>
|
|
81
|
+
| undefined,
|
|
78
82
|
initialValue: ({ initialValues }) =>
|
|
79
|
-
get(initialValues, field.path) as
|
|
80
|
-
rawInitialValue: ({ rawInitialValues }) =>
|
|
81
|
-
get(rawInitialValues, field.path) as unknown,
|
|
83
|
+
get(initialValues, field.path) as unknown,
|
|
82
84
|
}),
|
|
83
85
|
],
|
|
84
86
|
({
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
value,
|
|
88
|
+
parsedValue = maybeParse(field.schema, value),
|
|
89
|
+
initialValue,
|
|
90
|
+
initialParsedValue = maybeParse(field.schema, initialValue),
|
|
89
91
|
}) => {
|
|
90
|
-
const dirty = !isEqual(
|
|
92
|
+
const dirty = !isEqual(parsedValue, initialParsedValue)
|
|
91
93
|
const pristine = !dirty
|
|
92
94
|
return {
|
|
95
|
+
parsedValue,
|
|
93
96
|
value,
|
|
94
|
-
|
|
97
|
+
initialParsedValue,
|
|
95
98
|
initialValue,
|
|
96
|
-
rawInitialValue,
|
|
97
99
|
dirty,
|
|
98
100
|
pristine,
|
|
99
101
|
}
|
|
@@ -103,7 +105,7 @@ function useFieldBase<T extends z.ZodTypeAny, Field extends FieldPath>(
|
|
|
103
105
|
[field.pathstring]
|
|
104
106
|
)
|
|
105
107
|
|
|
106
|
-
const
|
|
108
|
+
const parsedValues = useFormSelector(valuesSelector, shallowEqual)
|
|
107
109
|
|
|
108
110
|
const error = useFormSelector(
|
|
109
111
|
(state) => selectFieldErrorMap(state)[field.pathstring]
|
|
@@ -112,21 +114,21 @@ function useFieldBase<T extends z.ZodTypeAny, Field extends FieldPath>(
|
|
|
112
114
|
const submitFailed = useFormSelector((state) => state.submitFailed)
|
|
113
115
|
|
|
114
116
|
const boundActions = React.useMemo(
|
|
115
|
-
() => bindActionsToField({
|
|
117
|
+
() => bindActionsToField({ setParsedValue, setValue, setMeta }, field),
|
|
116
118
|
[field.pathstring]
|
|
117
119
|
)
|
|
118
120
|
|
|
119
121
|
return React.useMemo(
|
|
120
122
|
() => ({
|
|
121
123
|
...boundActions,
|
|
122
|
-
...
|
|
124
|
+
...parsedValues,
|
|
123
125
|
visited: meta?.visited || false,
|
|
124
126
|
touched: meta?.touched || submitFailed,
|
|
125
127
|
error,
|
|
126
128
|
valid: !error,
|
|
127
129
|
invalid: Boolean(error),
|
|
128
130
|
}),
|
|
129
|
-
[field.pathstring,
|
|
131
|
+
[field.pathstring, parsedValues, meta, error, submitFailed]
|
|
130
132
|
) as any
|
|
131
133
|
}
|
|
132
134
|
|
package/src/useHtmlField.ts
CHANGED
|
@@ -67,25 +67,25 @@ function useHtmlFieldBase<Field extends FieldPath>(
|
|
|
67
67
|
const { field, type, normalizeOnBlur = true } = options
|
|
68
68
|
const props = useField(field)
|
|
69
69
|
const {
|
|
70
|
+
parsedValue,
|
|
70
71
|
value,
|
|
71
|
-
|
|
72
|
+
initialParsedValue,
|
|
72
73
|
initialValue,
|
|
73
|
-
|
|
74
|
+
setParsedValue,
|
|
74
75
|
setValue,
|
|
75
|
-
setRawValue,
|
|
76
76
|
setMeta,
|
|
77
77
|
...meta
|
|
78
78
|
} = props
|
|
79
79
|
|
|
80
80
|
const { schema } = field
|
|
81
81
|
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
// coerced the
|
|
85
|
-
// This way we can set a
|
|
82
|
+
// tempValue is used for storing blank text when we've coerced the
|
|
83
|
+
// value to null or undefined, or storing numeric text when we've
|
|
84
|
+
// coerced the value to a number or bigint.
|
|
85
|
+
// This way we can set a value that will parse better in the form
|
|
86
86
|
// state without interfering with the text the user is typing.
|
|
87
|
-
const [
|
|
88
|
-
|
|
87
|
+
const [tempValue, setTempValue] = React.useState(
|
|
88
|
+
value as string | null | undefined
|
|
89
89
|
)
|
|
90
90
|
|
|
91
91
|
const tryNumber = React.useMemo(() => acceptsNumber(schema), [schema])
|
|
@@ -93,18 +93,18 @@ function useHtmlFieldBase<Field extends FieldPath>(
|
|
|
93
93
|
|
|
94
94
|
const onChange = React.useCallback(
|
|
95
95
|
(e: React.ChangeEvent) => {
|
|
96
|
-
const
|
|
97
|
-
const normalized =
|
|
96
|
+
const value = getValue(e)
|
|
97
|
+
const normalized = normalizeValue(value, {
|
|
98
98
|
schema,
|
|
99
99
|
tryNumber,
|
|
100
100
|
tryBigint,
|
|
101
101
|
})
|
|
102
|
-
if (typeof
|
|
103
|
-
|
|
102
|
+
if (typeof value === 'string' && typeof normalized !== 'string') {
|
|
103
|
+
setTempValue(value)
|
|
104
104
|
}
|
|
105
|
-
|
|
105
|
+
setValue(normalized)
|
|
106
106
|
},
|
|
107
|
-
[
|
|
107
|
+
[getValue, setValue, schema]
|
|
108
108
|
)
|
|
109
109
|
|
|
110
110
|
const onFocus = React.useCallback(() => {
|
|
@@ -113,23 +113,23 @@ function useHtmlFieldBase<Field extends FieldPath>(
|
|
|
113
113
|
|
|
114
114
|
const onBlur = React.useCallback(
|
|
115
115
|
(e: React.FocusEvent) => {
|
|
116
|
-
let
|
|
116
|
+
let value = normalizeValue(getValue(e), {
|
|
117
117
|
schema,
|
|
118
118
|
tryNumber,
|
|
119
119
|
tryBigint,
|
|
120
120
|
})
|
|
121
121
|
if (normalizeOnBlur) {
|
|
122
|
-
const parsed = field.schema.safeParse(
|
|
122
|
+
const parsed = field.schema.safeParse(value)
|
|
123
123
|
const formatted = parsed.success
|
|
124
124
|
? invert(field.schema).safeParse(parsed.data)
|
|
125
125
|
: undefined
|
|
126
|
-
if (formatted?.success)
|
|
127
|
-
|
|
126
|
+
if (formatted?.success) value = formatted.data
|
|
127
|
+
setValue(value)
|
|
128
128
|
}
|
|
129
|
-
|
|
129
|
+
setTempValue(undefined)
|
|
130
130
|
setMeta({ visited: true, touched: true })
|
|
131
131
|
},
|
|
132
|
-
[
|
|
132
|
+
[getValue, setValue, schema]
|
|
133
133
|
)
|
|
134
134
|
|
|
135
135
|
return React.useMemo(
|
|
@@ -138,32 +138,32 @@ function useHtmlFieldBase<Field extends FieldPath>(
|
|
|
138
138
|
name: field.pathstring,
|
|
139
139
|
type,
|
|
140
140
|
value:
|
|
141
|
-
typeof
|
|
142
|
-
? String(
|
|
143
|
-
: typeof
|
|
144
|
-
?
|
|
145
|
-
:
|
|
146
|
-
...(type === 'checkbox' && { checked: Boolean(
|
|
141
|
+
typeof value === 'boolean'
|
|
142
|
+
? String(value)
|
|
143
|
+
: typeof value === 'string'
|
|
144
|
+
? value || tempValue || ''
|
|
145
|
+
: tempValue || (value == null ? '' : String(value) || ''),
|
|
146
|
+
...(type === 'checkbox' && { checked: Boolean(value) }),
|
|
147
147
|
onChange,
|
|
148
148
|
onFocus,
|
|
149
149
|
onBlur,
|
|
150
150
|
},
|
|
151
151
|
meta: {
|
|
152
152
|
...meta,
|
|
153
|
+
parsedValue,
|
|
153
154
|
value,
|
|
154
|
-
|
|
155
|
+
initialParsedValue,
|
|
155
156
|
initialValue,
|
|
156
|
-
|
|
157
|
+
setParsedValue,
|
|
157
158
|
setValue,
|
|
158
|
-
setRawValue,
|
|
159
159
|
setMeta,
|
|
160
160
|
},
|
|
161
161
|
}),
|
|
162
|
-
[props,
|
|
162
|
+
[props, tempValue, onChange]
|
|
163
163
|
) as any
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
-
function
|
|
166
|
+
function getValue(e: ChangeEvent) {
|
|
167
167
|
const { target } = e
|
|
168
168
|
if (target instanceof HTMLInputElement) {
|
|
169
169
|
return target.type === 'checkbox' ? target.checked : target.value
|
|
@@ -177,37 +177,37 @@ function normalizeBlank(schema: z.ZodTypeAny): any {
|
|
|
177
177
|
return undefined
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
function safeBigInt(
|
|
180
|
+
function safeBigInt(value: string): bigint | undefined {
|
|
181
181
|
try {
|
|
182
|
-
return BigInt(
|
|
182
|
+
return BigInt(value)
|
|
183
183
|
} catch (error) {
|
|
184
184
|
return undefined
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
function
|
|
189
|
-
|
|
188
|
+
function normalizeValue(
|
|
189
|
+
value: string | boolean,
|
|
190
190
|
{
|
|
191
191
|
schema,
|
|
192
192
|
tryNumber,
|
|
193
193
|
tryBigint,
|
|
194
194
|
}: { schema: z.ZodTypeAny; tryNumber: boolean; tryBigint: boolean }
|
|
195
195
|
): string | boolean | number | bigint | null | undefined {
|
|
196
|
-
if (typeof
|
|
197
|
-
if (typeof
|
|
196
|
+
if (typeof value === 'boolean') return value
|
|
197
|
+
if (typeof value === 'string' && !/\S/.test(value)) {
|
|
198
198
|
return normalizeBlank(schema)
|
|
199
199
|
}
|
|
200
|
-
if (typeof
|
|
200
|
+
if (typeof value === 'string' && !schema.safeParse(value).success) {
|
|
201
201
|
if (tryNumber) {
|
|
202
|
-
const num = Number(
|
|
202
|
+
const num = Number(value)
|
|
203
203
|
if (!isNaN(num)) return num
|
|
204
204
|
}
|
|
205
205
|
if (tryBigint) {
|
|
206
|
-
const bigint = safeBigInt(
|
|
206
|
+
const bigint = safeBigInt(value)
|
|
207
207
|
if (bigint != null) return bigint
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
|
-
return
|
|
210
|
+
return value
|
|
211
211
|
}
|
|
212
212
|
|
|
213
213
|
export function useHtmlField<Field extends FieldPath>(
|
package/src/useInitialize.ts
CHANGED
|
@@ -10,7 +10,7 @@ export function useInitialize<
|
|
|
10
10
|
>
|
|
11
11
|
>(
|
|
12
12
|
options: Omit<InitializeAction<T>, 'type'>,
|
|
13
|
-
deps: DependencyList = [options.
|
|
13
|
+
deps: DependencyList = [options.parsedValues, options.values]
|
|
14
14
|
) {
|
|
15
15
|
const { initialize } = useFormContext<T>()
|
|
16
16
|
React.useEffect(() => {
|
package/src/util/maybeParse.ts
CHANGED
|
@@ -2,8 +2,8 @@ import z from 'zod'
|
|
|
2
2
|
|
|
3
3
|
export function maybeParse<T extends z.ZodTypeAny>(
|
|
4
4
|
schema: T,
|
|
5
|
-
|
|
5
|
+
value: unknown
|
|
6
6
|
): z.output<T> | undefined {
|
|
7
|
-
const parsed = schema.safeParse(
|
|
7
|
+
const parsed = schema.safeParse(value)
|
|
8
8
|
return parsed.success ? parsed.data : undefined
|
|
9
9
|
}
|
package/useArrayField.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
|
-
import { FieldPath,
|
|
2
|
+
import { FieldPath, FieldPathForValue } from './FieldPath';
|
|
3
3
|
import { PathInSchema, PathstringInSchema } from './util/PathInSchema';
|
|
4
4
|
import { parsePathstring } from './util/parsePathstring';
|
|
5
5
|
import { SchemaAt } from './util/SchemaAt';
|
|
6
6
|
import { bindActionsToField } from './util/bindActionsToField';
|
|
7
7
|
import { arrayActions } from './actions/arrayActions';
|
|
8
|
+
import { setParsedValue } from './actions/setParsedValue';
|
|
8
9
|
import { setValue } from './actions/setValue';
|
|
9
|
-
import { setRawValue } from './actions/setRawValue';
|
|
10
10
|
import { setMeta } from './actions/setMeta';
|
|
11
11
|
import { FieldMeta } from './FormState';
|
|
12
12
|
export type UseArrayFieldProps<Field extends FieldPath> = NonNullable<z.input<Field['schema']>> extends any[] ? FieldMeta & ReturnType<typeof bindActionsToField<typeof arrayActions & {
|
|
13
|
+
setParsedValue: typeof setParsedValue;
|
|
13
14
|
setValue: typeof setValue;
|
|
14
|
-
setRawValue: typeof setRawValue;
|
|
15
15
|
setMeta: typeof setMeta;
|
|
16
16
|
}>> & {
|
|
17
17
|
elements: FieldPath<SchemaAt<Field['schema'], [number]>>[];
|
|
@@ -24,7 +24,7 @@ export type UseArrayFieldProps<Field extends FieldPath> = NonNullable<z.input<Fi
|
|
|
24
24
|
ERROR: 'not an array field';
|
|
25
25
|
};
|
|
26
26
|
export interface TypedUseArrayField<T extends z.ZodTypeAny> {
|
|
27
|
-
<Field extends
|
|
27
|
+
<Field extends FieldPathForValue<any[] | null | undefined>>(field: Field): UseArrayFieldProps<Field>;
|
|
28
28
|
<Path extends PathInSchema<T>>(path: Path): UseArrayFieldProps<FieldPath<SchemaAt<T, Path>>>;
|
|
29
29
|
<Pathstring extends PathstringInSchema<T>>(path: Pathstring): UseArrayFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>;
|
|
30
30
|
}
|
package/useArrayField.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useArrayField.d.ts","sourceRoot":"","sources":["src/useArrayField.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAY,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"useArrayField.d.ts","sourceRoot":"","sources":["src/useArrayField.ts"],"names":[],"mappings":"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"}
|
package/useArrayField.js
CHANGED
|
@@ -21,36 +21,36 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
21
21
|
function useArrayFieldBase(field) {
|
|
22
22
|
var _useFormContext = (0, _useFormContext3.useFormContext)(),
|
|
23
23
|
arrayActions = _useFormContext.arrayActions,
|
|
24
|
+
setParsedValue = _useFormContext.setParsedValue,
|
|
24
25
|
setValue = _useFormContext.setValue,
|
|
25
|
-
setRawValue = _useFormContext.setRawValue,
|
|
26
26
|
setMeta = _useFormContext.setMeta,
|
|
27
27
|
selectFormValues = _useFormContext.selectFormValues,
|
|
28
28
|
selectFieldErrorMap = _useFormContext.selectFieldErrorMap;
|
|
29
29
|
var useFormSelector = _useFormSelector2.useFormSelector;
|
|
30
30
|
var valuesSelector = _react["default"].useMemo(function () {
|
|
31
31
|
return (0, _reselect.createSelector)([selectFormValues], (0, _reselect.createSelector)([(0, _reselect.createStructuredSelector)({
|
|
32
|
-
|
|
33
|
-
var
|
|
34
|
-
return (0, _get.get)(
|
|
32
|
+
parsedValue: function parsedValue(_ref) {
|
|
33
|
+
var parsedValues = _ref.parsedValues;
|
|
34
|
+
return (0, _get.get)(parsedValues, field.path);
|
|
35
35
|
},
|
|
36
|
-
|
|
37
|
-
var
|
|
38
|
-
return (0, _get.get)(
|
|
36
|
+
value: function value(_ref2) {
|
|
37
|
+
var values = _ref2.values;
|
|
38
|
+
return (0, _get.get)(values, field.path);
|
|
39
39
|
},
|
|
40
|
-
|
|
41
|
-
var
|
|
42
|
-
return (0, _get.get)(
|
|
40
|
+
initialParsedValue: function initialParsedValue(_ref3) {
|
|
41
|
+
var initialParsedValues = _ref3.initialParsedValues;
|
|
42
|
+
return (0, _get.get)(initialParsedValues, field.path);
|
|
43
43
|
}
|
|
44
44
|
})], function (_ref4) {
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var dirty = !(0, _fastDeepEqual["default"])(
|
|
45
|
+
var value = _ref4.value,
|
|
46
|
+
parsedValue = _ref4.parsedValue,
|
|
47
|
+
initialParsedValue = _ref4.initialParsedValue;
|
|
48
|
+
var dirty = !(0, _fastDeepEqual["default"])(parsedValue, initialParsedValue);
|
|
49
49
|
var pristine = !dirty;
|
|
50
50
|
return {
|
|
51
51
|
dirty: dirty,
|
|
52
52
|
pristine: pristine,
|
|
53
|
-
length: Array.isArray(
|
|
53
|
+
length: Array.isArray(value) ? value.length : 0
|
|
54
54
|
};
|
|
55
55
|
}));
|
|
56
56
|
}, [field.pathstring]);
|
|
@@ -69,8 +69,8 @@ function useArrayFieldBase(field) {
|
|
|
69
69
|
});
|
|
70
70
|
var boundActions = _react["default"].useMemo(function () {
|
|
71
71
|
return (0, _bindActionsToField.bindActionsToField)(_objectSpread(_objectSpread({}, arrayActions), {}, {
|
|
72
|
+
setParsedValue: setParsedValue,
|
|
72
73
|
setValue: setValue,
|
|
73
|
-
setRawValue: setRawValue,
|
|
74
74
|
setMeta: setMeta
|
|
75
75
|
}), field);
|
|
76
76
|
}, [field.pathstring]);
|
package/useArrayField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useArrayField.js","names":["_FieldPath","require","_react","_interopRequireDefault","_useFormContext3","_bindActionsToField","_reselect","_get","_fastDeepEqual","_useFormSelector2","_reactRedux","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","useArrayFieldBase","field","_useFormContext","useFormContext","arrayActions","setValue","setRawValue","setMeta","selectFormValues","selectFieldErrorMap","useFormSelector","untypedUseFormSelector","valuesSelector","React","useMemo","createSelector","createStructuredSelector","value","_ref","values","get","path","rawValue","_ref2","rawValues","initialValue","_ref3","initialValues","_ref4","dirty","isEqual","pristine","Array","isArray","pathstring","_useFormSelector","shallowEqual","error","state","meta","fieldMeta","submitFailed","boundActions","bindActionsToField","elements","_toConsumableArray2","map","index","subfield","visited","touched","valid","invalid","Boolean","useArrayField","_useFormContext2","root","FieldPath"],"sources":["src/useArrayField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath, FieldPathForRawValue } from './FieldPath'\nimport React from 'react'\nimport { useFormContext } from './useFormContext'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { bindActionsToField } from './util/bindActionsToField'\nimport { arrayActions } from './actions/arrayActions'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { get } from './util/get'\nimport isEqual from 'fast-deep-equal'\nimport {\n TypedUseFormSelector,\n useFormSelector as untypedUseFormSelector,\n} from './useFormSelector'\nimport { shallowEqual } from 'react-redux'\nimport { setValue } from './actions/setValue'\nimport { setRawValue } from './actions/setRawValue'\nimport { setMeta } from './actions/setMeta'\nimport { FieldMeta } from './FormState'\n\nexport type UseArrayFieldProps<Field extends FieldPath> = NonNullable<\n z.input<Field['schema']>\n> extends any[]\n ? FieldMeta &\n ReturnType<\n typeof bindActionsToField<\n typeof arrayActions & {\n setValue: typeof setValue\n setRawValue: typeof setRawValue\n setMeta: typeof setMeta\n }\n >\n > & {\n elements: FieldPath<SchemaAt<Field['schema'], [number]>>[]\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n : { ERROR: 'not an array field' }\n\nexport interface TypedUseArrayField<T extends z.ZodTypeAny> {\n <Field extends FieldPathForRawValue<any[] | null | undefined>>(\n field: Field\n ): UseArrayFieldProps<Field>\n <Path extends PathInSchema<T>>(path: Path): UseArrayFieldProps<\n FieldPath<SchemaAt<T, Path>>\n >\n <Pathstring extends PathstringInSchema<T>>(\n path: Pathstring\n ): UseArrayFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\n}\n\nfunction useArrayFieldBase<Field extends FieldPath>(\n field: Field\n): UseArrayFieldProps<Field> {\n type T = Field['schema']\n\n const {\n arrayActions,\n setValue,\n setRawValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n value: ({ values }) =>\n get(values, field.path) as z.output<T> | undefined,\n rawValue: ({ rawValues }) =>\n get(rawValues, field.path) as unknown,\n initialValue: ({ initialValues }) =>\n get(initialValues, field.path) as z.output<T> | undefined,\n }),\n ],\n ({ rawValue, value, initialValue }) => {\n const dirty = !isEqual(value, initialValue)\n const pristine = !dirty\n return {\n dirty,\n pristine,\n length: Array.isArray(rawValue) ? rawValue.length : 0,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const { dirty, pristine, length } = useFormSelector(\n valuesSelector,\n shallowEqual\n )\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n\n const boundActions = React.useMemo(\n () =>\n bindActionsToField(\n { ...arrayActions, setValue, setRawValue, setMeta },\n field\n ),\n [field.pathstring]\n )\n const elements = React.useMemo(\n () => [...new Array(length).keys()].map((index) => field.subfield(index)),\n [length]\n )\n\n return React.useMemo(\n () => ({\n ...boundActions,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n error,\n elements,\n dirty,\n pristine,\n valid: !error,\n invalid: Boolean(error),\n }),\n [dirty, boundActions, elements, meta, submitFailed, error]\n ) as any\n}\n\nexport function useArrayField<Field extends FieldPath>(\n field: Field\n): UseArrayFieldProps<Field>\nexport function useArrayField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArrayField<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any\n>(field: Path): UseArrayFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useArrayField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArrayField<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any\n>(\n field: Pathstring\n): UseArrayFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useArrayField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string\n): UseArrayFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useArrayFieldBase(\n field instanceof FieldPath ? field : root.get(field as any)\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useArrayField.js","names":["_FieldPath","require","_react","_interopRequireDefault","_useFormContext3","_bindActionsToField","_reselect","_get","_fastDeepEqual","_useFormSelector2","_reactRedux","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","useArrayFieldBase","field","_useFormContext","useFormContext","arrayActions","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","useFormSelector","untypedUseFormSelector","valuesSelector","React","useMemo","createSelector","createStructuredSelector","parsedValue","_ref","parsedValues","get","path","value","_ref2","values","initialParsedValue","_ref3","initialParsedValues","_ref4","dirty","isEqual","pristine","Array","isArray","pathstring","_useFormSelector","shallowEqual","error","state","meta","fieldMeta","submitFailed","boundActions","bindActionsToField","elements","_toConsumableArray2","map","index","subfield","visited","touched","valid","invalid","Boolean","useArrayField","_useFormContext2","root","FieldPath"],"sources":["src/useArrayField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath, FieldPathForValue } from './FieldPath'\nimport React from 'react'\nimport { useFormContext } from './useFormContext'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { bindActionsToField } from './util/bindActionsToField'\nimport { arrayActions } from './actions/arrayActions'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { get } from './util/get'\nimport isEqual from 'fast-deep-equal'\nimport {\n TypedUseFormSelector,\n useFormSelector as untypedUseFormSelector,\n} from './useFormSelector'\nimport { shallowEqual } from 'react-redux'\nimport { setParsedValue } from './actions/setParsedValue'\nimport { setValue } from './actions/setValue'\nimport { setMeta } from './actions/setMeta'\nimport { FieldMeta } from './FormState'\nimport { DeepPartial } from './util/DeepPartial'\n\nexport type UseArrayFieldProps<Field extends FieldPath> = NonNullable<\n z.input<Field['schema']>\n> extends any[]\n ? FieldMeta &\n ReturnType<\n typeof bindActionsToField<\n typeof arrayActions & {\n setParsedValue: typeof setParsedValue\n setValue: typeof setValue\n setMeta: typeof setMeta\n }\n >\n > & {\n elements: FieldPath<SchemaAt<Field['schema'], [number]>>[]\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n : { ERROR: 'not an array field' }\n\nexport interface TypedUseArrayField<T extends z.ZodTypeAny> {\n <Field extends FieldPathForValue<any[] | null | undefined>>(\n field: Field\n ): UseArrayFieldProps<Field>\n <Path extends PathInSchema<T>>(path: Path): UseArrayFieldProps<\n FieldPath<SchemaAt<T, Path>>\n >\n <Pathstring extends PathstringInSchema<T>>(\n path: Pathstring\n ): UseArrayFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\n}\n\nfunction useArrayFieldBase<Field extends FieldPath>(\n field: Field\n): UseArrayFieldProps<Field> {\n type T = Field['schema']\n\n const {\n arrayActions,\n setParsedValue,\n setValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n parsedValue: ({ parsedValues }) =>\n get(parsedValues, field.path) as\n | DeepPartial<z.output<T>>\n | undefined,\n value: ({ values }) =>\n get(values, field.path) as DeepPartial<z.input<T>> | undefined,\n initialParsedValue: ({ initialParsedValues }) =>\n get(initialParsedValues, field.path) as z.output<T> | undefined,\n }),\n ],\n ({ value, parsedValue, initialParsedValue }) => {\n const dirty = !isEqual(parsedValue, initialParsedValue)\n const pristine = !dirty\n return {\n dirty,\n pristine,\n length: Array.isArray(value) ? value.length : 0,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const { dirty, pristine, length } = useFormSelector(\n valuesSelector,\n shallowEqual\n )\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n\n const boundActions = React.useMemo(\n () =>\n bindActionsToField(\n { ...arrayActions, setParsedValue, setValue, setMeta },\n field\n ),\n [field.pathstring]\n )\n const elements = React.useMemo(\n () => [...new Array(length).keys()].map((index) => field.subfield(index)),\n [length]\n )\n\n return React.useMemo(\n () => ({\n ...boundActions,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n error,\n elements,\n dirty,\n pristine,\n valid: !error,\n invalid: Boolean(error),\n }),\n [dirty, boundActions, elements, meta, submitFailed, error]\n ) as any\n}\n\nexport function useArrayField<Field extends FieldPath>(\n field: Field\n): UseArrayFieldProps<Field>\nexport function useArrayField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArrayField<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any\n>(field: Path): UseArrayFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useArrayField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArrayField<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any\n>(\n field: Pathstring\n): UseArrayFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useArrayField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string\n): UseArrayFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useArrayFieldBase(\n field instanceof FieldPath ? field : root.get(field as any)\n )\n}\n"],"mappings":";;;;;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AAIA,IAAAI,mBAAA,GAAAJ,OAAA;AAEA,IAAAK,SAAA,GAAAL,OAAA;AACA,IAAAM,IAAA,GAAAN,OAAA;AACA,IAAAO,cAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,iBAAA,GAAAR,OAAA;AAIA,IAAAS,WAAA,GAAAT,OAAA;AAA0C,SAAAU,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAyC1C,SAASoB,iBAAiBA,CACxBC,KAAY,EACe;EAG3B,IAAAC,eAAA,GAOI,IAAAC,+BAAc,EAAI,CAAC;IANrBC,YAAY,GAAAF,eAAA,CAAZE,YAAY;IACZC,cAAc,GAAAH,eAAA,CAAdG,cAAc;IACdC,QAAQ,GAAAJ,eAAA,CAARI,QAAQ;IACRC,OAAO,GAAAL,eAAA,CAAPK,OAAO;IACPC,gBAAgB,GAAAN,eAAA,CAAhBM,gBAAgB;IAChBC,mBAAmB,GAAAP,eAAA,CAAnBO,mBAAmB;EAGrB,IAAMC,eAAe,GAAGC,iCAAiD;EAEzE,IAAMC,cAAc,GAAGC,iBAAK,CAACC,OAAO,CAClC;IAAA,OACE,IAAAC,wBAAc,EACZ,CAACP,gBAAgB,CAAC,EAClB,IAAAO,wBAAc,EACZ,CACE,IAAAC,kCAAwB,EAAC;MACvBC,WAAW,EAAE,SAAAA,YAAAC,IAAA;QAAA,IAAGC,YAAY,GAAAD,IAAA,CAAZC,YAAY;QAAA,OAC1B,IAAAC,QAAG,EAACD,YAAY,EAAElB,KAAK,CAACoB,IAAI,CAAC;MAAA,CAEhB;MACfC,KAAK,EAAE,SAAAA,MAAAC,KAAA;QAAA,IAAGC,MAAM,GAAAD,KAAA,CAANC,MAAM;QAAA,OACd,IAAAJ,QAAG,EAACI,MAAM,EAAEvB,KAAK,CAACoB,IAAI,CAAC;MAAA,CAAuC;MAChEI,kBAAkB,EAAE,SAAAA,mBAAAC,KAAA;QAAA,IAAGC,mBAAmB,GAAAD,KAAA,CAAnBC,mBAAmB;QAAA,OACxC,IAAAP,QAAG,EAACO,mBAAmB,EAAE1B,KAAK,CAACoB,IAAI,CAAC;MAAA;IACxC,CAAC,CAAC,CACH,EACD,UAAAO,KAAA,EAAgD;MAAA,IAA7CN,KAAK,GAAAM,KAAA,CAALN,KAAK;QAAEL,WAAW,GAAAW,KAAA,CAAXX,WAAW;QAAEQ,kBAAkB,GAAAG,KAAA,CAAlBH,kBAAkB;MACvC,IAAMI,KAAK,GAAG,CAAC,IAAAC,yBAAO,EAACb,WAAW,EAAEQ,kBAAkB,CAAC;MACvD,IAAMM,QAAQ,GAAG,CAACF,KAAK;MACvB,OAAO;QACLA,KAAK,EAALA,KAAK;QACLE,QAAQ,EAARA,QAAQ;QACRrC,MAAM,EAAEsC,KAAK,CAACC,OAAO,CAACX,KAAK,CAAC,GAAGA,KAAK,CAAC5B,MAAM,GAAG;MAChD,CAAC;IACH,CACF,CACF,CAAC;EAAA,GACH,CAACO,KAAK,CAACiC,UAAU,CACnB,CAAC;EAED,IAAAC,gBAAA,GAAoCzB,eAAe,CACjDE,cAAc,EACdwB,wBACF,CAAC;IAHOP,KAAK,GAAAM,gBAAA,CAALN,KAAK;IAAEE,QAAQ,GAAAI,gBAAA,CAARJ,QAAQ;IAAErC,MAAM,GAAAyC,gBAAA,CAANzC,MAAM;EAK/B,IAAM2C,KAAK,GAAG3B,eAAe,CAC3B,UAAC4B,KAAK;IAAA,OAAK7B,mBAAmB,CAAC6B,KAAK,CAAC,CAACrC,KAAK,CAACiC,UAAU,CAAC;EAAA,CACzD,CAAC;EACD,IAAMK,IAAI,GAAG7B,eAAe,CAAC,UAAC4B,KAAK;IAAA,OAAKA,KAAK,CAACE,SAAS,CAACvC,KAAK,CAACiC,UAAU,CAAC;EAAA,EAAC;EAC1E,IAAMO,YAAY,GAAG/B,eAAe,CAAC,UAAC4B,KAAK;IAAA,OAAKA,KAAK,CAACG,YAAY;EAAA,EAAC;EAEnE,IAAMC,YAAY,GAAG7B,iBAAK,CAACC,OAAO,CAChC;IAAA,OACE,IAAA6B,sCAAkB,EAAAnD,aAAA,CAAAA,aAAA,KACXY,YAAY;MAAEC,cAAc,EAAdA,cAAc;MAAEC,QAAQ,EAARA,QAAQ;MAAEC,OAAO,EAAPA;IAAO,IACpDN,KACF,CAAC;EAAA,GACH,CAACA,KAAK,CAACiC,UAAU,CACnB,CAAC;EACD,IAAMU,QAAQ,GAAG/B,iBAAK,CAACC,OAAO,CAC5B;IAAA,OAAM,IAAA+B,mBAAA,aAAI,IAAIb,KAAK,CAACtC,MAAM,CAAC,CAACV,IAAI,CAAC,CAAC,EAAE8D,GAAG,CAAC,UAACC,KAAK;MAAA,OAAK9C,KAAK,CAAC+C,QAAQ,CAACD,KAAK,CAAC;IAAA,EAAC;EAAA,GACzE,CAACrD,MAAM,CACT,CAAC;EAED,OAAOmB,iBAAK,CAACC,OAAO,CAClB;IAAA,OAAAtB,aAAA,CAAAA,aAAA,KACKkD,YAAY;MACfO,OAAO,EAAE,CAAAV,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEU,OAAO,KAAI,KAAK;MAC/BC,OAAO,EAAE,CAAAX,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEW,OAAO,KAAIT,YAAY;MACtCJ,KAAK,EAALA,KAAK;MACLO,QAAQ,EAARA,QAAQ;MACRf,KAAK,EAALA,KAAK;MACLE,QAAQ,EAARA,QAAQ;MACRoB,KAAK,EAAE,CAACd,KAAK;MACbe,OAAO,EAAEC,OAAO,CAAChB,KAAK;IAAC;EAAA,CACvB,EACF,CAACR,KAAK,EAAEa,YAAY,EAAEE,QAAQ,EAAEL,IAAI,EAAEE,YAAY,EAAEJ,KAAK,CAC3D,CAAC;AACH;AAqBO,SAASiB,aAAaA,CAC3BrD,KAAoC,EACS;EAC7C,IAAAsD,gBAAA,GAAiB,IAAApD,+BAAc,EAAI,CAAC;IAA5BqD,IAAI,GAAAD,gBAAA,CAAJC,IAAI;EACZ,OAAOxD,iBAAiB,CACtBC,KAAK,YAAYwD,oBAAS,GAAGxD,KAAK,GAAGuD,IAAI,CAACpC,GAAG,CAACnB,KAAY,CAC5D,CAAC;AACH","ignoreList":[]}
|
package/useArrayField.mjs
CHANGED
|
@@ -10,34 +10,34 @@ import { shallowEqual } from 'react-redux';
|
|
|
10
10
|
function useArrayFieldBase(field) {
|
|
11
11
|
const {
|
|
12
12
|
arrayActions,
|
|
13
|
+
setParsedValue,
|
|
13
14
|
setValue,
|
|
14
|
-
setRawValue,
|
|
15
15
|
setMeta,
|
|
16
16
|
selectFormValues,
|
|
17
17
|
selectFieldErrorMap
|
|
18
18
|
} = useFormContext();
|
|
19
19
|
const useFormSelector = untypedUseFormSelector;
|
|
20
20
|
const valuesSelector = React.useMemo(() => createSelector([selectFormValues], createSelector([createStructuredSelector({
|
|
21
|
+
parsedValue: ({
|
|
22
|
+
parsedValues
|
|
23
|
+
}) => get(parsedValues, field.path),
|
|
21
24
|
value: ({
|
|
22
25
|
values
|
|
23
26
|
}) => get(values, field.path),
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}) => get(
|
|
27
|
-
initialValue: ({
|
|
28
|
-
initialValues
|
|
29
|
-
}) => get(initialValues, field.path)
|
|
27
|
+
initialParsedValue: ({
|
|
28
|
+
initialParsedValues
|
|
29
|
+
}) => get(initialParsedValues, field.path)
|
|
30
30
|
})], ({
|
|
31
|
-
rawValue,
|
|
32
31
|
value,
|
|
33
|
-
|
|
32
|
+
parsedValue,
|
|
33
|
+
initialParsedValue
|
|
34
34
|
}) => {
|
|
35
|
-
const dirty = !isEqual(
|
|
35
|
+
const dirty = !isEqual(parsedValue, initialParsedValue);
|
|
36
36
|
const pristine = !dirty;
|
|
37
37
|
return {
|
|
38
38
|
dirty,
|
|
39
39
|
pristine,
|
|
40
|
-
length: Array.isArray(
|
|
40
|
+
length: Array.isArray(value) ? value.length : 0
|
|
41
41
|
};
|
|
42
42
|
})), [field.pathstring]);
|
|
43
43
|
const {
|
|
@@ -50,8 +50,8 @@ function useArrayFieldBase(field) {
|
|
|
50
50
|
const submitFailed = useFormSelector(state => state.submitFailed);
|
|
51
51
|
const boundActions = React.useMemo(() => bindActionsToField({
|
|
52
52
|
...arrayActions,
|
|
53
|
+
setParsedValue,
|
|
53
54
|
setValue,
|
|
54
|
-
setRawValue,
|
|
55
55
|
setMeta
|
|
56
56
|
}, field), [field.pathstring]);
|
|
57
57
|
const elements = React.useMemo(() => [...new Array(length).keys()].map(index => field.subfield(index)), [length]);
|
package/useArrayField.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useArrayField.mjs","names":["FieldPath","React","useFormContext","bindActionsToField","createSelector","createStructuredSelector","get","isEqual","useFormSelector","untypedUseFormSelector","shallowEqual","useArrayFieldBase","field","arrayActions","
|
|
1
|
+
{"version":3,"file":"useArrayField.mjs","names":["FieldPath","React","useFormContext","bindActionsToField","createSelector","createStructuredSelector","get","isEqual","useFormSelector","untypedUseFormSelector","shallowEqual","useArrayFieldBase","field","arrayActions","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","valuesSelector","useMemo","parsedValue","parsedValues","path","value","values","initialParsedValue","initialParsedValues","dirty","pristine","length","Array","isArray","pathstring","error","state","meta","fieldMeta","submitFailed","boundActions","elements","keys","map","index","subfield","visited","touched","valid","invalid","Boolean","useArrayField","root"],"sources":["src/useArrayField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath, FieldPathForValue } from './FieldPath'\nimport React from 'react'\nimport { useFormContext } from './useFormContext'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { bindActionsToField } from './util/bindActionsToField'\nimport { arrayActions } from './actions/arrayActions'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { get } from './util/get'\nimport isEqual from 'fast-deep-equal'\nimport {\n TypedUseFormSelector,\n useFormSelector as untypedUseFormSelector,\n} from './useFormSelector'\nimport { shallowEqual } from 'react-redux'\nimport { setParsedValue } from './actions/setParsedValue'\nimport { setValue } from './actions/setValue'\nimport { setMeta } from './actions/setMeta'\nimport { FieldMeta } from './FormState'\nimport { DeepPartial } from './util/DeepPartial'\n\nexport type UseArrayFieldProps<Field extends FieldPath> = NonNullable<\n z.input<Field['schema']>\n> extends any[]\n ? FieldMeta &\n ReturnType<\n typeof bindActionsToField<\n typeof arrayActions & {\n setParsedValue: typeof setParsedValue\n setValue: typeof setValue\n setMeta: typeof setMeta\n }\n >\n > & {\n elements: FieldPath<SchemaAt<Field['schema'], [number]>>[]\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n : { ERROR: 'not an array field' }\n\nexport interface TypedUseArrayField<T extends z.ZodTypeAny> {\n <Field extends FieldPathForValue<any[] | null | undefined>>(\n field: Field\n ): UseArrayFieldProps<Field>\n <Path extends PathInSchema<T>>(path: Path): UseArrayFieldProps<\n FieldPath<SchemaAt<T, Path>>\n >\n <Pathstring extends PathstringInSchema<T>>(\n path: Pathstring\n ): UseArrayFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\n}\n\nfunction useArrayFieldBase<Field extends FieldPath>(\n field: Field\n): UseArrayFieldProps<Field> {\n type T = Field['schema']\n\n const {\n arrayActions,\n setParsedValue,\n setValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n parsedValue: ({ parsedValues }) =>\n get(parsedValues, field.path) as\n | DeepPartial<z.output<T>>\n | undefined,\n value: ({ values }) =>\n get(values, field.path) as DeepPartial<z.input<T>> | undefined,\n initialParsedValue: ({ initialParsedValues }) =>\n get(initialParsedValues, field.path) as z.output<T> | undefined,\n }),\n ],\n ({ value, parsedValue, initialParsedValue }) => {\n const dirty = !isEqual(parsedValue, initialParsedValue)\n const pristine = !dirty\n return {\n dirty,\n pristine,\n length: Array.isArray(value) ? value.length : 0,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const { dirty, pristine, length } = useFormSelector(\n valuesSelector,\n shallowEqual\n )\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n\n const boundActions = React.useMemo(\n () =>\n bindActionsToField(\n { ...arrayActions, setParsedValue, setValue, setMeta },\n field\n ),\n [field.pathstring]\n )\n const elements = React.useMemo(\n () => [...new Array(length).keys()].map((index) => field.subfield(index)),\n [length]\n )\n\n return React.useMemo(\n () => ({\n ...boundActions,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n error,\n elements,\n dirty,\n pristine,\n valid: !error,\n invalid: Boolean(error),\n }),\n [dirty, boundActions, elements, meta, submitFailed, error]\n ) as any\n}\n\nexport function useArrayField<Field extends FieldPath>(\n field: Field\n): UseArrayFieldProps<Field>\nexport function useArrayField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArrayField<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any\n>(field: Path): UseArrayFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useArrayField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArrayField<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any\n>(\n field: Pathstring\n): UseArrayFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useArrayField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string\n): UseArrayFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useArrayFieldBase(\n field instanceof FieldPath ? field : root.get(field as any)\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/useField.d.ts
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
2
|
import { FieldPath } from './FieldPath';
|
|
3
3
|
import { FieldMeta } from './FormState';
|
|
4
|
+
import { setParsedValue } from './actions/setParsedValue';
|
|
4
5
|
import { setValue } from './actions/setValue';
|
|
5
|
-
import { setRawValue } from './actions/setRawValue';
|
|
6
6
|
import { setMeta } from './actions/setMeta';
|
|
7
7
|
import { PathInSchema, PathstringInSchema } from './util/PathInSchema';
|
|
8
8
|
import { parsePathstring } from './util/parsePathstring';
|
|
9
9
|
import { SchemaAt } from './util/SchemaAt';
|
|
10
10
|
import { bindActionsToField } from './util/bindActionsToField';
|
|
11
|
+
import { DeepPartial } from './util/DeepPartial';
|
|
11
12
|
export type UseFieldProps<Field extends FieldPath> = FieldMeta & ReturnType<typeof bindActionsToField<{
|
|
13
|
+
setParsedValue: typeof setParsedValue;
|
|
12
14
|
setValue: typeof setValue;
|
|
13
|
-
setRawValue: typeof setRawValue;
|
|
14
15
|
setMeta: typeof setMeta;
|
|
15
16
|
}>> & {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
parsedValue: DeepPartial<z.output<Field['schema']>> | undefined;
|
|
18
|
+
value: DeepPartial<z.input<Field['schema']>> | undefined;
|
|
19
|
+
initialParsedValue: DeepPartial<z.output<Field['schema']>> | undefined;
|
|
20
|
+
initialValue: DeepPartial<z.input<Field['schema']>> | undefined;
|
|
20
21
|
error?: string;
|
|
21
22
|
dirty: boolean;
|
|
22
23
|
pristine: boolean;
|