@jcoreio/zod-forms 2.0.0-beta.3 → 2.0.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/ConditionalValidator.d.ts.map +1 -1
- package/ConditionalValidator.js +4 -2
- package/ConditionalValidator.js.map +1 -1
- package/ConditionalValidator.mjs +3 -1
- package/ConditionalValidator.mjs.map +1 -1
- package/FieldPath.d.ts.map +1 -1
- package/FieldPath.js +1 -0
- package/FieldPath.js.map +1 -1
- package/FieldPath.mjs.map +1 -1
- package/FormContext.d.ts +1 -1
- package/FormContext.d.ts.map +1 -1
- package/FormContext.js.map +1 -1
- package/FormContext.mjs.map +1 -1
- package/FormState.d.ts +6 -4
- package/FormState.d.ts.map +1 -1
- package/FormState.js.map +1 -1
- package/FormState.mjs.map +1 -1
- package/actions/arrayActions.d.ts +16 -0
- package/actions/arrayActions.d.ts.map +1 -1
- package/actions/arrayActions.js.map +1 -1
- package/actions/arrayActions.mjs.map +1 -1
- package/actions/setSubmitStatus.d.ts +1 -1
- package/createFormMiddleware.js +3 -3
- package/createFormMiddleware.js.map +1 -1
- package/createFormMiddleware.mjs.map +1 -1
- package/createFormProvider.d.ts +9 -3
- package/createFormProvider.d.ts.map +1 -1
- package/createFormProvider.js +10 -3
- package/createFormProvider.js.map +1 -1
- package/createFormProvider.mjs +53 -44
- package/createFormProvider.mjs.map +1 -1
- package/createFormReducer.js +16 -16
- package/createFormReducer.js.map +1 -1
- package/createSelectFieldErrorMap.d.ts +3 -3
- package/createSelectFieldErrorMap.js.map +1 -1
- package/createSelectFieldErrorMap.mjs.map +1 -1
- package/createSelectFormStatus.d.ts +7 -7
- package/createSelectFormStatus.d.ts.map +1 -1
- package/createSelectFormStatus.js.map +1 -1
- package/createSelectFormValues.js.map +1 -1
- package/createZodForm.d.ts +10 -5
- package/createZodForm.d.ts.map +1 -1
- package/package.json +5 -4
- package/reducers/addHandlers.d.ts +2 -2
- package/reducers/addHandlers.d.ts.map +1 -1
- package/reducers/arrayMove.js.map +1 -1
- package/reducers/arrayMove.mjs.map +1 -1
- package/reducers/initialize.d.ts +4 -4
- package/reducers/initialize.d.ts.map +1 -1
- package/reducers/initialize.js.map +1 -1
- package/reducers/initialize.mjs.map +1 -1
- package/reducers/removeHandlers.d.ts +2 -2
- package/reducers/removeHandlers.d.ts.map +1 -1
- package/reducers/setMeta.d.ts.map +1 -1
- package/reducers/setMeta.js +4 -1
- package/reducers/setMeta.js.map +1 -1
- package/reducers/setMeta.mjs +4 -1
- package/reducers/setMeta.mjs.map +1 -1
- package/reducers/setParsedValue.d.ts +2 -2
- package/reducers/setParsedValue.d.ts.map +1 -1
- package/reducers/setParsedValue.js +1 -1
- package/reducers/setParsedValue.js.map +1 -1
- package/reducers/setParsedValue.mjs +1 -1
- package/reducers/setParsedValue.mjs.map +1 -1
- package/reducers/setSubmitStatus.d.ts +2 -2
- package/reducers/setSubmitStatus.d.ts.map +1 -1
- package/reducers/setValue.d.ts +1 -1
- package/reducers/setValue.d.ts.map +1 -1
- package/reducers/submitSucceeded.d.ts +1 -1
- package/reducers/submitSucceeded.d.ts.map +1 -1
- package/reducers/util/updateRawArray.js.map +1 -1
- package/reducers/util/updateRawArray.mjs.map +1 -1
- package/src/ConditionalValidator.ts +11 -12
- package/src/FieldPath.ts +34 -54
- package/src/FormContext.ts +1 -1
- package/src/FormState.ts +4 -4
- package/src/actions/arrayActions.ts +21 -4
- package/src/createFormMiddleware.ts +2 -2
- package/src/createFormProvider.tsx +14 -2
- package/src/createSelectFieldErrorMap.ts +12 -10
- package/src/reducers/arrayMove.ts +2 -2
- package/src/reducers/initialize.ts +3 -3
- package/src/reducers/setMeta.ts +4 -1
- package/src/reducers/setParsedValue.ts +10 -9
- package/src/reducers/util/updateRawArray.ts +4 -4
- package/src/useArrayField.ts +18 -13
- package/src/useField.ts +15 -13
- package/src/useFormContext.ts +2 -2
- package/src/useFormDispatch.ts +3 -7
- package/src/useHtmlField.ts +18 -20
- package/src/useInitialize.ts +1 -1
- package/src/util/DeepPartial.ts +2 -3
- package/src/util/PathInType.ts +16 -16
- package/src/util/SchemaAt.ts +38 -49
- package/src/util/bindActionsToField.ts +6 -7
- package/src/util/parsePathstring.ts +47 -41
- package/src/util/pathstring.ts +9 -13
- package/src/util/set.ts +4 -1
- package/useArrayField.d.ts +1 -1
- package/useArrayField.d.ts.map +1 -1
- package/useArrayField.js +3 -1
- package/useArrayField.js.map +1 -1
- package/useArrayField.mjs +3 -1
- package/useArrayField.mjs.map +1 -1
- package/useField.d.ts.map +1 -1
- package/useField.js.map +1 -1
- package/useField.mjs.map +1 -1
- package/useFormContext.js.map +1 -1
- package/useFormContext.mjs.map +1 -1
- package/useFormDispatch.d.ts +1 -3
- package/useFormDispatch.d.ts.map +1 -1
- package/useFormDispatch.js.map +1 -1
- package/useFormDispatch.mjs.map +1 -1
- package/useFormStatus.d.ts +1 -1
- package/useHtmlField.d.ts +1 -1
- package/useHtmlField.d.ts.map +1 -1
- package/useHtmlField.js +1 -1
- package/useHtmlField.js.map +1 -1
- package/useHtmlField.mjs +1 -1
- package/useHtmlField.mjs.map +1 -1
- package/useInitialize.js.map +1 -1
- package/useInitialize.mjs.map +1 -1
- package/useSubmit.js.map +1 -1
- package/util/DeepPartial.d.ts.map +1 -1
- package/util/DeepPartial.js.map +1 -1
- package/util/DeepPartial.mjs.map +1 -1
- package/util/PathInType.d.ts +2 -1
- package/util/PathInType.d.ts.map +1 -1
- package/util/PathInType.js.map +1 -1
- package/util/PathInType.mjs.map +1 -1
- package/util/SchemaAt.d.ts +1 -1
- package/util/SchemaAt.d.ts.map +1 -1
- package/util/SchemaAt.js.map +1 -1
- package/util/SchemaAt.mjs.map +1 -1
- package/util/bindActionsToField.d.ts +1 -1
- package/util/bindActionsToField.d.ts.map +1 -1
- package/util/bindActionsToField.js.map +1 -1
- package/util/bindActionsToField.mjs.map +1 -1
- package/util/parsePathstring.d.ts +23 -6
- package/util/parsePathstring.d.ts.map +1 -1
- package/util/parsePathstring.js.map +1 -1
- package/util/parsePathstring.mjs.map +1 -1
- package/util/pathstring.d.ts +2 -8
- package/util/pathstring.d.ts.map +1 -1
- package/util/pathstring.js.map +1 -1
- package/util/pathstring.mjs.map +1 -1
- package/util/set.d.ts.map +1 -1
- package/util/set.js +1 -4
- package/util/set.js.map +1 -1
- package/util/set.mjs +1 -3
- package/util/set.mjs.map +1 -1
package/src/useHtmlField.ts
CHANGED
|
@@ -26,10 +26,11 @@ export type ValidUseHtmlFieldProps<Field extends FieldPath> = {
|
|
|
26
26
|
meta: UseFieldProps<Field>
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
export type UseHtmlFieldProps<Field extends FieldPath> =
|
|
30
|
-
Field['schema']
|
|
31
|
-
|
|
32
|
-
?
|
|
29
|
+
export type UseHtmlFieldProps<Field extends FieldPath> =
|
|
30
|
+
z.input<Field['schema']> extends (
|
|
31
|
+
string | number | bigint | boolean | null | undefined
|
|
32
|
+
) ?
|
|
33
|
+
{
|
|
33
34
|
input: HtmlFieldInputProps
|
|
34
35
|
meta: UseFieldProps<Field>
|
|
35
36
|
}
|
|
@@ -39,14 +40,12 @@ export type UseHtmlFieldProps<Field extends FieldPath> = z.input<
|
|
|
39
40
|
|
|
40
41
|
export type UseHtmlFieldOptions<
|
|
41
42
|
Field,
|
|
42
|
-
Schema extends z.ZodTypeAny = Field extends FieldPath<infer S>
|
|
43
|
-
|
|
44
|
-
: z.ZodTypeAny
|
|
43
|
+
Schema extends z.ZodTypeAny = Field extends FieldPath<infer S> ? S
|
|
44
|
+
: z.ZodTypeAny,
|
|
45
45
|
> = {
|
|
46
46
|
field: Field
|
|
47
|
-
type: z.input<Schema> extends boolean | null | undefined
|
|
48
|
-
|
|
49
|
-
: Exclude<HTMLInputTypeAttribute, 'checkbox'>
|
|
47
|
+
type: z.input<Schema> extends boolean | null | undefined ? 'checkbox'
|
|
48
|
+
: Exclude<HTMLInputTypeAttribute, 'checkbox'>
|
|
50
49
|
normalizeOnBlur?: boolean
|
|
51
50
|
}
|
|
52
51
|
|
|
@@ -121,8 +120,9 @@ function useHtmlFieldBase<Field extends FieldPath>(
|
|
|
121
120
|
})
|
|
122
121
|
if (normalizeOnBlur) {
|
|
123
122
|
const parsed = field.schema.safeParse(value)
|
|
124
|
-
const formatted =
|
|
125
|
-
|
|
123
|
+
const formatted =
|
|
124
|
+
parsed.success ?
|
|
125
|
+
invert(field.schema).safeParse(parsed.data)
|
|
126
126
|
: undefined
|
|
127
127
|
if (formatted?.success) value = formatted.data
|
|
128
128
|
setValue(value)
|
|
@@ -139,11 +139,9 @@ function useHtmlFieldBase<Field extends FieldPath>(
|
|
|
139
139
|
name: field.pathstring,
|
|
140
140
|
type,
|
|
141
141
|
value:
|
|
142
|
-
typeof value === 'boolean'
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
? value || tempValue || ''
|
|
146
|
-
: tempValue || (value == null ? '' : String(value) || ''),
|
|
142
|
+
typeof value === 'boolean' ? String(value)
|
|
143
|
+
: typeof value === 'string' ? value || tempValue || ''
|
|
144
|
+
: tempValue || (value == null ? '' : String(value) || ''),
|
|
147
145
|
...(type === 'checkbox' && { checked: Boolean(value) }),
|
|
148
146
|
onChange,
|
|
149
147
|
onFocus,
|
|
@@ -181,7 +179,7 @@ function normalizeBlank(schema: z.ZodTypeAny): any {
|
|
|
181
179
|
function safeBigInt(value: string): bigint | undefined {
|
|
182
180
|
try {
|
|
183
181
|
return BigInt(value)
|
|
184
|
-
} catch
|
|
182
|
+
} catch {
|
|
185
183
|
return undefined
|
|
186
184
|
}
|
|
187
185
|
}
|
|
@@ -219,7 +217,7 @@ export function useHtmlField<
|
|
|
219
217
|
z.ZodNever,
|
|
220
218
|
'cast to TypedUseHtmlField<T> to pass a path array'
|
|
221
219
|
>,
|
|
222
|
-
Path extends PathInSchema<T> = any
|
|
220
|
+
Path extends PathInSchema<T> = any,
|
|
223
221
|
>(
|
|
224
222
|
options: UseHtmlFieldOptions<Path, SchemaAt<T, Path>>
|
|
225
223
|
): UseHtmlFieldProps<FieldPath<SchemaAt<T, Path>>>
|
|
@@ -228,7 +226,7 @@ export function useHtmlField<
|
|
|
228
226
|
z.ZodNever,
|
|
229
227
|
'cast to TypedUseHtmlField<T> to pass a pathstring'
|
|
230
228
|
>,
|
|
231
|
-
Path extends PathstringInSchema<T> = any
|
|
229
|
+
Path extends PathstringInSchema<T> = any,
|
|
232
230
|
>(
|
|
233
231
|
options: UseHtmlFieldOptions<Path, SchemaAt<T, parsePathstring<Path>>>
|
|
234
232
|
): UseHtmlFieldProps<FieldPath<SchemaAt<T, parsePathstring<Path>>>>
|
package/src/useInitialize.ts
CHANGED
package/src/util/DeepPartial.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export type DeepPartial<T> =
|
|
2
|
-
? { [K in keyof T]?: DeepPartial<T[K]> }
|
|
3
|
-
: T
|
|
1
|
+
export type DeepPartial<T> =
|
|
2
|
+
T extends object | any[] ? { [K in keyof T]?: DeepPartial<T[K]> } : T
|
package/src/util/PathInType.ts
CHANGED
|
@@ -3,22 +3,22 @@ import { pathstring } from './pathstring'
|
|
|
3
3
|
|
|
4
4
|
export type PathInType<T> = [] | SubPathInType<T>
|
|
5
5
|
|
|
6
|
-
type SubPathInType<T> =
|
|
7
|
-
? BasePath
|
|
8
|
-
: T extends
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
: T extends readonly any[]
|
|
21
|
-
|
|
6
|
+
type SubPathInType<T> =
|
|
7
|
+
0 extends 1 & T ? BasePath
|
|
8
|
+
: T extends (
|
|
9
|
+
| string
|
|
10
|
+
| number
|
|
11
|
+
| boolean
|
|
12
|
+
| bigint
|
|
13
|
+
| symbol
|
|
14
|
+
| null
|
|
15
|
+
| undefined
|
|
16
|
+
| void
|
|
17
|
+
| ((...args: any[]) => any)
|
|
18
|
+
) ?
|
|
19
|
+
[]
|
|
20
|
+
: T extends readonly any[] ?
|
|
21
|
+
{ [K in keyof T & number]-?: [K, ...PathInType<T[K]>] }[keyof T & number]
|
|
22
22
|
: {
|
|
23
23
|
[K in keyof T]-?: K extends symbol ? never : [K, ...PathInType<T[K]>]
|
|
24
24
|
}[keyof T]
|
package/src/util/SchemaAt.ts
CHANGED
|
@@ -2,67 +2,56 @@ import z from 'zod'
|
|
|
2
2
|
|
|
3
3
|
type BasePath = (string | number)[]
|
|
4
4
|
|
|
5
|
-
export type SchemaAt<T extends z.ZodTypeAny, Path> =
|
|
6
|
-
? z.ZodTypeAny
|
|
7
|
-
: 0 extends 1 & T
|
|
8
|
-
? z.ZodTypeAny
|
|
9
|
-
:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
? SchemaAt<U, Path>
|
|
14
|
-
: T extends z.
|
|
15
|
-
? SchemaAt<U, Path>
|
|
16
|
-
: T extends z.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
? SchemaAt<
|
|
20
|
-
: T extends z.
|
|
21
|
-
? SchemaAt<U, Path>
|
|
22
|
-
: T extends z.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
? SchemaAt<Options[number], Path>
|
|
26
|
-
: T extends z.ZodDiscriminatedUnion<any, infer Options>
|
|
27
|
-
? SchemaAt<Options[number], Path>
|
|
28
|
-
: T extends z.ZodPipeline<infer In, any>
|
|
29
|
-
? SchemaAt<In, Path>
|
|
30
|
-
: T extends z.ZodEffects<infer U>
|
|
31
|
-
? SchemaAt<U, Path>
|
|
32
|
-
: T extends z.ZodReadonly<infer U>
|
|
33
|
-
? SchemaAt<U, Path>
|
|
34
|
-
: T extends z.ZodRecord<infer Key, infer Value>
|
|
35
|
-
? Head extends z.input<Key>
|
|
36
|
-
? SchemaAt<Value, Tail>
|
|
5
|
+
export type SchemaAt<T extends z.ZodTypeAny, Path> =
|
|
6
|
+
0 extends 1 & Path ? z.ZodTypeAny
|
|
7
|
+
: 0 extends 1 & T ? z.ZodTypeAny
|
|
8
|
+
: 0 extends 1 & z.input<T> ? z.ZodTypeAny
|
|
9
|
+
: Path extends [infer Head, ...infer Tail extends BasePath] ?
|
|
10
|
+
T extends z.ZodLazy<infer U> ? SchemaAt<U, Path>
|
|
11
|
+
: T extends z.ZodCatch<infer U> ? SchemaAt<U, Path>
|
|
12
|
+
: T extends z.ZodBranded<infer U, any> ? SchemaAt<U, Path>
|
|
13
|
+
: T extends z.ZodOptional<infer U> ? SchemaAt<U, Path>
|
|
14
|
+
: T extends z.ZodDefault<infer U> ? SchemaAt<U, Path>
|
|
15
|
+
: T extends z.ZodNullable<infer U> ? SchemaAt<U, Path>
|
|
16
|
+
: T extends z.ZodUnion<infer Options> ? SchemaAt<Options[number], Path>
|
|
17
|
+
: T extends z.ZodDiscriminatedUnion<any, infer Options> ?
|
|
18
|
+
SchemaAt<Options[number], Path>
|
|
19
|
+
: T extends z.ZodPipeline<infer In, any> ? SchemaAt<In, Path>
|
|
20
|
+
: T extends z.ZodEffects<infer U> ? SchemaAt<U, Path>
|
|
21
|
+
: T extends z.ZodReadonly<infer U> ? SchemaAt<U, Path>
|
|
22
|
+
: T extends z.ZodRecord<infer Key, infer Value> ?
|
|
23
|
+
Head extends z.input<Key> ?
|
|
24
|
+
SchemaAt<Value, Tail>
|
|
37
25
|
: never
|
|
38
|
-
: T extends z.ZodMap<infer Key, infer Value>
|
|
39
|
-
|
|
40
|
-
|
|
26
|
+
: T extends z.ZodMap<infer Key, infer Value> ?
|
|
27
|
+
Head extends z.input<Key> ?
|
|
28
|
+
SchemaAt<Value, Tail>
|
|
41
29
|
: never
|
|
42
|
-
: T extends
|
|
30
|
+
: T extends (
|
|
31
|
+
z.ZodObject<
|
|
43
32
|
infer Shape,
|
|
44
33
|
infer UnknownKeys,
|
|
45
34
|
infer Catchall extends z.ZodTypeAny
|
|
46
35
|
>
|
|
47
|
-
?
|
|
48
|
-
? SchemaAt<Shape[Head], Tail>
|
|
49
|
-
: UnknownKeys extends 'passthrough'
|
|
50
|
-
? SchemaAt<Catchall, Tail>
|
|
36
|
+
) ?
|
|
37
|
+
Head extends keyof Shape ? SchemaAt<Shape[Head], Tail>
|
|
38
|
+
: UnknownKeys extends 'passthrough' ? SchemaAt<Catchall, Tail>
|
|
51
39
|
: never
|
|
52
|
-
: T extends
|
|
40
|
+
: T extends (
|
|
41
|
+
z.ZodTuple<
|
|
53
42
|
infer Elements extends [z.ZodTypeAny, ...z.ZodTypeAny[]],
|
|
54
43
|
infer Rest
|
|
55
44
|
>
|
|
56
|
-
?
|
|
57
|
-
? SchemaAt<Elements[Head], Tail>
|
|
58
|
-
: Rest extends z.ZodTypeAny
|
|
59
|
-
|
|
60
|
-
|
|
45
|
+
) ?
|
|
46
|
+
Head extends number & keyof Elements ? SchemaAt<Elements[Head], Tail>
|
|
47
|
+
: Rest extends z.ZodTypeAny ?
|
|
48
|
+
Head extends number ?
|
|
49
|
+
SchemaAt<Rest, Tail>
|
|
61
50
|
: never
|
|
62
51
|
: never
|
|
63
|
-
: T extends z.ZodArray<infer Element>
|
|
64
|
-
|
|
65
|
-
|
|
52
|
+
: T extends z.ZodArray<infer Element> ?
|
|
53
|
+
Head extends number ?
|
|
54
|
+
SchemaAt<Element, Tail>
|
|
66
55
|
: never
|
|
67
56
|
: never
|
|
68
57
|
: T
|
|
@@ -4,22 +4,21 @@ export function bindActionsToField<
|
|
|
4
4
|
Field extends FieldPath,
|
|
5
5
|
Actions extends {
|
|
6
6
|
[K in string]: (field: Field, ...rest: any[]) => any
|
|
7
|
-
}
|
|
7
|
+
},
|
|
8
8
|
>(
|
|
9
9
|
actions: Actions,
|
|
10
10
|
field: Field
|
|
11
11
|
): {
|
|
12
12
|
[K in keyof Actions]: Actions[K] extends (
|
|
13
|
-
field: Field,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
: never
|
|
13
|
+
(field: Field, ...rest: infer Rest) => infer Return
|
|
14
|
+
) ?
|
|
15
|
+
(...rest: Rest) => Return
|
|
16
|
+
: never
|
|
18
17
|
} {
|
|
19
18
|
return Object.fromEntries(
|
|
20
19
|
Object.entries(actions).map(([key, action]: any) => [
|
|
21
20
|
key,
|
|
22
21
|
(...args: any[]) => action(field, ...args),
|
|
23
22
|
])
|
|
24
|
-
)
|
|
23
|
+
)
|
|
25
24
|
}
|
|
@@ -1,44 +1,43 @@
|
|
|
1
1
|
import { BasePath } from '../FieldPath'
|
|
2
2
|
|
|
3
|
-
export type parsePathstring<Path extends string, IsTail = false> =
|
|
4
|
-
Path
|
|
5
|
-
] extends [
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
export type parsePathstring<Path extends string, IsTail = false> =
|
|
4
|
+
[Path] extends [''] ? []
|
|
5
|
+
: [Path] extends [`[${infer Rest}`] ?
|
|
6
|
+
Rest extends `${infer N extends number}]${infer Tail}` ?
|
|
7
|
+
[N, ...parsePathstring<Tail, true>]
|
|
8
|
+
: ExtractInitialStringLiteral<Rest> extends (
|
|
9
|
+
infer StringLiteral extends string
|
|
10
|
+
) ?
|
|
11
|
+
[
|
|
12
12
|
ProcessStringLiteral<StringLiteral>,
|
|
13
|
-
...(Rest extends `${StringLiteral}]${infer Tail}`
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
...(Rest extends `${StringLiteral}]${infer Tail}` ?
|
|
14
|
+
parsePathstring<Tail, true>
|
|
15
|
+
: never),
|
|
16
16
|
]
|
|
17
17
|
: never
|
|
18
|
-
: [IsTail] extends [true]
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
: [IsTail] extends [true] ?
|
|
19
|
+
[Path] extends [`.${infer Rest}`] ?
|
|
20
|
+
parsePathstring<Rest>
|
|
21
21
|
: never
|
|
22
|
-
: [Path] extends [`${infer Head}[${infer Tail}`]
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
: [Path] extends [`${infer Head}[${infer Tail}`] ?
|
|
23
|
+
[Path] extends [`${infer Head2}.${infer Tail2}`] ?
|
|
24
|
+
Head2 extends (
|
|
25
|
+
`${Head}[${string}` // make sure we pick up to . or [, whichever comes first
|
|
26
|
+
) ?
|
|
27
|
+
[Head, ...parsePathstring<`[${Tail}`, true>]
|
|
26
28
|
: [Head2, ...parsePathstring<`.${Tail2}`, true>]
|
|
27
29
|
: [Head, ...parsePathstring<`[${Tail}`, true>]
|
|
28
|
-
: [Path] extends [`${infer Head}.${infer Tail}`]
|
|
29
|
-
|
|
30
|
+
: [Path] extends [`${infer Head}.${infer Tail}`] ?
|
|
31
|
+
[Head, ...parsePathstring<`.${Tail}`, true>]
|
|
30
32
|
: [Path]
|
|
31
33
|
|
|
32
34
|
/**
|
|
33
35
|
* If T starts with a quoted string literal, returns that string literal.
|
|
34
36
|
* Otherwise returns never
|
|
35
37
|
*/
|
|
36
|
-
type ExtractInitialStringLiteral<T extends string> =
|
|
37
|
-
`"${infer Rest}`
|
|
38
|
-
]
|
|
39
|
-
? `"${RestOfStringLiteral<Rest, '"'>}`
|
|
40
|
-
: [T] extends [`'${infer Rest}`]
|
|
41
|
-
? `'${RestOfStringLiteral<Rest, "'">}`
|
|
38
|
+
type ExtractInitialStringLiteral<T extends string> =
|
|
39
|
+
[T] extends [`"${infer Rest}`] ? `"${RestOfStringLiteral<Rest, '"'>}`
|
|
40
|
+
: [T] extends [`'${infer Rest}`] ? `'${RestOfStringLiteral<Rest, "'">}`
|
|
42
41
|
: never
|
|
43
42
|
|
|
44
43
|
type RestOfStringLiteral<
|
|
@@ -49,13 +48,20 @@ type RestOfStringLiteral<
|
|
|
49
48
|
/**
|
|
50
49
|
* The opening quote type
|
|
51
50
|
*/
|
|
52
|
-
Q extends '"' | "'"
|
|
53
|
-
> =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
Q extends '"' | "'",
|
|
52
|
+
> =
|
|
53
|
+
[T] extends (
|
|
54
|
+
[`${infer A}${Q}${infer B}`] // find the next quote
|
|
55
|
+
) ?
|
|
56
|
+
A extends (
|
|
57
|
+
`${infer C}\\${infer D}` // the quote may be escaped, so find the first backslash
|
|
58
|
+
) ?
|
|
59
|
+
D extends (
|
|
60
|
+
'' // nothing after the backslash, so it escapes the quote Q
|
|
61
|
+
) ?
|
|
62
|
+
`${A}${Q}${RestOfStringLiteral<B, Q>}` // keep scanning until the closing quote
|
|
63
|
+
: D extends `${infer E extends keyof EscapeChars}${infer F}` ?
|
|
64
|
+
`${C}\\${E}${RestOfStringLiteral<`${F}${Q}${B}`, Q>}` // keep scanning until the closing quote
|
|
59
65
|
: never
|
|
60
66
|
: `${A}${Q}` // no backslash, Q is a closing quote and we're done!
|
|
61
67
|
: never
|
|
@@ -73,16 +79,16 @@ const EscapeChars = {
|
|
|
73
79
|
v: '\v',
|
|
74
80
|
} as const
|
|
75
81
|
|
|
76
|
-
type ProcessEscapes<T extends string> =
|
|
77
|
-
|
|
78
|
-
|
|
82
|
+
type ProcessEscapes<T extends string> =
|
|
83
|
+
T extends `${infer A}\\${infer B}` ?
|
|
84
|
+
B extends `${infer C extends keyof EscapeChars}${infer D}` ?
|
|
85
|
+
`${A}${EscapeChars[C]}${ProcessEscapes<D>}`
|
|
79
86
|
: never
|
|
80
87
|
: T
|
|
81
88
|
|
|
82
|
-
type ProcessStringLiteral<T extends string> =
|
|
83
|
-
? ProcessEscapes<Content>
|
|
84
|
-
: T extends `'${infer Content}'`
|
|
85
|
-
? ProcessEscapes<Content>
|
|
89
|
+
type ProcessStringLiteral<T extends string> =
|
|
90
|
+
T extends `"${infer Content}"` ? ProcessEscapes<Content>
|
|
91
|
+
: T extends `'${infer Content}'` ? ProcessEscapes<Content>
|
|
86
92
|
: never
|
|
87
93
|
|
|
88
94
|
const pathstringRx =
|
package/src/util/pathstring.ts
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
type PathElem = string | number
|
|
2
2
|
type BasePath = PathElem[]
|
|
3
3
|
|
|
4
|
-
export type pathstring<Path> =
|
|
5
|
-
infer Head extends PathElem,
|
|
6
|
-
|
|
7
|
-
]
|
|
8
|
-
? `${Head extends number ? `[${Head}]` : Head}${pathstringTail<Tail>}`
|
|
4
|
+
export type pathstring<Path> =
|
|
5
|
+
Path extends [infer Head extends PathElem, ...infer Tail extends PathElem[]] ?
|
|
6
|
+
`${Head extends number ? `[${Head}]` : Head}${pathstringTail<Tail>}`
|
|
9
7
|
: ''
|
|
10
8
|
|
|
11
|
-
type pathstringTail<Path extends BasePath> =
|
|
12
|
-
infer Head extends PathElem,
|
|
13
|
-
|
|
14
|
-
]
|
|
15
|
-
? `${Head extends number ? `[${Head}]` : `.${Head}`}${pathstringTail<Tail>}`
|
|
9
|
+
type pathstringTail<Path extends BasePath> =
|
|
10
|
+
Path extends [infer Head extends PathElem, ...infer Tail extends PathElem[]] ?
|
|
11
|
+
`${Head extends number ? `[${Head}]` : `.${Head}`}${pathstringTail<Tail>}`
|
|
16
12
|
: ''
|
|
17
13
|
|
|
18
14
|
export function pathstring<Path extends BasePath>(
|
|
@@ -20,9 +16,9 @@ export function pathstring<Path extends BasePath>(
|
|
|
20
16
|
): pathstring<Path> {
|
|
21
17
|
return path
|
|
22
18
|
.map((elem, index) =>
|
|
23
|
-
typeof elem === 'string' && isValidIdentifier(elem)
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
typeof elem === 'string' && isValidIdentifier(elem) ?
|
|
20
|
+
`${index > 0 ? '.' : ''}${elem}`
|
|
21
|
+
: `[${JSON.stringify(elem)}]`
|
|
26
22
|
)
|
|
27
23
|
.join('') as any
|
|
28
24
|
}
|
package/src/util/set.ts
CHANGED
|
@@ -17,7 +17,10 @@ export function set(
|
|
|
17
17
|
const oldValue = (from as any)[path[index]]
|
|
18
18
|
const newValue = set(oldValue, path, value, index + 1)
|
|
19
19
|
if (Object.is(oldValue, newValue)) return from
|
|
20
|
-
const result: any =
|
|
20
|
+
const result: any =
|
|
21
|
+
Array.isArray(from) ?
|
|
22
|
+
[...from]
|
|
23
|
+
: Object.assign(Object.create(Object.getPrototypeOf(from)), from)
|
|
21
24
|
result[path[index]] = newValue
|
|
22
25
|
return result
|
|
23
26
|
}
|
package/useArrayField.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { setParsedValue } from './actions/setParsedValue';
|
|
|
9
9
|
import { setValue } from './actions/setValue';
|
|
10
10
|
import { setMeta } from './actions/setMeta';
|
|
11
11
|
import { FieldMeta } from './FormState';
|
|
12
|
-
export type UseArrayFieldProps<Field extends FieldPath> = NonNullable<z.input<Field['schema']>> extends any[] ? FieldMeta & ReturnType<typeof bindActionsToField<Field,
|
|
12
|
+
export type UseArrayFieldProps<Field extends FieldPath> = NonNullable<z.input<Field['schema']>> extends any[] ? FieldMeta & ReturnType<typeof bindActionsToField<Field, arrayActions<Field> & {
|
|
13
13
|
setParsedValue: typeof setParsedValue<Field>;
|
|
14
14
|
setValue: typeof setValue<Field>;
|
|
15
15
|
setMeta: typeof setMeta<Field>;
|
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,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGpE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"useArrayField.d.ts","sourceRoot":"","sources":["src/useArrayField.ts"],"names":[],"mappings":"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"}
|
package/useArrayField.js
CHANGED
|
@@ -71,7 +71,9 @@ function useArrayFieldBase(field) {
|
|
|
71
71
|
}, [field.pathstring]);
|
|
72
72
|
var elements = _react["default"].useMemo(function () {
|
|
73
73
|
return (0, _toConsumableArray2["default"])(new Array(length).keys()).map(function (index) {
|
|
74
|
-
return field.subfield(
|
|
74
|
+
return field.subfield(
|
|
75
|
+
// @ts-expect-error doesn't work on this type parameter
|
|
76
|
+
index);
|
|
75
77
|
});
|
|
76
78
|
}, [length]);
|
|
77
79
|
return _react["default"].useMemo(function () {
|
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","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","useFormSelector","untypedUseFormSelector","valuesSelector","React","useMemo","createSelector","createStructuredSelector","value","_ref","values","get","path","initialValue","_ref2","initialValues","_ref3","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 Field,\n typeof arrayActions & {\n setParsedValue: typeof setParsedValue<Field>\n setValue: typeof setValue<Field>\n setMeta: typeof setMeta<Field>\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 value: ({ values }) =>\n get(values, field.path) as DeepPartial<z.input<T>> | undefined,\n initialValue: ({ initialValues }) =>\n get(initialValues, field.path) as\n | DeepPartial<z.input<T>>\n | undefined,\n }),\n ],\n ({ value, initialValue }) => {\n const dirty = !isEqual(value, initialValue)\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":[]}
|
|
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","value","_ref","values","get","path","initialValue","_ref2","initialValues","_ref3","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, ArrayFieldPath } 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> =\n NonNullable<z.input<Field['schema']>> extends any[] ?\n FieldMeta &\n ReturnType<\n typeof bindActionsToField<\n Field,\n arrayActions<Field> & {\n setParsedValue: typeof setParsedValue<Field>\n setValue: typeof setValue<Field>\n setMeta: typeof setMeta<Field>\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>>(\n path: Path\n ): UseArrayFieldProps<FieldPath<SchemaAt<T, Path>>>\n <Pathstring extends PathstringInSchema<T>>(\n path: Pathstring\n ): UseArrayFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\n}\n\nfunction useArrayFieldBase<Field extends ArrayFieldPath>(\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 value: ({ values }) =>\n get(values, field.path) as DeepPartial<z.input<T>> | undefined,\n initialValue: ({ initialValues }) =>\n get(initialValues, field.path) as\n | DeepPartial<z.input<T>>\n | undefined,\n }),\n ],\n ({ value, initialValue }) => {\n const dirty = !isEqual(value, initialValue)\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 () =>\n [...new Array(length).keys()].map((index) =>\n field.subfield(\n // @ts-expect-error doesn't work on this type parameter\n index\n )\n ),\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/useArrayField.mjs
CHANGED
|
@@ -50,7 +50,9 @@ function useArrayFieldBase(field) {
|
|
|
50
50
|
setValue,
|
|
51
51
|
setMeta
|
|
52
52
|
}, field), [field.pathstring]);
|
|
53
|
-
const elements = React.useMemo(() => [...new Array(length).keys()].map(index => field.subfield(
|
|
53
|
+
const elements = React.useMemo(() => [...new Array(length).keys()].map(index => field.subfield(
|
|
54
|
+
// @ts-expect-error doesn't work on this type parameter
|
|
55
|
+
index)), [length]);
|
|
54
56
|
return React.useMemo(() => ({
|
|
55
57
|
...boundActions,
|
|
56
58
|
visited: (meta === null || meta === void 0 ? void 0 : meta.visited) || false,
|
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","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","valuesSelector","useMemo","value","values","path","initialValue","initialValues","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>
|
|
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","value","values","path","initialValue","initialValues","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, ArrayFieldPath } 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> =\n NonNullable<z.input<Field['schema']>> extends any[] ?\n FieldMeta &\n ReturnType<\n typeof bindActionsToField<\n Field,\n arrayActions<Field> & {\n setParsedValue: typeof setParsedValue<Field>\n setValue: typeof setValue<Field>\n setMeta: typeof setMeta<Field>\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>>(\n path: Path\n ): UseArrayFieldProps<FieldPath<SchemaAt<T, Path>>>\n <Pathstring extends PathstringInSchema<T>>(\n path: Pathstring\n ): UseArrayFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\n}\n\nfunction useArrayFieldBase<Field extends ArrayFieldPath>(\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 value: ({ values }) =>\n get(values, field.path) as DeepPartial<z.input<T>> | undefined,\n initialValue: ({ initialValues }) =>\n get(initialValues, field.path) as\n | DeepPartial<z.input<T>>\n | undefined,\n }),\n ],\n ({ value, initialValue }) => {\n const dirty = !isEqual(value, initialValue)\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 () =>\n [...new Array(length).keys()].map((index) =>\n field.subfield(\n // @ts-expect-error doesn't work on this type parameter\n index\n )\n ),\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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useField.d.ts","sourceRoot":"","sources":["src/useField.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAY,SAAS,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAS3C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,MAAM,aAAa,CAAC,KAAK,SAAS,SAAS,IAAI,SAAS,GAC5D,UAAU,CACR,OAAO,kBAAkB,CACvB,KAAK,EACL;IACE,cAAc,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAA;IAC5C,QAAQ,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;IAChC,OAAO,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAA;CAC/B,CACF,CACF,GAAG;IACF,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7C,kBAAkB,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC9C,YAAY,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACpD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAEH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU;IACnD,CAAC,KAAK,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAC7D,CAAC,IAAI,SAAS,YAAY,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useField.d.ts","sourceRoot":"","sources":["src/useField.ts"],"names":[],"mappings":"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"}
|