@reformer/core 1.1.0 → 2.0.0-beta.11

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 (221) hide show
  1. package/dist/behaviors/compute-from.d.ts +2 -0
  2. package/dist/behaviors/compute-from.js +31 -0
  3. package/dist/behaviors/copy-from.d.ts +2 -0
  4. package/dist/behaviors/copy-from.js +29 -0
  5. package/dist/behaviors/enable-when.d.ts +2 -0
  6. package/dist/behaviors/enable-when.js +25 -0
  7. package/dist/behaviors/reset-when.d.ts +2 -0
  8. package/dist/behaviors/reset-when.js +24 -0
  9. package/dist/behaviors/revalidate-when.d.ts +2 -0
  10. package/dist/behaviors/revalidate-when.js +18 -0
  11. package/dist/behaviors/sync-fields.d.ts +2 -0
  12. package/dist/behaviors/sync-fields.js +41 -0
  13. package/dist/behaviors/transform-value.d.ts +2 -0
  14. package/dist/behaviors/transform-value.js +45 -0
  15. package/dist/behaviors/watch-field.d.ts +2 -0
  16. package/dist/behaviors/watch-field.js +21 -0
  17. package/dist/behaviors.d.ts +6 -2
  18. package/dist/behaviors.js +27 -228
  19. package/dist/core/behavior/behavior-context.d.ts +32 -14
  20. package/dist/core/behavior/behavior-registry.d.ts +15 -27
  21. package/dist/core/behavior/behaviors/compute-from.d.ts +50 -21
  22. package/dist/core/behavior/behaviors/copy-from.d.ts +39 -14
  23. package/dist/core/behavior/behaviors/enable-when.d.ts +88 -19
  24. package/dist/core/behavior/behaviors/reset-when.d.ts +31 -18
  25. package/dist/core/behavior/behaviors/revalidate-when.d.ts +40 -17
  26. package/dist/core/behavior/behaviors/sync-fields.d.ts +34 -14
  27. package/dist/core/behavior/behaviors/transform-value.d.ts +116 -44
  28. package/dist/core/behavior/behaviors/watch-field.d.ts +66 -21
  29. package/dist/core/behavior/compose-behavior.d.ts +2 -12
  30. package/dist/core/behavior/index.d.ts +0 -1
  31. package/dist/core/behavior/types.d.ts +2 -8
  32. package/dist/core/factories/node-factory.d.ts +6 -29
  33. package/dist/core/nodes/array-node.d.ts +42 -22
  34. package/dist/core/nodes/field-node.d.ts +51 -26
  35. package/dist/core/nodes/form-node.d.ts +18 -20
  36. package/dist/core/nodes/group-node.d.ts +37 -212
  37. package/dist/core/types/deep-schema.d.ts +2 -12
  38. package/dist/core/types/field-path.d.ts +1 -1
  39. package/dist/core/types/form-context.d.ts +36 -30
  40. package/dist/core/types/{group-node-proxy.d.ts → form-proxy.d.ts} +12 -42
  41. package/dist/core/types/index.d.ts +52 -6
  42. package/dist/core/types/validation-schema.d.ts +3 -12
  43. package/dist/core/utils/abstract-registry.d.ts +74 -0
  44. package/dist/core/utils/aggregate-signals.d.ts +71 -0
  45. package/dist/core/utils/create-form.d.ts +3 -20
  46. package/dist/core/utils/error-handler.d.ts +1 -18
  47. package/dist/core/utils/field-path-navigator.d.ts +1 -1
  48. package/dist/core/{validation → utils}/field-path.d.ts +23 -6
  49. package/dist/core/utils/form-observer.d.ts +176 -0
  50. package/dist/core/utils/form-proxy-builder.d.ts +25 -0
  51. package/dist/core/utils/form-submitter.d.ts +121 -0
  52. package/dist/core/utils/index.d.ts +10 -2
  53. package/dist/core/utils/registry-helpers.d.ts +0 -7
  54. package/dist/core/utils/safe-effect.d.ts +73 -0
  55. package/dist/core/utils/status-machine.d.ts +153 -0
  56. package/dist/core/utils/type-guards.d.ts +5 -23
  57. package/dist/core/utils/unique-id.d.ts +53 -0
  58. package/dist/core/validation/core/apply-when.d.ts +3 -9
  59. package/dist/core/validation/core/apply.d.ts +2 -13
  60. package/dist/core/validation/core/validate-async.d.ts +2 -8
  61. package/dist/core/validation/core/validate-tree.d.ts +10 -10
  62. package/dist/core/validation/core/validate.d.ts +1 -7
  63. package/dist/core/validation/index.d.ts +8 -2
  64. package/dist/core/validation/validate-form.d.ts +1 -38
  65. package/dist/core/validation/validation-applicator.d.ts +2 -21
  66. package/dist/core/validation/validation-context.d.ts +67 -28
  67. package/dist/core/validation/validation-registry.d.ts +11 -25
  68. package/dist/core/validation/validators/array-validators.d.ts +2 -12
  69. package/dist/core/validation/validators/date-utils.d.ts +26 -0
  70. package/dist/core/validation/validators/email.d.ts +2 -9
  71. package/dist/core/validation/validators/future-date.d.ts +35 -0
  72. package/dist/core/validation/validators/index.d.ts +7 -1
  73. package/dist/core/validation/validators/is-date.d.ts +36 -0
  74. package/dist/core/validation/validators/max-age.d.ts +36 -0
  75. package/dist/core/validation/validators/max-date.d.ts +36 -0
  76. package/dist/core/validation/validators/max-length.d.ts +3 -10
  77. package/dist/core/validation/validators/max.d.ts +3 -10
  78. package/dist/core/validation/validators/min-age.d.ts +36 -0
  79. package/dist/core/validation/validators/min-date.d.ts +36 -0
  80. package/dist/core/validation/validators/min-length.d.ts +3 -10
  81. package/dist/core/validation/validators/min.d.ts +3 -10
  82. package/dist/core/validation/validators/number.d.ts +2 -9
  83. package/dist/core/validation/validators/past-date.d.ts +35 -0
  84. package/dist/core/validation/validators/pattern.d.ts +2 -9
  85. package/dist/core/validation/validators/phone.d.ts +2 -9
  86. package/dist/core/validation/validators/required.d.ts +2 -9
  87. package/dist/core/validation/validators/url.d.ts +2 -9
  88. package/dist/date-utils-xUWFslTj.js +29 -0
  89. package/dist/field-path-DuKdGcIE.js +66 -0
  90. package/dist/hooks/types.d.ts +328 -0
  91. package/dist/hooks/useArrayLength.d.ts +31 -0
  92. package/dist/hooks/useFormControl.d.ts +15 -39
  93. package/dist/hooks/useFormControlValue.d.ts +167 -0
  94. package/dist/hooks/useHiddenCondition.d.ts +25 -0
  95. package/dist/hooks/useSignalSubscription.d.ts +17 -0
  96. package/dist/index-D25LsbRm.js +73 -0
  97. package/dist/index.d.ts +8 -1
  98. package/dist/index.js +3271 -8
  99. package/dist/registry-helpers-Bv_BJ1s-.js +615 -0
  100. package/dist/safe-effect-Dh8uw81c.js +20 -0
  101. package/dist/validate-C3XiA_zf.js +10 -0
  102. package/dist/validators/email.d.ts +2 -0
  103. package/dist/validators/email.js +13 -0
  104. package/dist/validators/future-date.d.ts +2 -0
  105. package/dist/validators/future-date.js +20 -0
  106. package/dist/validators/is-date.d.ts +2 -0
  107. package/dist/validators/is-date.js +12 -0
  108. package/dist/validators/max-age.d.ts +2 -0
  109. package/dist/validators/max-age.js +20 -0
  110. package/dist/validators/max-date.d.ts +2 -0
  111. package/dist/validators/max-date.js +20 -0
  112. package/dist/validators/max-length.d.ts +2 -0
  113. package/dist/validators/max-length.js +11 -0
  114. package/dist/validators/max.d.ts +2 -0
  115. package/dist/validators/max.js +11 -0
  116. package/dist/validators/min-age.d.ts +2 -0
  117. package/dist/validators/min-age.js +20 -0
  118. package/dist/validators/min-date.d.ts +2 -0
  119. package/dist/validators/min-date.js +20 -0
  120. package/dist/validators/min-length.d.ts +2 -0
  121. package/dist/validators/min-length.js +11 -0
  122. package/dist/validators/min.d.ts +2 -0
  123. package/dist/validators/min.js +11 -0
  124. package/dist/validators/number.d.ts +2 -0
  125. package/dist/validators/number.js +35 -0
  126. package/dist/validators/past-date.d.ts +2 -0
  127. package/dist/validators/past-date.js +20 -0
  128. package/dist/validators/pattern.d.ts +2 -0
  129. package/dist/validators/pattern.js +11 -0
  130. package/dist/validators/phone.d.ts +2 -0
  131. package/dist/validators/phone.js +35 -0
  132. package/dist/validators/required.d.ts +2 -0
  133. package/dist/validators/required.js +15 -0
  134. package/dist/validators/url.d.ts +2 -0
  135. package/dist/validators/url.js +19 -0
  136. package/dist/validators-BGsNOgT1.js +207 -0
  137. package/dist/validators.d.ts +6 -2
  138. package/dist/validators.js +54 -296
  139. package/llms.txt +8887 -59
  140. package/package.json +87 -8
  141. package/dist/core/behavior/behavior-applicator.d.ts +0 -71
  142. package/dist/core/behavior/behavior-applicator.js +0 -92
  143. package/dist/core/behavior/behavior-context.js +0 -38
  144. package/dist/core/behavior/behavior-registry.js +0 -198
  145. package/dist/core/behavior/behaviors/compute-from.js +0 -84
  146. package/dist/core/behavior/behaviors/copy-from.js +0 -64
  147. package/dist/core/behavior/behaviors/enable-when.js +0 -81
  148. package/dist/core/behavior/behaviors/index.js +0 -11
  149. package/dist/core/behavior/behaviors/reset-when.js +0 -63
  150. package/dist/core/behavior/behaviors/revalidate-when.js +0 -51
  151. package/dist/core/behavior/behaviors/sync-fields.js +0 -66
  152. package/dist/core/behavior/behaviors/transform-value.js +0 -110
  153. package/dist/core/behavior/behaviors/watch-field.js +0 -56
  154. package/dist/core/behavior/compose-behavior.js +0 -166
  155. package/dist/core/behavior/create-field-path.d.ts +0 -20
  156. package/dist/core/behavior/create-field-path.js +0 -69
  157. package/dist/core/behavior/index.js +0 -17
  158. package/dist/core/behavior/types.js +0 -7
  159. package/dist/core/context/form-context-impl.d.ts +0 -29
  160. package/dist/core/context/form-context-impl.js +0 -37
  161. package/dist/core/factories/index.js +0 -6
  162. package/dist/core/factories/node-factory.js +0 -281
  163. package/dist/core/nodes/array-node.js +0 -534
  164. package/dist/core/nodes/field-node.js +0 -510
  165. package/dist/core/nodes/form-node.js +0 -343
  166. package/dist/core/nodes/group-node/field-registry.d.ts +0 -191
  167. package/dist/core/nodes/group-node/field-registry.js +0 -215
  168. package/dist/core/nodes/group-node/index.d.ts +0 -11
  169. package/dist/core/nodes/group-node/index.js +0 -11
  170. package/dist/core/nodes/group-node/proxy-builder.d.ts +0 -71
  171. package/dist/core/nodes/group-node/proxy-builder.js +0 -161
  172. package/dist/core/nodes/group-node/state-manager.d.ts +0 -184
  173. package/dist/core/nodes/group-node/state-manager.js +0 -265
  174. package/dist/core/nodes/group-node.js +0 -770
  175. package/dist/core/types/deep-schema.js +0 -11
  176. package/dist/core/types/field-path.js +0 -4
  177. package/dist/core/types/form-context.js +0 -25
  178. package/dist/core/types/group-node-proxy.js +0 -31
  179. package/dist/core/types/index.js +0 -4
  180. package/dist/core/types/validation-schema.js +0 -10
  181. package/dist/core/utils/create-form.js +0 -24
  182. package/dist/core/utils/debounce.d.ts +0 -160
  183. package/dist/core/utils/debounce.js +0 -197
  184. package/dist/core/utils/error-handler.js +0 -226
  185. package/dist/core/utils/field-path-navigator.js +0 -374
  186. package/dist/core/utils/index.js +0 -14
  187. package/dist/core/utils/registry-helpers.js +0 -79
  188. package/dist/core/utils/registry-stack.js +0 -86
  189. package/dist/core/utils/resources.d.ts +0 -41
  190. package/dist/core/utils/resources.js +0 -69
  191. package/dist/core/utils/subscription-manager.js +0 -214
  192. package/dist/core/utils/type-guards.js +0 -169
  193. package/dist/core/validation/core/apply-when.js +0 -41
  194. package/dist/core/validation/core/apply.js +0 -38
  195. package/dist/core/validation/core/index.js +0 -8
  196. package/dist/core/validation/core/validate-async.js +0 -45
  197. package/dist/core/validation/core/validate-tree.js +0 -37
  198. package/dist/core/validation/core/validate.js +0 -38
  199. package/dist/core/validation/field-path.js +0 -147
  200. package/dist/core/validation/index.js +0 -33
  201. package/dist/core/validation/validate-form.js +0 -152
  202. package/dist/core/validation/validation-applicator.js +0 -217
  203. package/dist/core/validation/validation-context.js +0 -75
  204. package/dist/core/validation/validation-registry.js +0 -298
  205. package/dist/core/validation/validators/array-validators.js +0 -86
  206. package/dist/core/validation/validators/date.d.ts +0 -38
  207. package/dist/core/validation/validators/date.js +0 -117
  208. package/dist/core/validation/validators/email.js +0 -60
  209. package/dist/core/validation/validators/index.js +0 -14
  210. package/dist/core/validation/validators/max-length.js +0 -60
  211. package/dist/core/validation/validators/max.js +0 -60
  212. package/dist/core/validation/validators/min-length.js +0 -60
  213. package/dist/core/validation/validators/min.js +0 -60
  214. package/dist/core/validation/validators/number.js +0 -90
  215. package/dist/core/validation/validators/pattern.js +0 -62
  216. package/dist/core/validation/validators/phone.js +0 -58
  217. package/dist/core/validation/validators/required.js +0 -69
  218. package/dist/core/validation/validators/url.js +0 -55
  219. package/dist/create-field-path-CdPF3lIK.js +0 -704
  220. package/dist/hooks/useFormControl.js +0 -298
  221. package/dist/node-factory-D7DOnSSN.js +0 -3200
@@ -1,298 +0,0 @@
1
- import { useSyncExternalStore, useCallback, useRef } from 'react';
2
- import { effect } from '@preact/signals-core';
3
- // ============================================================================
4
- // Утилиты для сравнения
5
- // ============================================================================
6
- /**
7
- * Shallow сравнение массивов по содержимому
8
- * Возвращает true если массивы равны (одинаковые элементы в том же порядке)
9
- * @internal
10
- */
11
- function shallowArrayEqual(a, b) {
12
- if (a === b)
13
- return true;
14
- if (a.length !== b.length)
15
- return false;
16
- for (let i = 0; i < a.length; i++) {
17
- if (a[i] !== b[i])
18
- return false;
19
- }
20
- return true;
21
- }
22
- // ============================================================================
23
- // Внутренние хуки для каждого типа контрола
24
- // ============================================================================
25
- /**
26
- * Внутренний хук для FieldNode с использованием useSyncExternalStore
27
- * @internal
28
- */
29
- function useFieldControl(control) {
30
- // Кеш для предотвращения лишних ре-рендеров
31
- const cacheRef = useRef({
32
- snapshot: null,
33
- value: control.value.value,
34
- errors: control.errors.value,
35
- componentProps: control.componentProps.value,
36
- disabled: control.disabled.value,
37
- pending: control.pending.value,
38
- valid: control.valid.value,
39
- invalid: control.invalid.value,
40
- touched: control.touched.value,
41
- shouldShowError: control.shouldShowError.value,
42
- });
43
- // Функция подписки - использует effect для отслеживания всех сигналов
44
- const subscribe = useCallback((onStoreChange) => {
45
- // Используем effect который автоматически отслеживает все читаемые сигналы
46
- // effect НЕ вызывает callback сразу, только при изменениях
47
- let isFirstRun = true;
48
- const dispose = effect(() => {
49
- // Читаем все сигналы чтобы effect их отслеживал
50
- control.value.value;
51
- control.disabled.value;
52
- control.errors.value;
53
- control.pending.value;
54
- control.valid.value;
55
- control.invalid.value;
56
- control.touched.value;
57
- control.shouldShowError.value;
58
- control.componentProps.value;
59
- // Пропускаем первый вызов (при создании effect)
60
- if (isFirstRun) {
61
- isFirstRun = false;
62
- return;
63
- }
64
- // Уведомляем React об изменении
65
- onStoreChange();
66
- });
67
- return dispose;
68
- }, [control]);
69
- // Функция получения текущего состояния
70
- const getSnapshot = useCallback(() => {
71
- const cache = cacheRef.current;
72
- // Получаем текущие значения из сигналов
73
- const currentValue = control.value.value;
74
- const currentErrors = control.errors.value;
75
- const currentComponentProps = control.componentProps.value;
76
- const currentDisabled = control.disabled.value;
77
- const currentPending = control.pending.value;
78
- const currentValid = control.valid.value;
79
- const currentInvalid = control.invalid.value;
80
- const currentTouched = control.touched.value;
81
- const currentShouldShowError = control.shouldShowError.value;
82
- // Проверяем, изменилось ли что-то
83
- // Используем shallowArrayEqual для errors т.к. валидация может создавать новые массивы
84
- const hasChanged = cache.value !== currentValue ||
85
- !shallowArrayEqual(cache.errors, currentErrors) ||
86
- cache.componentProps !== currentComponentProps ||
87
- cache.disabled !== currentDisabled ||
88
- cache.pending !== currentPending ||
89
- cache.valid !== currentValid ||
90
- cache.invalid !== currentInvalid ||
91
- cache.touched !== currentTouched ||
92
- cache.shouldShowError !== currentShouldShowError;
93
- // Если ничего не изменилось, возвращаем кешированный snapshot
94
- if (!hasChanged && cache.snapshot) {
95
- return cache.snapshot;
96
- }
97
- // Обновляем кеш
98
- cache.value = currentValue;
99
- cache.errors = currentErrors;
100
- cache.componentProps = currentComponentProps;
101
- cache.disabled = currentDisabled;
102
- cache.pending = currentPending;
103
- cache.valid = currentValid;
104
- cache.invalid = currentInvalid;
105
- cache.touched = currentTouched;
106
- cache.shouldShowError = currentShouldShowError;
107
- // Создаём новый snapshot
108
- cache.snapshot = {
109
- value: currentValue,
110
- pending: currentPending,
111
- disabled: currentDisabled,
112
- errors: currentErrors,
113
- valid: currentValid,
114
- invalid: currentInvalid,
115
- touched: currentTouched,
116
- shouldShowError: currentShouldShowError,
117
- componentProps: currentComponentProps,
118
- };
119
- return cache.snapshot;
120
- }, [control]);
121
- return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
122
- }
123
- /**
124
- * Внутренний хук для ArrayNode с использованием useSyncExternalStore
125
- * @internal
126
- */
127
- function useArrayControl(control) {
128
- // Кеш для предотвращения лишних ре-рендеров
129
- const cacheRef = useRef({
130
- snapshot: null,
131
- value: control.value.value,
132
- length: control.length.value,
133
- errors: control.errors.value,
134
- pending: control.pending.value,
135
- valid: control.valid.value,
136
- invalid: control.invalid.value,
137
- touched: control.touched.value,
138
- dirty: control.dirty.value,
139
- });
140
- // Функция подписки
141
- const subscribe = useCallback((onStoreChange) => {
142
- let isFirstRun = true;
143
- const dispose = effect(() => {
144
- // Читаем все сигналы
145
- control.value.value;
146
- control.length.value;
147
- control.errors.value;
148
- control.pending.value;
149
- control.valid.value;
150
- control.invalid.value;
151
- control.touched.value;
152
- control.dirty.value;
153
- if (isFirstRun) {
154
- isFirstRun = false;
155
- return;
156
- }
157
- onStoreChange();
158
- });
159
- return dispose;
160
- }, [control]);
161
- // Функция получения текущего состояния
162
- const getSnapshot = useCallback(() => {
163
- const cache = cacheRef.current;
164
- const currentValue = control.value.value;
165
- const currentLength = control.length.value;
166
- const currentErrors = control.errors.value;
167
- const currentPending = control.pending.value;
168
- const currentValid = control.valid.value;
169
- const currentInvalid = control.invalid.value;
170
- const currentTouched = control.touched.value;
171
- const currentDirty = control.dirty.value;
172
- const hasChanged = cache.value !== currentValue ||
173
- cache.length !== currentLength ||
174
- !shallowArrayEqual(cache.errors, currentErrors) ||
175
- cache.pending !== currentPending ||
176
- cache.valid !== currentValid ||
177
- cache.invalid !== currentInvalid ||
178
- cache.touched !== currentTouched ||
179
- cache.dirty !== currentDirty;
180
- if (!hasChanged && cache.snapshot) {
181
- return cache.snapshot;
182
- }
183
- cache.value = currentValue;
184
- cache.length = currentLength;
185
- cache.errors = currentErrors;
186
- cache.pending = currentPending;
187
- cache.valid = currentValid;
188
- cache.invalid = currentInvalid;
189
- cache.touched = currentTouched;
190
- cache.dirty = currentDirty;
191
- cache.snapshot = {
192
- value: currentValue,
193
- length: currentLength,
194
- pending: currentPending,
195
- errors: currentErrors,
196
- valid: currentValid,
197
- invalid: currentInvalid,
198
- touched: currentTouched,
199
- dirty: currentDirty,
200
- };
201
- return cache.snapshot;
202
- }, [control]);
203
- return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
204
- }
205
- // ============================================================================
206
- // Хук для получения только значения (без подписки на другие сигналы)
207
- // ============================================================================
208
- /**
209
- * Хук для получения только значения поля без подписки на errors, valid и т.д.
210
- * Используйте когда нужно только значение для условного рендеринга.
211
- *
212
- * @group React Hooks
213
- */
214
- export function useFormControlValue(control) {
215
- const cacheRef = useRef({
216
- value: control.value.value,
217
- snapshot: control.value.value,
218
- });
219
- const subscribe = useCallback((onStoreChange) => {
220
- let isFirstRun = true;
221
- const dispose = effect(() => {
222
- control.value.value; // Подписываемся ТОЛЬКО на value
223
- if (isFirstRun) {
224
- isFirstRun = false;
225
- return;
226
- }
227
- onStoreChange();
228
- });
229
- return dispose;
230
- }, [control]);
231
- const getSnapshot = useCallback(() => {
232
- const currentValue = control.value.value;
233
- if (cacheRef.current.value === currentValue) {
234
- return cacheRef.current.snapshot;
235
- }
236
- cacheRef.current.value = currentValue;
237
- cacheRef.current.snapshot = currentValue;
238
- return currentValue;
239
- }, [control]);
240
- return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
241
- }
242
- /**
243
- * Хук для работы с FieldNode или ArrayNode - возвращает состояние с подписками на сигналы
244
- *
245
- * Использует useSyncExternalStore для оптимальной интеграции с React 18+.
246
- * Компонент ре-рендерится только когда реально изменились данные контрола.
247
- *
248
- * @group React Hooks
249
- *
250
- * @example FieldNode
251
- * ```tsx
252
- * const { value, errors, componentProps } = useFormControl(control);
253
- *
254
- * return (
255
- * <div>
256
- * <input value={value} onChange={e => control.setValue(e.target.value)} />
257
- * {errors.length > 0 && <span>{errors[0].message}</span>}
258
- * </div>
259
- * );
260
- * ```
261
- *
262
- * @example ArrayNode
263
- * ```tsx
264
- * const { length } = useFormControl(arrayControl);
265
- *
266
- * return (
267
- * <div>
268
- * {arrayControl.map((item, index) => (
269
- * <ItemComponent key={item.id || index} control={item} />
270
- * ))}
271
- * {length === 0 && <span>Список пуст</span>}
272
- * </div>
273
- * );
274
- * ```
275
- */
276
- export function useFormControl(control) {
277
- // Определяем тип контрола по наличию специфичных свойств
278
- const isArrayNode = control && 'length' in control && 'map' in control;
279
- // Для undefined контрола возвращаем дефолтное состояние
280
- if (!control) {
281
- return {
282
- value: [],
283
- length: 0,
284
- pending: false,
285
- errors: [],
286
- valid: true,
287
- invalid: false,
288
- touched: false,
289
- dirty: false,
290
- };
291
- }
292
- if (isArrayNode) {
293
- // eslint-disable-next-line react-hooks/rules-of-hooks
294
- return useArrayControl(control);
295
- }
296
- // eslint-disable-next-line react-hooks/rules-of-hooks
297
- return useFieldControl(control);
298
- }