@jcoreio/zod-forms 2.0.0-beta.4 → 2.1.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/FormState.d.ts +7 -4
- package/FormState.d.ts.map +1 -1
- package/FormState.js.map +1 -1
- package/FormState.mjs.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 +10 -10
- package/createSelectFormStatus.d.ts.map +1 -1
- package/createSelectFormStatus.js +2 -2
- package/createSelectFormStatus.js.map +1 -1
- package/createSelectFormStatus.mjs +1 -1
- package/createSelectFormStatus.mjs.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/FormState.ts +5 -4
- package/src/actions/arrayActions.ts +4 -4
- package/src/createFormMiddleware.ts +2 -2
- package/src/createFormProvider.tsx +14 -2
- package/src/createSelectFieldErrorMap.ts +12 -10
- package/src/createSelectFormStatus.ts +3 -1
- 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 +39 -28
- package/src/useField.ts +92 -27
- package/src/useFormContext.ts +2 -2
- package/src/useFormDispatch.ts +3 -7
- package/src/useHtmlField.ts +47 -41
- 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 +2 -2
- package/useArrayField.d.ts.map +1 -1
- package/useArrayField.js +22 -8
- package/useArrayField.js.map +1 -1
- package/useArrayField.mjs +12 -2
- package/useArrayField.mjs.map +1 -1
- package/useField.d.ts +6 -3
- package/useField.d.ts.map +1 -1
- package/useField.js +55 -22
- package/useField.js.map +1 -1
- package/useField.mjs +34 -16
- 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 +2 -1
- package/useHtmlField.d.ts.map +1 -1
- package/useHtmlField.js +35 -24
- package/useHtmlField.js.map +1 -1
- package/useHtmlField.mjs +36 -21
- 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
|
@@ -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
|
@@ -4,12 +4,12 @@ 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
|
-
import { arrayActions
|
|
7
|
+
import { arrayActions } from './actions/arrayActions';
|
|
8
8
|
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
|
|
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
|
@@ -16,6 +16,7 @@ var _get = require("./util/get.js");
|
|
|
16
16
|
var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
|
|
17
17
|
var _useFormSelector2 = require("./useFormSelector.js");
|
|
18
18
|
var _reactRedux = require("react-redux");
|
|
19
|
+
var _maybeParse = require("./util/maybeParse.js");
|
|
19
20
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
20
21
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
21
22
|
function useArrayFieldBase(field) {
|
|
@@ -29,18 +30,30 @@ function useArrayFieldBase(field) {
|
|
|
29
30
|
var useFormSelector = _useFormSelector2.useFormSelector;
|
|
30
31
|
var valuesSelector = _react["default"].useMemo(function () {
|
|
31
32
|
return (0, _reselect.createSelector)([selectFormValues], (0, _reselect.createSelector)([(0, _reselect.createStructuredSelector)({
|
|
32
|
-
|
|
33
|
-
var
|
|
33
|
+
parsedValue: function parsedValue(_ref) {
|
|
34
|
+
var parsedValues = _ref.parsedValues;
|
|
35
|
+
return (0, _get.get)(parsedValues, field.path);
|
|
36
|
+
},
|
|
37
|
+
value: function value(_ref2) {
|
|
38
|
+
var values = _ref2.values;
|
|
34
39
|
return (0, _get.get)(values, field.path);
|
|
35
40
|
},
|
|
36
|
-
|
|
37
|
-
var
|
|
41
|
+
initialParsedValue: function initialParsedValue(_ref3) {
|
|
42
|
+
var initialParsedValues = _ref3.initialParsedValues;
|
|
43
|
+
return (0, _get.get)(initialParsedValues, field.path);
|
|
44
|
+
},
|
|
45
|
+
initialValue: function initialValue(_ref4) {
|
|
46
|
+
var initialValues = _ref4.initialValues;
|
|
38
47
|
return (0, _get.get)(initialValues, field.path);
|
|
39
48
|
}
|
|
40
|
-
})], function (
|
|
41
|
-
var value =
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
})], function (_ref5) {
|
|
50
|
+
var value = _ref5.value,
|
|
51
|
+
_ref5$parsedValue = _ref5.parsedValue,
|
|
52
|
+
parsedValue = _ref5$parsedValue === void 0 ? (0, _maybeParse.maybeParse)(field.schema, value) : _ref5$parsedValue,
|
|
53
|
+
initialValue = _ref5.initialValue,
|
|
54
|
+
_ref5$initialParsedVa = _ref5.initialParsedValue,
|
|
55
|
+
initialParsedValue = _ref5$initialParsedVa === void 0 ? (0, _maybeParse.maybeParse)(field.schema, initialValue) : _ref5$initialParsedVa;
|
|
56
|
+
var dirty = !(0, _fastDeepEqual["default"])(parsedValue, initialParsedValue);
|
|
44
57
|
var pristine = !dirty;
|
|
45
58
|
return {
|
|
46
59
|
dirty: dirty,
|
|
@@ -80,6 +93,7 @@ function useArrayFieldBase(field) {
|
|
|
80
93
|
return _objectSpread(_objectSpread({}, boundActions), {}, {
|
|
81
94
|
visited: (meta === null || meta === void 0 ? void 0 : meta.visited) || false,
|
|
82
95
|
touched: (meta === null || meta === void 0 ? void 0 : meta.touched) || submitFailed,
|
|
96
|
+
customMeta: meta === null || meta === void 0 ? void 0 : meta.customMeta,
|
|
83
97
|
error: error,
|
|
84
98
|
elements: elements,
|
|
85
99
|
dirty: dirty,
|
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, 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 ArrayFieldPath = ArrayFieldPath> =\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>>(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 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":[]}
|
|
1
|
+
{"version":3,"file":"useArrayField.js","names":["_FieldPath","require","_react","_interopRequireDefault","_useFormContext3","_bindActionsToField","_reselect","_get","_fastDeepEqual","_useFormSelector2","_reactRedux","_maybeParse","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","initialValue","_ref4","initialValues","_ref5","_ref5$parsedValue","maybeParse","schema","_ref5$initialParsedVa","dirty","isEqual","pristine","Array","isArray","pathstring","_useFormSelector","shallowEqual","error","state","meta","fieldMeta","submitFailed","boundActions","bindActionsToField","elements","_toConsumableArray2","map","index","subfield","visited","touched","customMeta","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'\nimport { maybeParse } from './util/maybeParse'\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 parsedValue: ({ parsedValues }) =>\n get(parsedValues, field.path) as z.output<T> | 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 initialValue: ({ initialValues }) =>\n get(initialValues, field.path) as\n | DeepPartial<z.input<T>>\n | undefined,\n }),\n ],\n ({\n value,\n parsedValue = maybeParse(field.schema, value),\n initialValue,\n initialParsedValue = maybeParse(field.schema, initialValue),\n }) => {\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 () =>\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 customMeta: meta?.customMeta,\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
|
@@ -7,6 +7,7 @@ import { get } from "./util/get.mjs";
|
|
|
7
7
|
import isEqual from 'fast-deep-equal';
|
|
8
8
|
import { useFormSelector as untypedUseFormSelector } from "./useFormSelector.mjs";
|
|
9
9
|
import { shallowEqual } from 'react-redux';
|
|
10
|
+
import { maybeParse } from "./util/maybeParse.mjs";
|
|
10
11
|
function useArrayFieldBase(field) {
|
|
11
12
|
const {
|
|
12
13
|
arrayActions,
|
|
@@ -18,17 +19,25 @@ function useArrayFieldBase(field) {
|
|
|
18
19
|
} = useFormContext();
|
|
19
20
|
const useFormSelector = untypedUseFormSelector;
|
|
20
21
|
const valuesSelector = React.useMemo(() => createSelector([selectFormValues], createSelector([createStructuredSelector({
|
|
22
|
+
parsedValue: ({
|
|
23
|
+
parsedValues
|
|
24
|
+
}) => get(parsedValues, field.path),
|
|
21
25
|
value: ({
|
|
22
26
|
values
|
|
23
27
|
}) => get(values, field.path),
|
|
28
|
+
initialParsedValue: ({
|
|
29
|
+
initialParsedValues
|
|
30
|
+
}) => get(initialParsedValues, field.path),
|
|
24
31
|
initialValue: ({
|
|
25
32
|
initialValues
|
|
26
33
|
}) => get(initialValues, field.path)
|
|
27
34
|
})], ({
|
|
28
35
|
value,
|
|
29
|
-
|
|
36
|
+
parsedValue = maybeParse(field.schema, value),
|
|
37
|
+
initialValue,
|
|
38
|
+
initialParsedValue = maybeParse(field.schema, initialValue)
|
|
30
39
|
}) => {
|
|
31
|
-
const dirty = !isEqual(
|
|
40
|
+
const dirty = !isEqual(parsedValue, initialParsedValue);
|
|
32
41
|
const pristine = !dirty;
|
|
33
42
|
return {
|
|
34
43
|
dirty,
|
|
@@ -57,6 +66,7 @@ function useArrayFieldBase(field) {
|
|
|
57
66
|
...boundActions,
|
|
58
67
|
visited: (meta === null || meta === void 0 ? void 0 : meta.visited) || false,
|
|
59
68
|
touched: (meta === null || meta === void 0 ? void 0 : meta.touched) || submitFailed,
|
|
69
|
+
customMeta: meta === null || meta === void 0 ? void 0 : meta.customMeta,
|
|
60
70
|
error,
|
|
61
71
|
elements,
|
|
62
72
|
dirty,
|
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","
|
|
1
|
+
{"version":3,"file":"useArrayField.mjs","names":["FieldPath","React","useFormContext","bindActionsToField","createSelector","createStructuredSelector","get","isEqual","useFormSelector","untypedUseFormSelector","shallowEqual","maybeParse","useArrayFieldBase","field","arrayActions","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","valuesSelector","useMemo","parsedValue","parsedValues","path","value","values","initialParsedValue","initialParsedValues","initialValue","initialValues","schema","dirty","pristine","length","Array","isArray","pathstring","error","state","meta","fieldMeta","submitFailed","boundActions","elements","keys","map","index","subfield","visited","touched","customMeta","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'\nimport { maybeParse } from './util/maybeParse'\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 parsedValue: ({ parsedValues }) =>\n get(parsedValues, field.path) as z.output<T> | 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 initialValue: ({ initialValues }) =>\n get(initialValues, field.path) as\n | DeepPartial<z.input<T>>\n | undefined,\n }),\n ],\n ({\n value,\n parsedValue = maybeParse(field.schema, value),\n initialValue,\n initialParsedValue = maybeParse(field.schema, initialValue),\n }) => {\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 () =>\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 customMeta: meta?.customMeta,\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
|
@@ -29,7 +29,10 @@ export interface TypedUseField<T extends z.ZodTypeAny> {
|
|
|
29
29
|
<Path extends PathInSchema<T>>(path: Path): UseFieldProps<FieldPath<SchemaAt<T, Path>>>;
|
|
30
30
|
<Pathstring extends PathstringInSchema<T>>(path: Pathstring): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>;
|
|
31
31
|
}
|
|
32
|
-
export
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
export type UseFieldOptions = {
|
|
33
|
+
normalizeOnMount?: boolean;
|
|
34
|
+
};
|
|
35
|
+
export declare function useField<Field extends FieldPath>(field: Field, options?: UseFieldOptions): UseFieldProps<Field>;
|
|
36
|
+
export declare function useField<T extends z.ZodTypeAny = z.ZodBranded<z.ZodNever, 'cast to TypedUseArray<T> to pass a path array'>, Path extends PathInSchema<T> = any>(field: Path, options?: UseFieldOptions): UseFieldProps<FieldPath<SchemaAt<T, Path>>>;
|
|
37
|
+
export declare function useField<T extends z.ZodTypeAny = z.ZodBranded<z.ZodNever, 'cast to TypedUseArray<T> to pass a pathstring'>, Pathstring extends PathstringInSchema<T> = any>(field: Pathstring, options?: UseFieldOptions): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>;
|
|
35
38
|
//# sourceMappingURL=useField.d.ts.map
|
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;
|
|
1
|
+
{"version":3,"file":"useField.d.ts","sourceRoot":"","sources":["src/useField.ts"],"names":[],"mappings":"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"}
|
package/useField.js
CHANGED
|
@@ -16,9 +16,13 @@ var _reactRedux = require("react-redux");
|
|
|
16
16
|
var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
|
|
17
17
|
var _maybeParse = require("./util/maybeParse.js");
|
|
18
18
|
var _bindActionsToField = require("./util/bindActionsToField.js");
|
|
19
|
+
var _zodInvertible = require("zod-invertible");
|
|
19
20
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
20
21
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
21
22
|
function useFieldBase(field) {
|
|
23
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
24
|
+
_ref$normalizeOnMount = _ref.normalizeOnMount,
|
|
25
|
+
normalizeOnMount = _ref$normalizeOnMount === void 0 ? true : _ref$normalizeOnMount;
|
|
22
26
|
var _useFormContext = (0, _useFormContext3.useFormContext)(),
|
|
23
27
|
setParsedValue = _useFormContext.setParsedValue,
|
|
24
28
|
setValue = _useFormContext.setValue,
|
|
@@ -28,30 +32,35 @@ function useFieldBase(field) {
|
|
|
28
32
|
var useFormSelector = _useFormSelector.useFormSelector;
|
|
29
33
|
var valuesSelector = _react["default"].useMemo(function () {
|
|
30
34
|
return (0, _reselect.createSelector)([selectFormValues], (0, _reselect.createSelector)([(0, _reselect.createStructuredSelector)({
|
|
31
|
-
parsedValue: function
|
|
32
|
-
|
|
35
|
+
parsedValue: (0, _reselect.createSelector)(function (state) {
|
|
36
|
+
return state.parsedValues;
|
|
37
|
+
}, function (parsedValues) {
|
|
33
38
|
return (0, _get.get)(parsedValues, field.path);
|
|
34
|
-
},
|
|
35
|
-
value: function
|
|
36
|
-
|
|
39
|
+
}),
|
|
40
|
+
value: (0, _reselect.createSelector)(function (state) {
|
|
41
|
+
return state.values;
|
|
42
|
+
}, function (values) {
|
|
37
43
|
return (0, _get.get)(values, field.path);
|
|
38
|
-
},
|
|
39
|
-
initialParsedValue: function
|
|
40
|
-
|
|
44
|
+
}),
|
|
45
|
+
initialParsedValue: (0, _reselect.createSelector)(function (state) {
|
|
46
|
+
return state.initialParsedValues;
|
|
47
|
+
}, function (initialParsedValues) {
|
|
41
48
|
return (0, _get.get)(initialParsedValues, field.path);
|
|
42
|
-
},
|
|
43
|
-
initialValue: function
|
|
44
|
-
|
|
49
|
+
}),
|
|
50
|
+
initialValue: (0, _reselect.createSelector)(function (state) {
|
|
51
|
+
return state.initialValues;
|
|
52
|
+
}, function (initialValues) {
|
|
45
53
|
return (0, _get.get)(initialValues, field.path);
|
|
46
|
-
}
|
|
47
|
-
})], function (
|
|
48
|
-
var value =
|
|
49
|
-
|
|
50
|
-
parsedValue =
|
|
51
|
-
initialValue =
|
|
52
|
-
|
|
53
|
-
initialParsedValue =
|
|
54
|
-
|
|
54
|
+
})
|
|
55
|
+
})], function (_ref2) {
|
|
56
|
+
var value = _ref2.value,
|
|
57
|
+
_ref2$parsedValue = _ref2.parsedValue,
|
|
58
|
+
parsedValue = _ref2$parsedValue === void 0 ? (0, _maybeParse.maybeParse)(field.schema, value) : _ref2$parsedValue,
|
|
59
|
+
initialValue = _ref2.initialValue,
|
|
60
|
+
_ref2$initialParsedVa = _ref2.initialParsedValue,
|
|
61
|
+
initialParsedValue = _ref2$initialParsedVa === void 0 ? (0, _maybeParse.maybeParse)(field.schema, initialValue) : _ref2$initialParsedVa;
|
|
62
|
+
// console.error(new Error('selector'), { value, parsedValue })
|
|
63
|
+
var dirty = !(0, _fastDeepEqual["default"])(parsedValue, initialParsedValue);
|
|
55
64
|
var pristine = !dirty;
|
|
56
65
|
return {
|
|
57
66
|
parsedValue: parsedValue,
|
|
@@ -73,6 +82,9 @@ function useFieldBase(field) {
|
|
|
73
82
|
var submitFailed = useFormSelector(function (state) {
|
|
74
83
|
return state.submitFailed;
|
|
75
84
|
});
|
|
85
|
+
var initialized = useFormSelector(function (state) {
|
|
86
|
+
return state.initialized;
|
|
87
|
+
});
|
|
76
88
|
var boundActions = _react["default"].useMemo(function () {
|
|
77
89
|
return (0, _bindActionsToField.bindActionsToField)({
|
|
78
90
|
setParsedValue: setParsedValue,
|
|
@@ -80,19 +92,40 @@ function useFieldBase(field) {
|
|
|
80
92
|
setMeta: setMeta
|
|
81
93
|
}, field);
|
|
82
94
|
}, [field.pathstring]);
|
|
95
|
+
var info = _react["default"].useRef({
|
|
96
|
+
mounted: false,
|
|
97
|
+
initialized: initialized
|
|
98
|
+
});
|
|
99
|
+
var normalizedValue = parsedValues.value;
|
|
100
|
+
if (normalizeOnMount && (!info.current.mounted || !info.current.initialized && initialized)) {
|
|
101
|
+
var parsed = field.schema.safeParse(parsedValues.value);
|
|
102
|
+
var formatted = parsed.success ? (0, _zodInvertible.invert)(field.schema).safeParse(parsed.data) : undefined;
|
|
103
|
+
if (formatted !== null && formatted !== void 0 && formatted.success && formatted.data !== parsedValues.value) {
|
|
104
|
+
normalizedValue = formatted.data;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
info.current.mounted = true;
|
|
108
|
+
info.current.initialized = initialized;
|
|
109
|
+
_react["default"].useEffect(function () {
|
|
110
|
+
if (normalizeOnMount && !(0, _fastDeepEqual["default"])(normalizedValue, parsedValues.value)) {
|
|
111
|
+
boundActions.setValue(normalizedValue);
|
|
112
|
+
}
|
|
113
|
+
}, []);
|
|
83
114
|
return _react["default"].useMemo(function () {
|
|
84
115
|
return _objectSpread(_objectSpread(_objectSpread({}, boundActions), parsedValues), {}, {
|
|
116
|
+
value: normalizedValue,
|
|
85
117
|
visited: (meta === null || meta === void 0 ? void 0 : meta.visited) || false,
|
|
86
118
|
touched: (meta === null || meta === void 0 ? void 0 : meta.touched) || submitFailed,
|
|
119
|
+
customMeta: meta === null || meta === void 0 ? void 0 : meta.customMeta,
|
|
87
120
|
error: error,
|
|
88
121
|
valid: !error,
|
|
89
122
|
invalid: Boolean(error)
|
|
90
123
|
});
|
|
91
124
|
}, [field.pathstring, parsedValues, meta, error, submitFailed]);
|
|
92
125
|
}
|
|
93
|
-
function useField(field) {
|
|
126
|
+
function useField(field, options) {
|
|
94
127
|
var _useFormContext2 = (0, _useFormContext3.useFormContext)(),
|
|
95
128
|
root = _useFormContext2.root;
|
|
96
|
-
return useFieldBase(field instanceof _FieldPath.FieldPath ? field : root.get(field));
|
|
129
|
+
return useFieldBase(field instanceof _FieldPath.FieldPath ? field : root.get(field), options);
|
|
97
130
|
}
|
|
98
131
|
//# sourceMappingURL=useField.js.map
|