@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.
Files changed (151) hide show
  1. package/ConditionalValidator.d.ts.map +1 -1
  2. package/ConditionalValidator.js +4 -2
  3. package/ConditionalValidator.js.map +1 -1
  4. package/ConditionalValidator.mjs +3 -1
  5. package/ConditionalValidator.mjs.map +1 -1
  6. package/FieldPath.d.ts.map +1 -1
  7. package/FieldPath.js +1 -0
  8. package/FieldPath.js.map +1 -1
  9. package/FieldPath.mjs.map +1 -1
  10. package/FormState.d.ts +7 -4
  11. package/FormState.d.ts.map +1 -1
  12. package/FormState.js.map +1 -1
  13. package/FormState.mjs.map +1 -1
  14. package/actions/arrayActions.js.map +1 -1
  15. package/actions/arrayActions.mjs.map +1 -1
  16. package/actions/setSubmitStatus.d.ts +1 -1
  17. package/createFormMiddleware.js +3 -3
  18. package/createFormMiddleware.js.map +1 -1
  19. package/createFormMiddleware.mjs.map +1 -1
  20. package/createFormProvider.d.ts +9 -3
  21. package/createFormProvider.d.ts.map +1 -1
  22. package/createFormProvider.js +10 -3
  23. package/createFormProvider.js.map +1 -1
  24. package/createFormProvider.mjs +53 -44
  25. package/createFormProvider.mjs.map +1 -1
  26. package/createFormReducer.js +16 -16
  27. package/createFormReducer.js.map +1 -1
  28. package/createSelectFieldErrorMap.d.ts +3 -3
  29. package/createSelectFieldErrorMap.js.map +1 -1
  30. package/createSelectFieldErrorMap.mjs.map +1 -1
  31. package/createSelectFormStatus.d.ts +10 -10
  32. package/createSelectFormStatus.d.ts.map +1 -1
  33. package/createSelectFormStatus.js +2 -2
  34. package/createSelectFormStatus.js.map +1 -1
  35. package/createSelectFormStatus.mjs +1 -1
  36. package/createSelectFormStatus.mjs.map +1 -1
  37. package/createSelectFormValues.js.map +1 -1
  38. package/createZodForm.d.ts +10 -5
  39. package/createZodForm.d.ts.map +1 -1
  40. package/package.json +5 -4
  41. package/reducers/addHandlers.d.ts +2 -2
  42. package/reducers/addHandlers.d.ts.map +1 -1
  43. package/reducers/arrayMove.js.map +1 -1
  44. package/reducers/arrayMove.mjs.map +1 -1
  45. package/reducers/initialize.d.ts +4 -4
  46. package/reducers/initialize.d.ts.map +1 -1
  47. package/reducers/initialize.js.map +1 -1
  48. package/reducers/initialize.mjs.map +1 -1
  49. package/reducers/removeHandlers.d.ts +2 -2
  50. package/reducers/removeHandlers.d.ts.map +1 -1
  51. package/reducers/setMeta.d.ts.map +1 -1
  52. package/reducers/setMeta.js +4 -1
  53. package/reducers/setMeta.js.map +1 -1
  54. package/reducers/setMeta.mjs +4 -1
  55. package/reducers/setMeta.mjs.map +1 -1
  56. package/reducers/setParsedValue.d.ts +2 -2
  57. package/reducers/setParsedValue.d.ts.map +1 -1
  58. package/reducers/setParsedValue.js +1 -1
  59. package/reducers/setParsedValue.js.map +1 -1
  60. package/reducers/setParsedValue.mjs +1 -1
  61. package/reducers/setParsedValue.mjs.map +1 -1
  62. package/reducers/setSubmitStatus.d.ts +2 -2
  63. package/reducers/setSubmitStatus.d.ts.map +1 -1
  64. package/reducers/setValue.d.ts +1 -1
  65. package/reducers/setValue.d.ts.map +1 -1
  66. package/reducers/submitSucceeded.d.ts +1 -1
  67. package/reducers/submitSucceeded.d.ts.map +1 -1
  68. package/reducers/util/updateRawArray.js.map +1 -1
  69. package/reducers/util/updateRawArray.mjs.map +1 -1
  70. package/src/ConditionalValidator.ts +11 -12
  71. package/src/FieldPath.ts +34 -54
  72. package/src/FormState.ts +5 -4
  73. package/src/actions/arrayActions.ts +4 -4
  74. package/src/createFormMiddleware.ts +2 -2
  75. package/src/createFormProvider.tsx +14 -2
  76. package/src/createSelectFieldErrorMap.ts +12 -10
  77. package/src/createSelectFormStatus.ts +3 -1
  78. package/src/reducers/arrayMove.ts +2 -2
  79. package/src/reducers/initialize.ts +3 -3
  80. package/src/reducers/setMeta.ts +4 -1
  81. package/src/reducers/setParsedValue.ts +10 -9
  82. package/src/reducers/util/updateRawArray.ts +4 -4
  83. package/src/useArrayField.ts +39 -28
  84. package/src/useField.ts +92 -27
  85. package/src/useFormContext.ts +2 -2
  86. package/src/useFormDispatch.ts +3 -7
  87. package/src/useHtmlField.ts +47 -41
  88. package/src/useInitialize.ts +1 -1
  89. package/src/util/DeepPartial.ts +2 -3
  90. package/src/util/PathInType.ts +16 -16
  91. package/src/util/SchemaAt.ts +38 -49
  92. package/src/util/bindActionsToField.ts +6 -7
  93. package/src/util/parsePathstring.ts +47 -41
  94. package/src/util/pathstring.ts +9 -13
  95. package/src/util/set.ts +4 -1
  96. package/useArrayField.d.ts +2 -2
  97. package/useArrayField.d.ts.map +1 -1
  98. package/useArrayField.js +22 -8
  99. package/useArrayField.js.map +1 -1
  100. package/useArrayField.mjs +12 -2
  101. package/useArrayField.mjs.map +1 -1
  102. package/useField.d.ts +6 -3
  103. package/useField.d.ts.map +1 -1
  104. package/useField.js +55 -22
  105. package/useField.js.map +1 -1
  106. package/useField.mjs +34 -16
  107. package/useField.mjs.map +1 -1
  108. package/useFormContext.js.map +1 -1
  109. package/useFormContext.mjs.map +1 -1
  110. package/useFormDispatch.d.ts +1 -3
  111. package/useFormDispatch.d.ts.map +1 -1
  112. package/useFormDispatch.js.map +1 -1
  113. package/useFormDispatch.mjs.map +1 -1
  114. package/useFormStatus.d.ts +1 -1
  115. package/useHtmlField.d.ts +2 -1
  116. package/useHtmlField.d.ts.map +1 -1
  117. package/useHtmlField.js +35 -24
  118. package/useHtmlField.js.map +1 -1
  119. package/useHtmlField.mjs +36 -21
  120. package/useHtmlField.mjs.map +1 -1
  121. package/useInitialize.js.map +1 -1
  122. package/useInitialize.mjs.map +1 -1
  123. package/useSubmit.js.map +1 -1
  124. package/util/DeepPartial.d.ts.map +1 -1
  125. package/util/DeepPartial.js.map +1 -1
  126. package/util/DeepPartial.mjs.map +1 -1
  127. package/util/PathInType.d.ts +2 -1
  128. package/util/PathInType.d.ts.map +1 -1
  129. package/util/PathInType.js.map +1 -1
  130. package/util/PathInType.mjs.map +1 -1
  131. package/util/SchemaAt.d.ts +1 -1
  132. package/util/SchemaAt.d.ts.map +1 -1
  133. package/util/SchemaAt.js.map +1 -1
  134. package/util/SchemaAt.mjs.map +1 -1
  135. package/util/bindActionsToField.d.ts +1 -1
  136. package/util/bindActionsToField.d.ts.map +1 -1
  137. package/util/bindActionsToField.js.map +1 -1
  138. package/util/bindActionsToField.mjs.map +1 -1
  139. package/util/parsePathstring.d.ts +23 -6
  140. package/util/parsePathstring.d.ts.map +1 -1
  141. package/util/parsePathstring.js.map +1 -1
  142. package/util/parsePathstring.mjs.map +1 -1
  143. package/util/pathstring.d.ts +2 -8
  144. package/util/pathstring.d.ts.map +1 -1
  145. package/util/pathstring.js.map +1 -1
  146. package/util/pathstring.mjs.map +1 -1
  147. package/util/set.d.ts.map +1 -1
  148. package/util/set.js +1 -4
  149. package/util/set.js.map +1 -1
  150. package/util/set.mjs +1 -3
  151. 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
- : [Path] extends [`[${infer Rest}`]
8
- ? Rest extends `${infer N extends number}]${infer Tail}`
9
- ? [N, ...parsePathstring<Tail, true>]
10
- : ExtractInitialStringLiteral<Rest> extends infer StringLiteral extends string
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
- ? parsePathstring<Tail, true>
15
- : never)
13
+ ...(Rest extends `${StringLiteral}]${infer Tail}` ?
14
+ parsePathstring<Tail, true>
15
+ : never),
16
16
  ]
17
17
  : never
18
- : [IsTail] extends [true]
19
- ? [Path] extends [`.${infer Rest}`]
20
- ? parsePathstring<Rest>
18
+ : [IsTail] extends [true] ?
19
+ [Path] extends [`.${infer Rest}`] ?
20
+ parsePathstring<Rest>
21
21
  : never
22
- : [Path] extends [`${infer Head}[${infer Tail}`]
23
- ? [Path] extends [`${infer Head2}.${infer Tail2}`]
24
- ? Head2 extends `${Head}[${string}` // make sure we pick up to . or [, whichever comes first
25
- ? [Head, ...parsePathstring<`[${Tail}`, true>]
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
- ? [Head, ...parsePathstring<`.${Tail}`, true>]
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> = [T] extends [
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
- > = [T] extends [`${infer A}${Q}${infer B}`] // find the next quote
54
- ? A extends `${infer C}\\${infer D}` // the quote may be escaped, so find the first backslash
55
- ? D extends '' // nothing after the backslash, so it escapes the quote Q
56
- ? `${A}${Q}${RestOfStringLiteral<B, Q>}` // keep scanning until the closing quote
57
- : D extends `${infer E extends keyof EscapeChars}${infer F}`
58
- ? `${C}\\${E}${RestOfStringLiteral<`${F}${Q}${B}`, Q>}` // keep scanning until the closing quote
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> = T extends `${infer A}\\${infer B}`
77
- ? B extends `${infer C extends keyof EscapeChars}${infer D}`
78
- ? `${A}${EscapeChars[C]}${ProcessEscapes<D>}`
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> = T extends `"${infer Content}"`
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 =
@@ -1,18 +1,14 @@
1
1
  type PathElem = string | number
2
2
  type BasePath = PathElem[]
3
3
 
4
- export type pathstring<Path> = Path extends [
5
- infer Head extends PathElem,
6
- ...infer Tail extends PathElem[]
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> = Path extends [
12
- infer Head extends PathElem,
13
- ...infer Tail extends PathElem[]
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
- ? `${index > 0 ? '.' : ''}${elem}`
25
- : `[${JSON.stringify(elem)}]`
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 = Array.isArray(from) ? [...from] : { ...from }
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
  }
@@ -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, ArrayFieldPath } from './actions/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 ArrayFieldPath = ArrayFieldPath> = NonNullable<z.input<Field['schema']>> extends any[] ? FieldMeta & ReturnType<typeof bindActionsToField<Field, arrayActions<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>;
@@ -1 +1 @@
1
- {"version":3,"file":"useArrayField.d.ts","sourceRoot":"","sources":["src/useArrayField.ts"],"names":[],"mappings":"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"}
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
- value: function value(_ref) {
33
- var values = _ref.values;
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
- initialValue: function initialValue(_ref2) {
37
- var initialValues = _ref2.initialValues;
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 (_ref3) {
41
- var value = _ref3.value,
42
- initialValue = _ref3.initialValue;
43
- var dirty = !(0, _fastDeepEqual["default"])(value, initialValue);
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,
@@ -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":";;;;;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AAIA,IAAAI,mBAAA,GAAAJ,OAAA;AAEA,IAAAK,SAAA,GAAAL,OAAA;AACA,IAAAM,IAAA,GAAAN,OAAA;AACA,IAAAO,cAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,iBAAA,GAAAR,OAAA;AAIA,IAAAS,WAAA,GAAAT,OAAA;AAMA,IAAAU,WAAA,GAAAV,OAAA;AAA8C,SAAAW,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAoC9C,SAASoB,iBAAiBA,CACxBC,KAAY,EACe;EAG3B,IAAAC,eAAA,GAOI,IAAAC,+BAAc,EAAI,CAAC;IANrBC,YAAY,GAAAF,eAAA,CAAZE,YAAY;IACZC,cAAc,GAAAH,eAAA,CAAdG,cAAc;IACdC,QAAQ,GAAAJ,eAAA,CAARI,QAAQ;IACRC,OAAO,GAAAL,eAAA,CAAPK,OAAO;IACPC,gBAAgB,GAAAN,eAAA,CAAhBM,gBAAgB;IAChBC,mBAAmB,GAAAP,eAAA,CAAnBO,mBAAmB;EAGrB,IAAMC,eAAe,GAAGC,iCAAiD;EAEzE,IAAMC,cAAc,GAAGC,iBAAK,CAACC,OAAO,CAClC;IAAA,OACE,IAAAC,wBAAc,EACZ,CAACP,gBAAgB,CAAC,EAClB,IAAAO,wBAAc,EACZ,CACE,IAAAC,kCAAwB,EAAC;MACvBC,WAAW,EAAE,SAAbA,WAAWA,CAAAC,IAAA;QAAA,IAAKC,YAAY,GAAAD,IAAA,CAAZC,YAAY;QAAA,OAC1B,IAAAC,QAAG,EAACD,YAAY,EAAElB,KAAK,CAACoB,IAAI,CAAC;MAAA,CAA2B;MAC1DC,KAAK,EAAE,SAAPA,KAAKA,CAAAC,KAAA;QAAA,IAAKC,MAAM,GAAAD,KAAA,CAANC,MAAM;QAAA,OACd,IAAAJ,QAAG,EAACI,MAAM,EAAEvB,KAAK,CAACoB,IAAI,CAAC;MAAA,CAAuC;MAChEI,kBAAkB,EAAE,SAApBA,kBAAkBA,CAAAC,KAAA;QAAA,IAAKC,mBAAmB,GAAAD,KAAA,CAAnBC,mBAAmB;QAAA,OACxC,IAAAP,QAAG,EAACO,mBAAmB,EAAE1B,KAAK,CAACoB,IAAI,CAAC;MAAA,CAA2B;MACjEO,YAAY,EAAE,SAAdA,YAAYA,CAAAC,KAAA;QAAA,IAAKC,aAAa,GAAAD,KAAA,CAAbC,aAAa;QAAA,OAC5B,IAAAV,QAAG,EAACU,aAAa,EAAE7B,KAAK,CAACoB,IAAI,CAAC;MAAA;IAGlC,CAAC,CAAC,CACH,EACD,UAAAU,KAAA,EAKM;MAAA,IAJJT,KAAK,GAAAS,KAAA,CAALT,KAAK;QAAAU,iBAAA,GAAAD,KAAA,CACLd,WAAW;QAAXA,WAAW,GAAAe,iBAAA,cAAG,IAAAC,sBAAU,EAAChC,KAAK,CAACiC,MAAM,EAAEZ,KAAK,CAAC,GAAAU,iBAAA;QAC7CJ,YAAY,GAAAG,KAAA,CAAZH,YAAY;QAAAO,qBAAA,GAAAJ,KAAA,CACZN,kBAAkB;QAAlBA,kBAAkB,GAAAU,qBAAA,cAAG,IAAAF,sBAAU,EAAChC,KAAK,CAACiC,MAAM,EAAEN,YAAY,CAAC,GAAAO,qBAAA;MAE3D,IAAMC,KAAK,GAAG,CAAC,IAAAC,yBAAO,EAACpB,WAAW,EAAEQ,kBAAkB,CAAC;MACvD,IAAMa,QAAQ,GAAG,CAACF,KAAK;MACvB,OAAO;QACLA,KAAK,EAALA,KAAK;QACLE,QAAQ,EAARA,QAAQ;QACR5C,MAAM,EAAE6C,KAAK,CAACC,OAAO,CAAClB,KAAK,CAAC,GAAGA,KAAK,CAAC5B,MAAM,GAAG;MAChD,CAAC;IACH,CACF,CACF,CAAC;EAAA,GACH,CAACO,KAAK,CAACwC,UAAU,CACnB,CAAC;EAED,IAAAC,gBAAA,GAAoChC,eAAe,CACjDE,cAAc,EACd+B,wBACF,CAAC;IAHOP,KAAK,GAAAM,gBAAA,CAALN,KAAK;IAAEE,QAAQ,GAAAI,gBAAA,CAARJ,QAAQ;IAAE5C,MAAM,GAAAgD,gBAAA,CAANhD,MAAM;EAK/B,IAAMkD,KAAK,GAAGlC,eAAe,CAC3B,UAACmC,KAAK;IAAA,OAAKpC,mBAAmB,CAACoC,KAAK,CAAC,CAAC5C,KAAK,CAACwC,UAAU,CAAC;EAAA,CACzD,CAAC;EACD,IAAMK,IAAI,GAAGpC,eAAe,CAAC,UAACmC,KAAK;IAAA,OAAKA,KAAK,CAACE,SAAS,CAAC9C,KAAK,CAACwC,UAAU,CAAC;EAAA,EAAC;EAC1E,IAAMO,YAAY,GAAGtC,eAAe,CAAC,UAACmC,KAAK;IAAA,OAAKA,KAAK,CAACG,YAAY;EAAA,EAAC;EAEnE,IAAMC,YAAY,GAAGpC,iBAAK,CAACC,OAAO,CAChC;IAAA,OACE,IAAAoC,sCAAkB,EAAA1D,aAAA,CAAAA,aAAA,KACXY,YAAY;MAAEC,cAAc,EAAdA,cAAc;MAAEC,QAAQ,EAARA,QAAQ;MAAEC,OAAO,EAAPA;IAAO,IACpDN,KACF,CAAC;EAAA,GACH,CAACA,KAAK,CAACwC,UAAU,CACnB,CAAC;EACD,IAAMU,QAAQ,GAAGtC,iBAAK,CAACC,OAAO,CAC5B;IAAA,OACE,IAAAsC,mBAAA,aAAI,IAAIb,KAAK,CAAC7C,MAAM,CAAC,CAACV,IAAI,CAAC,CAAC,EAAEqE,GAAG,CAAC,UAACC,KAAK;MAAA,OACtCrD,KAAK,CAACsD,QAAQ;MACZ;MACAD,KACF,CAAC;IAAA,CACH,CAAC;EAAA,GACH,CAAC5D,MAAM,CACT,CAAC;EAED,OAAOmB,iBAAK,CAACC,OAAO,CAClB;IAAA,OAAAtB,aAAA,CAAAA,aAAA,KACKyD,YAAY;MACfO,OAAO,EAAE,CAAAV,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEU,OAAO,KAAI,KAAK;MAC/BC,OAAO,EAAE,CAAAX,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEW,OAAO,KAAIT,YAAY;MACtCU,UAAU,EAAEZ,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEY,UAAU;MAC5Bd,KAAK,EAALA,KAAK;MACLO,QAAQ,EAARA,QAAQ;MACRf,KAAK,EAALA,KAAK;MACLE,QAAQ,EAARA,QAAQ;MACRqB,KAAK,EAAE,CAACf,KAAK;MACbgB,OAAO,EAAEC,OAAO,CAACjB,KAAK;IAAC;EAAA,CACvB,EACF,CAACR,KAAK,EAAEa,YAAY,EAAEE,QAAQ,EAAEL,IAAI,EAAEE,YAAY,EAAEJ,KAAK,CAC3D,CAAC;AACH;AAqBO,SAASkB,aAAaA,CAC3B7D,KAAoC,EACS;EAC7C,IAAA8D,gBAAA,GAAiB,IAAA5D,+BAAc,EAAI,CAAC;IAA5B6D,IAAI,GAAAD,gBAAA,CAAJC,IAAI;EACZ,OAAOhE,iBAAiB,CACtBC,KAAK,YAAYgE,oBAAS,GAAGhE,KAAK,GAAG+D,IAAI,CAAC5C,GAAG,CAACnB,KAAY,CAC5D,CAAC;AACH","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
- initialValue
36
+ parsedValue = maybeParse(field.schema, value),
37
+ initialValue,
38
+ initialParsedValue = maybeParse(field.schema, initialValue)
30
39
  }) => {
31
- const dirty = !isEqual(value, initialValue);
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,
@@ -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, 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.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 declare function useField<Field extends FieldPath>(field: Field): UseFieldProps<Field>;
33
- 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): UseFieldProps<FieldPath<SchemaAt<T, Path>>>;
34
- 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): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>;
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":"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"}
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;AAIhD,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,EAC3B,IAAI,EAAE,IAAI,GACT,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC,UAAU,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACvC,IAAI,EAAE,UAAU,GACf,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;CACtE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAuID,wBAAgB,QAAQ,CAAC,KAAK,SAAS,SAAS,EAC9C,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,aAAa,CAAC,KAAK,CAAC,CAAA;AACvB,wBAAgB,QAAQ,CACtB,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CACnC,CAAC,CAAC,QAAQ,EACV,+CAA+C,CAChD,EACD,IAAI,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,EAElC,KAAK,EAAE,IAAI,EACX,OAAO,CAAC,EAAE,eAAe,GACxB,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AAC9C,wBAAgB,QAAQ,CACtB,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CACnC,CAAC,CAAC,QAAQ,EACV,+CAA+C,CAChD,EACD,UAAU,SAAS,kBAAkB,CAAC,CAAC,CAAC,GAAG,GAAG,EAE9C,KAAK,EAAE,UAAU,EAEjB,OAAO,CAAC,EAAE,eAAe,GACxB,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA"}
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 parsedValue(_ref) {
32
- var parsedValues = _ref.parsedValues;
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 value(_ref2) {
36
- var values = _ref2.values;
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 initialParsedValue(_ref3) {
40
- var initialParsedValues = _ref3.initialParsedValues;
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 initialValue(_ref4) {
44
- var initialValues = _ref4.initialValues;
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 (_ref5) {
48
- var value = _ref5.value,
49
- _ref5$parsedValue = _ref5.parsedValue,
50
- parsedValue = _ref5$parsedValue === void 0 ? (0, _maybeParse.maybeParse)(field.schema, value) : _ref5$parsedValue,
51
- initialValue = _ref5.initialValue,
52
- _ref5$initialParsedVa = _ref5.initialParsedValue,
53
- initialParsedValue = _ref5$initialParsedVa === void 0 ? (0, _maybeParse.maybeParse)(field.schema, initialValue) : _ref5$initialParsedVa;
54
- var dirty = !(0, _fastDeepEqual["default"])(value, initialValue);
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