@digigov/form 2.0.0-555d1027 → 2.0.0-5e7a6790

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 (396) hide show
  1. package/Field/ErrorGroup.d.ts +3 -3
  2. package/Field/ErrorGroup.js.map +1 -1
  3. package/Field/FieldBase/index.js +0 -1
  4. package/Field/FieldBase.d.ts +1 -1
  5. package/Field/FieldBase.js.map +2 -2
  6. package/Field/FieldBaseContainer/index.js +36 -34
  7. package/Field/FieldBaseContainer.d.ts +2 -2
  8. package/Field/FieldBaseContainer.js.map +2 -2
  9. package/Field/FieldConditional.d.ts +1 -1
  10. package/Field/FieldConditional.js.map +1 -1
  11. package/Field/index.d.ts +1 -1
  12. package/Field/index.js +15 -25
  13. package/Field/index.js.map +2 -2
  14. package/Field/types.d.ts +11 -10
  15. package/Field/utils/evaluateFieldWithConditions.d.ts +2 -2
  16. package/Field/utils/evaluateFieldWithConditions.js.map +2 -2
  17. package/Field/utils/resolveField/index.js +35 -0
  18. package/Field/utils/{calculateField → resolveField}/package.json +1 -1
  19. package/Field/utils/resolveField.d.ts +3 -0
  20. package/Field/utils/resolveField.js.map +7 -0
  21. package/Field/utils/useField/index.js +4 -2
  22. package/Field/utils/useField.d.ts +1 -1
  23. package/Field/utils/useField.js.map +2 -2
  24. package/FieldArray/BaseFieldArray/index.js +76 -0
  25. package/{inputs/inputsScenarios → FieldArray/BaseFieldArray}/package.json +1 -1
  26. package/FieldArray/BaseFieldArray.d.ts +5 -0
  27. package/FieldArray/BaseFieldArray.js.map +7 -0
  28. package/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.d.ts +10 -0
  29. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +97 -0
  30. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/package.json +6 -0
  31. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.d.ts +22 -0
  32. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
  33. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/index.js +11 -0
  34. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/package.json +6 -0
  35. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.d.ts +5 -0
  36. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
  37. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.d.ts +2 -0
  38. package/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.d.ts +2 -0
  39. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.d.ts +2 -0
  40. package/FieldArray/FormDialog/ArrayDisplay/index.d.ts +14 -0
  41. package/FieldArray/FormDialog/ArrayDisplay/index.js +51 -0
  42. package/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
  43. package/FieldArray/FormDialog/ArrayDisplay/package.json +6 -0
  44. package/FieldArray/FormDialog/ArrayEditModal/index.js +149 -0
  45. package/FieldArray/FormDialog/ArrayEditModal/package.json +6 -0
  46. package/FieldArray/FormDialog/ArrayEditModal.d.ts +26 -0
  47. package/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
  48. package/FieldArray/FormDialog/index.d.ts +19 -0
  49. package/FieldArray/FormDialog/index.js +139 -348
  50. package/FieldArray/FormDialog/index.js.map +7 -0
  51. package/FieldArray/index.d.ts +4 -2
  52. package/FieldArray/index.js +28 -54
  53. package/FieldArray/index.js.map +2 -2
  54. package/FieldObject/index.d.ts +4 -4
  55. package/FieldObject/index.js +5 -12
  56. package/FieldObject/index.js.map +2 -2
  57. package/Fieldset/FieldsetWithContext.js.map +1 -1
  58. package/Fieldset/index.d.ts +1 -1
  59. package/Fieldset/index.js.map +1 -1
  60. package/Fieldset/types.d.ts +2 -2
  61. package/FormBuilder/index.d.ts +1 -1
  62. package/FormBuilder/index.js +155 -130
  63. package/FormBuilder/index.js.map +2 -2
  64. package/FormContext.d.ts +2 -2
  65. package/FormContext.js.map +2 -2
  66. package/MultiplicityField/add-objects/index.js +10 -19
  67. package/MultiplicityField/add-objects.d.ts +1 -1
  68. package/MultiplicityField/add-objects.js.map +2 -2
  69. package/MultiplicityField/index.d.ts +2 -2
  70. package/MultiplicityField/index.js.map +2 -2
  71. package/MultiplicityField/types.d.ts +2 -2
  72. package/Questions/Questions.d.ts +1 -1
  73. package/Questions/Questions.js.map +1 -1
  74. package/Questions/QuestionsContext.d.ts +1 -1
  75. package/Questions/QuestionsContext.js.map +1 -1
  76. package/Questions/Step/Step.d.ts +1 -1
  77. package/Questions/Step/Step.js.map +1 -1
  78. package/Questions/Step/StepArrayReview.d.ts +1 -1
  79. package/Questions/Step/StepArrayReview.js.map +1 -1
  80. package/Questions/Step/StepContext.d.ts +1 -1
  81. package/Questions/Step/StepContext.js.map +1 -1
  82. package/Questions/Step/StepDescription.d.ts +1 -1
  83. package/Questions/Step/StepDescription.js.map +2 -2
  84. package/Questions/Step/StepForm.d.ts +2 -2
  85. package/Questions/Step/StepForm.js.map +1 -1
  86. package/Questions/Step/StepQuote.d.ts +1 -1
  87. package/Questions/Step/StepQuote.js.map +2 -2
  88. package/Questions/Step/StepTitle.d.ts +1 -1
  89. package/Questions/Step/StepTitle.js.map +2 -2
  90. package/Questions/Step/getAddMoreFields.d.ts +2 -2
  91. package/Questions/Step/getAddMoreFields.js.map +1 -1
  92. package/Questions/Step/types.d.ts +1 -1
  93. package/Questions/getNextStep.d.ts +1 -1
  94. package/Questions/getNextStep.js.map +1 -1
  95. package/Questions/types.d.ts +1 -1
  96. package/cjs/Field/ErrorGroup.js.map +1 -1
  97. package/cjs/Field/FieldBase/index.js +0 -1
  98. package/cjs/Field/FieldBase.js.map +2 -2
  99. package/cjs/Field/FieldBaseContainer/index.js +36 -34
  100. package/cjs/Field/FieldBaseContainer.js.map +2 -2
  101. package/cjs/Field/FieldConditional.js.map +1 -1
  102. package/cjs/Field/index.js +15 -22
  103. package/cjs/Field/index.js.map +2 -2
  104. package/cjs/Field/types.js.map +1 -1
  105. package/cjs/Field/utils/evaluateFieldWithConditions.js.map +2 -2
  106. package/cjs/Field/utils/resolveField/index.js +55 -0
  107. package/cjs/Field/utils/resolveField.js.map +7 -0
  108. package/cjs/Field/utils/useField/index.js +4 -2
  109. package/cjs/Field/utils/useField.js.map +2 -2
  110. package/cjs/FieldArray/BaseFieldArray/index.js +109 -0
  111. package/cjs/FieldArray/BaseFieldArray.js.map +7 -0
  112. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +130 -0
  113. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
  114. package/cjs/{locales/el → FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader}/index.js +16 -7
  115. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
  116. package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js +84 -0
  117. package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
  118. package/cjs/FieldArray/FormDialog/ArrayEditModal/index.js +177 -0
  119. package/cjs/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
  120. package/cjs/FieldArray/FormDialog/index.js +130 -331
  121. package/cjs/FieldArray/FormDialog/index.js.map +7 -0
  122. package/cjs/FieldArray/index.js +27 -53
  123. package/cjs/FieldArray/index.js.map +3 -3
  124. package/cjs/FieldObject/index.js +5 -9
  125. package/cjs/FieldObject/index.js.map +2 -2
  126. package/cjs/Fieldset/FieldsetWithContext.js.map +1 -1
  127. package/cjs/Fieldset/index.js.map +1 -1
  128. package/cjs/Fieldset/types.js.map +1 -1
  129. package/cjs/FormBuilder/index.js +156 -131
  130. package/cjs/FormBuilder/index.js.map +3 -3
  131. package/cjs/FormContext.js.map +2 -2
  132. package/cjs/MultiplicityField/add-objects/index.js +9 -13
  133. package/cjs/MultiplicityField/add-objects.js.map +2 -2
  134. package/cjs/MultiplicityField/index.js.map +2 -2
  135. package/cjs/MultiplicityField/types.js.map +1 -1
  136. package/cjs/Questions/Questions.js.map +1 -1
  137. package/cjs/Questions/QuestionsContext.js.map +1 -1
  138. package/cjs/Questions/Step/Step.js.map +1 -1
  139. package/cjs/Questions/Step/StepArrayReview.js.map +1 -1
  140. package/cjs/Questions/Step/StepContext.js.map +1 -1
  141. package/cjs/Questions/Step/StepDescription.js.map +2 -2
  142. package/cjs/Questions/Step/StepForm.js.map +1 -1
  143. package/cjs/Questions/Step/StepQuote.js.map +2 -2
  144. package/cjs/Questions/Step/StepTitle.js.map +2 -2
  145. package/cjs/Questions/Step/getAddMoreFields.js.map +1 -1
  146. package/cjs/Questions/Step/types.js.map +1 -1
  147. package/cjs/Questions/getNextStep.js.map +1 -1
  148. package/cjs/Questions/types.js.map +1 -1
  149. package/cjs/hooks/useFieldFocusManager/index.js +135 -0
  150. package/cjs/hooks/useFieldFocusManager.js.map +7 -0
  151. package/cjs/hooks/utils/index.js +98 -0
  152. package/cjs/hooks/utils.js.map +7 -0
  153. package/cjs/inputs/AutoCompleteInput/index.js.map +2 -2
  154. package/cjs/inputs/Checkboxes/index.js +67 -63
  155. package/cjs/inputs/Checkboxes/index.js.map +2 -2
  156. package/cjs/inputs/DateInput/index.js +10 -5
  157. package/cjs/inputs/DateInput/index.js.map +2 -2
  158. package/cjs/inputs/DateTimeInput/index.js +10 -5
  159. package/cjs/inputs/DateTimeInput/index.js.map +2 -2
  160. package/cjs/inputs/FileInput/index.js.map +2 -2
  161. package/cjs/inputs/ImageInput/index.js.map +1 -1
  162. package/cjs/inputs/Input/index.js +54 -56
  163. package/cjs/inputs/Input/index.js.map +2 -2
  164. package/cjs/inputs/Label/index.js.map +1 -1
  165. package/cjs/inputs/OtpInput/index.js +36 -31
  166. package/cjs/inputs/OtpInput/index.js.map +2 -2
  167. package/cjs/inputs/Radio/index.js +5 -4
  168. package/cjs/inputs/Radio/index.js.map +3 -3
  169. package/cjs/inputs/Select/index.js.map +1 -1
  170. package/cjs/{Field/utils → inputs/registry}/index.js +4 -4
  171. package/cjs/inputs/registry.js.map +7 -0
  172. package/cjs/{lazy/index.js → lazy.js} +10 -9
  173. package/cjs/lazy.js.map +2 -2
  174. package/cjs/{registry/index.js → registry.js} +23 -13
  175. package/cjs/registry.js.map +2 -2
  176. package/cjs/types.js.map +1 -1
  177. package/cjs/utils.js.map +2 -2
  178. package/cjs/validators/index.js.map +2 -2
  179. package/cjs/validators/types.js.map +1 -1
  180. package/cjs/validators/utils/date/index.js +6 -1
  181. package/cjs/validators/utils/date.js.map +2 -2
  182. package/cjs/validators/utils/datetime/index.js +6 -1
  183. package/cjs/validators/utils/datetime.js.map +2 -2
  184. package/cjs/validators/utils/file.js.map +1 -1
  185. package/cjs/validators/utils/iban.js.map +1 -1
  186. package/cjs/validators/utils/image.js.map +1 -1
  187. package/cjs/validators/utils/index.js.map +1 -1
  188. package/cjs/validators/utils/int.js.map +1 -1
  189. package/cjs/validators/utils/number.js.map +1 -1
  190. package/cjs/validators/utils/otp.js.map +1 -1
  191. package/cjs/validators/utils/phone.js.map +1 -1
  192. package/cjs/validators/utils/postal_code.js.map +1 -1
  193. package/cjs/validators/utils/text_limit.js.map +1 -1
  194. package/hooks/useFieldFocusManager/index.js +116 -0
  195. package/hooks/useFieldFocusManager/package.json +6 -0
  196. package/hooks/useFieldFocusManager.d.ts +25 -0
  197. package/hooks/useFieldFocusManager.js.map +7 -0
  198. package/hooks/utils/index.js +73 -0
  199. package/{Field → hooks}/utils/package.json +1 -1
  200. package/hooks/utils.d.ts +18 -0
  201. package/hooks/utils.js.map +7 -0
  202. package/index.js +1 -1
  203. package/inputs/AutoCompleteInput/index.d.ts +3 -3
  204. package/inputs/AutoCompleteInput/index.js +1 -3
  205. package/inputs/AutoCompleteInput/index.js.map +2 -2
  206. package/inputs/Checkboxes/index.d.ts +3 -3
  207. package/inputs/Checkboxes/index.js +67 -63
  208. package/inputs/Checkboxes/index.js.map +2 -2
  209. package/inputs/DateInput/index.d.ts +2 -5
  210. package/inputs/DateInput/index.js +10 -5
  211. package/inputs/DateInput/index.js.map +2 -2
  212. package/inputs/DateTimeInput/index.d.ts +2 -5
  213. package/inputs/DateTimeInput/index.js +10 -5
  214. package/inputs/DateTimeInput/index.js.map +2 -2
  215. package/inputs/FileInput/index.d.ts +4 -4
  216. package/inputs/FileInput/index.js +1 -4
  217. package/inputs/FileInput/index.js.map +2 -2
  218. package/inputs/ImageInput/index.d.ts +2 -2
  219. package/inputs/ImageInput/index.js.map +1 -1
  220. package/inputs/Input/index.d.ts +2 -2
  221. package/inputs/Input/index.js +54 -56
  222. package/inputs/Input/index.js.map +2 -2
  223. package/inputs/Label/index.d.ts +1 -1
  224. package/inputs/Label/index.js.map +1 -1
  225. package/inputs/OtpInput/index.d.ts +1 -5
  226. package/inputs/OtpInput/index.js +36 -31
  227. package/inputs/OtpInput/index.js.map +2 -2
  228. package/inputs/Radio/index.d.ts +4 -4
  229. package/inputs/Radio/index.js +5 -4
  230. package/inputs/Radio/index.js.map +3 -3
  231. package/inputs/Select/index.d.ts +2 -2
  232. package/inputs/Select/index.js.map +1 -1
  233. package/{Field/utils → inputs/registry}/index.js +1 -1
  234. package/{locales/el → inputs/registry}/package.json +1 -1
  235. package/{Field/utils/index.d.ts → inputs/registry.d.ts} +2 -1
  236. package/inputs/registry.js.map +7 -0
  237. package/lazy/index.js +10 -9
  238. package/package.json +4 -4
  239. package/registry/index.js +23 -13
  240. package/src/Field/ErrorGroup.tsx +3 -3
  241. package/src/Field/FieldBase.tsx +1 -2
  242. package/src/Field/FieldBaseContainer.tsx +68 -58
  243. package/src/Field/FieldConditional.tsx +1 -1
  244. package/src/Field/index.tsx +15 -33
  245. package/src/Field/types.tsx +11 -12
  246. package/src/Field/utils/evaluateFieldWithConditions.ts +5 -2
  247. package/src/Field/utils/resolveField.ts +58 -0
  248. package/src/Field/utils/useField.ts +3 -1
  249. package/src/FieldArray/BaseFieldArray.tsx +97 -0
  250. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.js +11 -0
  251. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.tsx +165 -0
  252. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.tsx +15 -0
  253. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.tsx +93 -0
  254. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.tsx +79 -0
  255. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.tsx +93 -0
  256. package/src/FieldArray/FormDialog/ArrayDisplay/index.tsx +75 -0
  257. package/src/FieldArray/FormDialog/ArrayEditModal.tsx +233 -0
  258. package/src/FieldArray/FormDialog/index.tsx +247 -0
  259. package/src/FieldArray/__tests__/fieldset-multiplicity.spec.tsx +271 -0
  260. package/src/FieldArray/__tests__/multiplicity-attachment.spec.tsx +280 -0
  261. package/src/FieldArray/__tests__/multiplicity-required.spec.tsx +131 -0
  262. package/src/FieldArray/__tests__/nested-fieldset-multiplicity.spec.tsx +627 -0
  263. package/src/FieldArray/__tests__/preference-multiple-choice.spec.tsx +222 -0
  264. package/src/FieldArray/index.spec.tsx +355 -0
  265. package/src/FieldArray/index.tsx +34 -61
  266. package/src/FieldObject/index.tsx +9 -17
  267. package/src/Fieldset/FieldsetWithContext.tsx +1 -1
  268. package/src/Fieldset/index.tsx +1 -1
  269. package/src/Fieldset/types.tsx +2 -2
  270. package/src/FormBuilder/index.tsx +188 -142
  271. package/src/FormBuilder/scenarios.test.tsx +759 -1
  272. package/src/FormContext.tsx +3 -2
  273. package/src/MultiplicityField/add-objects.tsx +12 -21
  274. package/src/MultiplicityField/index.tsx +3 -2
  275. package/src/MultiplicityField/types.ts +5 -2
  276. package/src/Questions/Questions.tsx +2 -2
  277. package/src/Questions/QuestionsContext.tsx +1 -1
  278. package/src/Questions/Step/Step.tsx +1 -1
  279. package/src/Questions/Step/StepArrayReview.tsx +2 -2
  280. package/src/Questions/Step/StepContext.tsx +1 -1
  281. package/src/Questions/Step/StepDescription.tsx +2 -1
  282. package/src/Questions/Step/StepForm.tsx +2 -2
  283. package/src/Questions/Step/StepQuote.tsx +2 -1
  284. package/src/Questions/Step/StepTitle.tsx +2 -1
  285. package/src/Questions/Step/getAddMoreFields.tsx +2 -2
  286. package/src/Questions/Step/types.tsx +1 -1
  287. package/src/Questions/getNextStep.tsx +1 -1
  288. package/src/Questions/types.tsx +1 -1
  289. package/src/hooks/__tests__/useFieldFocusManager.spec.tsx +1079 -0
  290. package/src/hooks/__tests__/utils.spec.ts +568 -0
  291. package/src/hooks/useFieldFocusManager.ts +162 -0
  292. package/src/hooks/utils.ts +122 -0
  293. package/src/inputs/AutoCompleteInput/index.tsx +4 -6
  294. package/src/inputs/Checkboxes/index.tsx +95 -87
  295. package/src/inputs/DateInput/index.tsx +19 -6
  296. package/src/inputs/DateTimeInput/index.tsx +19 -6
  297. package/src/inputs/FileInput/index.tsx +9 -7
  298. package/src/inputs/ImageInput/index.tsx +2 -2
  299. package/src/inputs/Input/index.tsx +72 -71
  300. package/src/inputs/Label/index.tsx +1 -1
  301. package/src/inputs/OtpInput/index.tsx +43 -34
  302. package/src/inputs/Radio/index.tsx +29 -21
  303. package/src/inputs/Select/index.tsx +2 -2
  304. package/src/{Field/utils/index.ts → inputs/registry.ts} +3 -1
  305. package/src/lazy.js +10 -9
  306. package/src/registry.js +23 -13
  307. package/src/types.tsx +12 -5
  308. package/src/utils.ts +3 -2
  309. package/src/validators/index.ts +10 -9
  310. package/src/validators/types.ts +1 -1
  311. package/src/validators/utils/date.ts +8 -3
  312. package/src/validators/utils/datetime.ts +8 -3
  313. package/src/validators/utils/file.ts +2 -2
  314. package/src/validators/utils/iban.ts +2 -2
  315. package/src/validators/utils/image.ts +2 -2
  316. package/src/validators/utils/index.ts +2 -2
  317. package/src/validators/utils/int.ts +1 -1
  318. package/src/validators/utils/number.ts +1 -1
  319. package/src/validators/utils/otp.ts +2 -2
  320. package/src/validators/utils/phone.ts +2 -2
  321. package/src/validators/utils/postal_code.ts +2 -2
  322. package/src/validators/utils/text_limit.ts +2 -2
  323. package/types.d.ts +8 -4
  324. package/types.js.map +1 -1
  325. package/utils.d.ts +1 -1
  326. package/utils.js.map +2 -2
  327. package/validators/index.d.ts +5 -5
  328. package/validators/index.js.map +2 -2
  329. package/validators/types.d.ts +1 -1
  330. package/validators/utils/date/index.js +6 -1
  331. package/validators/utils/date.d.ts +2 -2
  332. package/validators/utils/date.js.map +2 -2
  333. package/validators/utils/datetime/index.js +6 -1
  334. package/validators/utils/datetime.d.ts +2 -2
  335. package/validators/utils/datetime.js.map +2 -2
  336. package/validators/utils/file.d.ts +2 -2
  337. package/validators/utils/file.js.map +1 -1
  338. package/validators/utils/iban.d.ts +2 -2
  339. package/validators/utils/iban.js.map +1 -1
  340. package/validators/utils/image.d.ts +2 -2
  341. package/validators/utils/image.js.map +1 -1
  342. package/validators/utils/index.d.ts +2 -2
  343. package/validators/utils/index.js.map +1 -1
  344. package/validators/utils/int.d.ts +1 -1
  345. package/validators/utils/int.js.map +1 -1
  346. package/validators/utils/number.d.ts +1 -1
  347. package/validators/utils/number.js.map +1 -1
  348. package/validators/utils/otp.d.ts +2 -2
  349. package/validators/utils/otp.js.map +1 -1
  350. package/validators/utils/phone.d.ts +2 -2
  351. package/validators/utils/phone.js.map +1 -1
  352. package/validators/utils/postal_code.d.ts +2 -2
  353. package/validators/utils/postal_code.js.map +1 -1
  354. package/validators/utils/text_limit.d.ts +2 -2
  355. package/validators/utils/text_limit.js.map +1 -1
  356. package/Field/utils/calculateField/index.js +0 -27
  357. package/Field/utils/calculateField.d.ts +0 -2
  358. package/Field/utils/calculateField.js.map +0 -7
  359. package/Field/utils/index.js.map +0 -7
  360. package/FieldArray/FormDialog.d.ts +0 -67
  361. package/FieldArray/FormDialog.js.map +0 -7
  362. package/FormBuilder/index.test.d.ts +0 -1
  363. package/FormBuilder/interaction.test.d.ts +0 -1
  364. package/FormBuilder/scenarios.test.d.ts +0 -88
  365. package/MultiplicityField/index.test.d.ts +0 -1
  366. package/Questions/index.spec.d.ts +0 -1
  367. package/Questions/index.test.d.ts +0 -1
  368. package/cjs/Field/utils/calculateField/index.js +0 -50
  369. package/cjs/Field/utils/calculateField.js.map +0 -7
  370. package/cjs/Field/utils/index.js.map +0 -7
  371. package/cjs/FieldArray/FormDialog.js.map +0 -7
  372. package/cjs/inputs/inputsScenarios/index.js +0 -533
  373. package/cjs/inputs/inputsScenarios.js.map +0 -7
  374. package/cjs/locales/el.js.map +0 -7
  375. package/inputs/AutoCompleteInput/index.test.d.ts +0 -1
  376. package/inputs/Checkboxes/index.test.d.ts +0 -1
  377. package/inputs/DateInput/index.test.d.ts +0 -1
  378. package/inputs/DateTimeInput/index.test.d.ts +0 -1
  379. package/inputs/FileInput/index.test.d.ts +0 -1
  380. package/inputs/ImageInput/index.test.d.ts +0 -1
  381. package/inputs/Input/index.test.d.ts +0 -1
  382. package/inputs/Label/index.test.d.ts +0 -1
  383. package/inputs/OtpInput/index.test.d.ts +0 -1
  384. package/inputs/Radio/index.test.d.ts +0 -1
  385. package/inputs/Select/index.test.d.ts +0 -1
  386. package/inputs/inputsScenarios/index.js +0 -499
  387. package/inputs/inputsScenarios.d.ts +0 -296
  388. package/inputs/inputsScenarios.js.map +0 -7
  389. package/locales/el/index.js +0 -6
  390. package/locales/el.d.ts +0 -2
  391. package/locales/el.js.map +0 -7
  392. package/src/Field/utils/calculateField.ts +0 -49
  393. package/src/FieldArray/FormDialog.tsx +0 -568
  394. package/src/inputs/inputsScenarios.ts +0 -496
  395. package/src/locales/el.ts +0 -3
  396. /package/{FieldArray/index.test.d.ts → hooks/__tests__/utils.spec.d.ts} +0 -0
@@ -0,0 +1,222 @@
1
+ import React from 'react';
2
+ import { fireEvent, render, screen, waitFor } from '@testing-library/react';
3
+ import type { FieldSpec } from '@digigov/form';
4
+ import FormBuilder, { Field } from '@digigov/form';
5
+ import Radio from '@digigov/form/inputs/Radio';
6
+ import { getYUPTypeMap } from '@digigov/form/internal';
7
+ import { Button } from '@digigov/ui/form/Button';
8
+
9
+ beforeAll(() => {
10
+ global.ResizeObserver = class ResizeObserver {
11
+ observe() {
12
+ // do nothing
13
+ }
14
+ unobserve() {
15
+ // do nothing
16
+ }
17
+ disconnect() {
18
+ // do nothing
19
+ }
20
+ };
21
+ });
22
+
23
+ const customComponentRegistry = {
24
+ 'preference-multiple-choice': {
25
+ component: (props: any) => {
26
+ return (
27
+ <Radio
28
+ {...props}
29
+ extra={{
30
+ ...props.extra,
31
+ options: props.extra.options,
32
+ }}
33
+ />
34
+ );
35
+ },
36
+ },
37
+ };
38
+
39
+ const customValidatorRegistry = {
40
+ 'preference-multiple-choice': getYUPTypeMap().string,
41
+ };
42
+
43
+ const options = [
44
+ {
45
+ disabled: false,
46
+ label: {
47
+ primary: 'Δελτίο Ταυτότητας Έλληνα Πολίτη',
48
+ },
49
+ value: 'hellenic_police',
50
+ },
51
+ {
52
+ disabled: false,
53
+ label: {
54
+ primary: 'Διαβατήριο',
55
+ },
56
+ value: 'passport',
57
+ },
58
+ {
59
+ disabled: false,
60
+ label: {
61
+ primary: 'Άδεια Διαμονής',
62
+ },
63
+ value: 'residence_permit',
64
+ },
65
+ ];
66
+
67
+ const fieldSpec: FieldSpec = {
68
+ key: 'preference_multiple_choice',
69
+ type: 'array',
70
+ editable: true,
71
+ label: {
72
+ primary: 'Component preference-multiple-choice',
73
+ },
74
+ extra: {
75
+ variant: 'dialog', // Unnecessary for base variant, but included for consistency
76
+ border: false,
77
+ label: {
78
+ object: {
79
+ title: 'Προσθήκη επιλογών',
80
+ titleNumbering: false,
81
+ add: 'Προσθήκη επιλογής',
82
+ addButtonVariant: 'link',
83
+ delete: 'Αφαίρεση',
84
+ deleteButtonVariant: 'link',
85
+ append: {
86
+ label: 'Προσθήκη',
87
+ },
88
+ edit: {
89
+ label: 'Προσθήκη',
90
+ },
91
+ cancel: {
92
+ label: 'Ακύρωση',
93
+ },
94
+ nothing_added: 'Δεν έχουν προστεθεί επιλογές',
95
+ nothing_added_props: {
96
+ margin: 0,
97
+ paddingLeft: 2,
98
+ style: {
99
+ color: 'var(--color-gray-600)',
100
+ },
101
+ },
102
+ },
103
+ },
104
+ max: 2,
105
+ min: 1,
106
+ noHeader: true,
107
+ noIndex: true,
108
+ sortable: true,
109
+ stackProps: {
110
+ spacing: 2,
111
+ justifyContent: 'flex-end',
112
+ direction: 'row',
113
+ },
114
+ tableContainer: {
115
+ mb: 0,
116
+ pl: 2,
117
+ },
118
+ verticalAlign: 'top',
119
+ wordBreak: 'normal',
120
+ valueDisplay: (value: any) => {
121
+ // @ts-ignore
122
+ return options.find((option) => option.value === value).label.primary;
123
+ },
124
+ of: {
125
+ editable: true,
126
+ key: 'preference_multiple_choice',
127
+ name: 'preference_multiple_choice',
128
+ required: true,
129
+ type: 'preference-multiple-choice',
130
+ label: {
131
+ primary: 'Component preference-multiple-choice',
132
+ },
133
+ extra: {
134
+ options,
135
+ },
136
+ },
137
+ },
138
+ };
139
+
140
+ describe('preference-multiple-choice case from dilosi', () => {
141
+ const submitHandler = vi.fn();
142
+
143
+ const TestForm = () => (
144
+ <FormBuilder
145
+ onSubmit={submitHandler}
146
+ componentRegistry={customComponentRegistry}
147
+ validatorRegistry={customValidatorRegistry}
148
+ >
149
+ <Field name="preference_multiple_choice" {...fieldSpec} />
150
+ <Button type="submit">Συνέχεια</Button>
151
+ </FormBuilder>
152
+ );
153
+
154
+ beforeEach(() => {
155
+ submitHandler.mockClear();
156
+ });
157
+
158
+ it('should render', async () => {
159
+ render(<TestForm />);
160
+ expect(
161
+ screen.getByText('Component preference-multiple-choice')
162
+ ).toBeInTheDocument();
163
+ const addButton = screen.getByRole('button', { name: 'Προσθήκη επιλογής' });
164
+ expect(addButton).toBeInTheDocument();
165
+ });
166
+
167
+ it('should open dialog on add button click', async () => {
168
+ render(<TestForm />);
169
+ const addButton = screen.getByRole('button', { name: 'Προσθήκη επιλογής' });
170
+ fireEvent.click(addButton);
171
+ expect(screen.getByText('Προσθήκη επιλογών')).toBeInTheDocument();
172
+ expect(screen.getByRole('dialog')).toBeInTheDocument();
173
+ });
174
+ it('should add a new item on dialog form submission', async () => {
175
+ render(<TestForm />);
176
+ const addButton = screen.getByRole('button', { name: 'Προσθήκη επιλογής' });
177
+ fireEvent.click(addButton);
178
+
179
+ const dialogTitle = screen.getByText('Προσθήκη επιλογών');
180
+ const radioInput = screen.getByLabelText('Δελτίο Ταυτότητας Έλληνα Πολίτη');
181
+ fireEvent.click(radioInput);
182
+ expect(radioInput).toBeChecked();
183
+ const submitButton = screen.getByRole('button', { name: 'Προσθήκη' });
184
+ fireEvent.click(submitButton);
185
+ expect(await screen.findByRole('dialog')).not.toBeVisible();
186
+ expect(dialogTitle).not.toBeInTheDocument();
187
+
188
+ expect(screen.getByText('Επιλογή #1')).toBeInTheDocument();
189
+ expect(
190
+ screen.getByText('Δελτίο Ταυτότητας Έλληνα Πολίτη')
191
+ ).toBeInTheDocument();
192
+ expect(submitHandler).not.toHaveBeenCalled();
193
+ });
194
+ it('should submit added item on main form', async () => {
195
+ render(<TestForm />);
196
+ const addButton = screen.getByRole('button', { name: 'Προσθήκη επιλογής' });
197
+ fireEvent.click(addButton);
198
+
199
+ const dialogTitle = screen.getByText('Προσθήκη επιλογών');
200
+ const radioInput = screen.getByLabelText('Δελτίο Ταυτότητας Έλληνα Πολίτη');
201
+ fireEvent.click(radioInput);
202
+ expect(radioInput).toBeChecked();
203
+ const submitButton = screen.getByRole('button', { name: 'Προσθήκη' });
204
+ fireEvent.click(submitButton);
205
+ expect(await screen.findByRole('dialog')).not.toBeVisible();
206
+ expect(dialogTitle).not.toBeInTheDocument();
207
+
208
+ expect(screen.getByText('Επιλογή #1')).toBeInTheDocument();
209
+ expect(
210
+ screen.getByText('Δελτίο Ταυτότητας Έλληνα Πολίτη')
211
+ ).toBeInTheDocument();
212
+ const continueButton = screen.getByRole('button', { name: 'Συνέχεια' });
213
+ fireEvent.click(continueButton);
214
+
215
+ await waitFor(() => {
216
+ expect(submitHandler).toHaveBeenCalledTimes(1);
217
+ });
218
+ expect(submitHandler).toHaveBeenCalledWith({
219
+ preference_multiple_choice: ['hellenic_police'],
220
+ });
221
+ });
222
+ });
@@ -0,0 +1,355 @@
1
+ import React from 'react';
2
+ import {
3
+ fireEvent,
4
+ getByLabelText,
5
+ render,
6
+ screen,
7
+ waitFor,
8
+ } from '@testing-library/react';
9
+ import type { FieldSpec } from '@digigov/form';
10
+ import FormBuilder, { Field } from '@digigov/form';
11
+ import { Button } from '@digigov/ui/form/Button';
12
+
13
+ beforeAll(() => {
14
+ global.ResizeObserver = class ResizeObserver {
15
+ observe() {
16
+ // do nothing
17
+ }
18
+ unobserve() {
19
+ // do nothing
20
+ }
21
+ disconnect() {
22
+ // do nothing
23
+ }
24
+ };
25
+ });
26
+
27
+ describe('FieldArray', () => {
28
+ const submitHandler = vi.fn();
29
+
30
+ const TestForm = ({ fieldObject }: { fieldObject: FieldSpec }) => (
31
+ <FormBuilder onSubmit={submitHandler}>
32
+ <Field name="fieldArray" {...fieldObject} />
33
+ <Button type="submit">Συνέχεια</Button>
34
+ </FormBuilder>
35
+ );
36
+
37
+ beforeEach(() => {
38
+ vi.clearAllMocks();
39
+ });
40
+
41
+ describe('with items of type=object', () => {
42
+ const baseFieldSpec = {
43
+ key: 'fieldArray',
44
+ type: 'array',
45
+ editable: true,
46
+ label: {
47
+ primary: 'Συνυπογράφοντες',
48
+ },
49
+ extra: {
50
+ variant: 'base', // Unnecessary for base variant, but included for consistency
51
+ label: {
52
+ object: {
53
+ title: 'Συνυπογράφοντας',
54
+ add: 'Προσθήκη συνυπογράφοντα',
55
+ delete: 'Αφαίρεση συνυπογράφοντος',
56
+ append: {
57
+ label: 'Αποθήκευση',
58
+ },
59
+ edit: {
60
+ label: 'Αποθήκευση',
61
+ },
62
+ cancel: {
63
+ label: 'Ακύρωση',
64
+ },
65
+ },
66
+ },
67
+ of: {
68
+ type: 'object',
69
+ extra: {
70
+ fields: [
71
+ {
72
+ key: 'firstName',
73
+ required: true,
74
+ type: 'text',
75
+ label: {
76
+ primary: 'Όνομα',
77
+ },
78
+ },
79
+ {
80
+ key: 'lastName',
81
+ required: true,
82
+ type: 'text',
83
+ label: {
84
+ primary: 'Επώνυμο',
85
+ },
86
+ },
87
+ ],
88
+ },
89
+ },
90
+ },
91
+ } satisfies FieldSpec;
92
+
93
+ const dialogFieldSpec: FieldSpec = {
94
+ ...baseFieldSpec,
95
+ extra: {
96
+ ...baseFieldSpec.extra,
97
+ variant: 'dialog',
98
+ },
99
+ };
100
+
101
+ const testVariants = [
102
+ {
103
+ description: 'base variant',
104
+ fieldSpec: baseFieldSpec,
105
+ },
106
+ {
107
+ description: 'dialog variant',
108
+ fieldSpec: dialogFieldSpec,
109
+ },
110
+ ];
111
+
112
+ const testCases = [
113
+ {
114
+ description: 'empty array',
115
+ values: [],
116
+ },
117
+ {
118
+ description: 'one value',
119
+ values: [{ firstName: 'John', lastName: 'Doe' }],
120
+ },
121
+ {
122
+ description: 'multiple values',
123
+ values: [
124
+ { firstName: 'John', lastName: 'Doe' },
125
+ { firstName: 'Jane', lastName: 'Smith' },
126
+ ],
127
+ },
128
+ ];
129
+
130
+ for (const { description, fieldSpec } of testVariants) {
131
+ const isDialogVariant = fieldSpec.extra?.variant === 'dialog';
132
+
133
+ describe(`${description}`, () => {
134
+ for (const testCase of testCases) {
135
+ it(`should submit ${testCase.description}`, async () => {
136
+ render(<TestForm fieldObject={fieldSpec} />);
137
+
138
+ const addButton = screen.getByText('Προσθήκη συνυπογράφοντα');
139
+ let firstNameInput: HTMLInputElement;
140
+ let lastNameInput: HTMLInputElement;
141
+
142
+ testCase.values.forEach((value, index) => {
143
+ fireEvent.click(addButton);
144
+ if (isDialogVariant) {
145
+ firstNameInput = screen.getByLabelText('Όνομα');
146
+ lastNameInput = screen.getByLabelText('Επώνυμο');
147
+ } else {
148
+ const fieldArray = screen.getByText(
149
+ `Συνυπογράφοντας ${index + 1}`
150
+ ).parentElement;
151
+ firstNameInput = getByLabelText(fieldArray!, 'Όνομα');
152
+ lastNameInput = getByLabelText(fieldArray!, 'Επώνυμο');
153
+ }
154
+ fireEvent.change(firstNameInput, {
155
+ target: { value: value.firstName },
156
+ });
157
+ fireEvent.change(lastNameInput, {
158
+ target: { value: value.lastName },
159
+ });
160
+
161
+ if (isDialogVariant) {
162
+ fireEvent.click(screen.getByText('Αποθήκευση'));
163
+ }
164
+ });
165
+ if (isDialogVariant) {
166
+ for (const value of testCase.values) {
167
+ await waitFor(() => {
168
+ expect(screen.getByText(value.firstName)).toBeInTheDocument();
169
+ expect(screen.getByText(value.lastName)).toBeInTheDocument();
170
+ });
171
+ }
172
+ }
173
+
174
+ fireEvent.click(screen.getByText('Συνέχεια'));
175
+
176
+ await waitFor(() => {
177
+ expect(submitHandler).toHaveBeenCalledWith(
178
+ expect.objectContaining({
179
+ fieldArray: testCase.values,
180
+ })
181
+ );
182
+ });
183
+ });
184
+ }
185
+
186
+ it('should focus on "add item" button if there are top-level errors', async () => {
187
+ const fieldSpecWithError = {
188
+ ...fieldSpec,
189
+ extra: {
190
+ ...fieldSpec.extra,
191
+ min: 1,
192
+ },
193
+ };
194
+
195
+ render(<TestForm fieldObject={fieldSpecWithError} />);
196
+ // Trigger validation error by submitting empty form
197
+ fireEvent.click(screen.getByText('Συνέχεια'));
198
+ await waitFor(() => {
199
+ expect(submitHandler).toHaveBeenCalledTimes(0);
200
+ expect(
201
+ screen.getByText(/Το πεδίο πρέπει να έχει τουλάχιστον 1 εγγραφές/)
202
+ ).toBeInTheDocument();
203
+ });
204
+
205
+ expect(screen.getByText('Προσθήκη συνυπογράφοντα')).toHaveFocus();
206
+ });
207
+
208
+ it(`should focus on ${isDialogVariant ? '"add-item" button' : 'item input'} if there are item errors`, async () => {
209
+ render(<TestForm fieldObject={fieldSpec} />);
210
+
211
+ const addButton = screen.getByText('Προσθήκη συνυπογράφοντα');
212
+ fireEvent.click(addButton);
213
+
214
+ const firstNameInput = screen.getByLabelText('Όνομα');
215
+ const lastNameInput = screen.getByLabelText('Επώνυμο');
216
+
217
+ fireEvent.change(firstNameInput, {
218
+ target: { value: '' }, // Leave first name empty
219
+ });
220
+ fireEvent.change(lastNameInput, {
221
+ target: { value: 'Doe' },
222
+ });
223
+
224
+ if (isDialogVariant) {
225
+ fireEvent.click(screen.getByText('Αποθήκευση'));
226
+ } else {
227
+ fireEvent.click(screen.getByText('Συνέχεια'));
228
+ }
229
+ await waitFor(() => expect(firstNameInput).toHaveFocus());
230
+
231
+ expect(submitHandler).toHaveBeenCalledTimes(0);
232
+ await waitFor(() =>
233
+ expect(
234
+ screen.getByText(/Το πεδίο είναι υποχρεωτικό/)
235
+ ).toBeInTheDocument()
236
+ );
237
+ });
238
+ });
239
+ }
240
+ });
241
+
242
+ describe('with items of type=string', () => {
243
+ const fieldSpec = {
244
+ key: 'fieldArray',
245
+ type: 'array',
246
+ editable: true,
247
+ label: {
248
+ primary: 'Συνυπογράφοντες',
249
+ },
250
+ extra: {
251
+ variant: 'dialog',
252
+ label: {
253
+ object: {
254
+ title: 'Συνυπογράφοντας',
255
+ add: 'Προσθήκη συνυπογράφοντα',
256
+ delete: 'Αφαίρεση συνυπογράφοντος',
257
+ append: {
258
+ label: 'Αποθήκευση',
259
+ },
260
+ edit: {
261
+ label: 'Αποθήκευση',
262
+ },
263
+ cancel: {
264
+ label: 'Ακύρωση',
265
+ },
266
+ },
267
+ },
268
+ of: {
269
+ key: 'fieldArray',
270
+ type: 'string',
271
+ required: true,
272
+ label: {
273
+ primary: 'Όνομα',
274
+ },
275
+ },
276
+ },
277
+ } satisfies FieldSpec;
278
+
279
+ const testCases = [
280
+ {
281
+ description: 'empty array',
282
+ values: [],
283
+ },
284
+ {
285
+ description: 'one value',
286
+ values: ['John'],
287
+ },
288
+ {
289
+ description: 'multiple values',
290
+ values: ['John', 'Jane', 'Menexes'],
291
+ },
292
+ ];
293
+
294
+ for (const testCase of testCases) {
295
+ it(`should submit ${testCase.description}`, async () => {
296
+ render(<TestForm fieldObject={fieldSpec} />);
297
+
298
+ for (const value of testCase.values) {
299
+ const addButton = await screen.findByText('Προσθήκη συνυπογράφοντα');
300
+ expect(addButton).toBeInTheDocument();
301
+ fireEvent.click(addButton);
302
+
303
+ const nameInput = screen.getByLabelText('Όνομα');
304
+ fireEvent.change(nameInput, {
305
+ target: { value: value },
306
+ });
307
+
308
+ fireEvent.click(screen.getByText('Αποθήκευση'));
309
+
310
+ await waitFor(() =>
311
+ expect(screen.getByText(value)).toBeInTheDocument()
312
+ );
313
+ }
314
+
315
+ await waitFor(() =>
316
+ expect(screen.queryByRole('dialog')).not.toBeInTheDocument()
317
+ );
318
+
319
+ fireEvent.click(screen.getByText('Συνέχεια'));
320
+
321
+ await waitFor(() => {
322
+ expect(submitHandler).toHaveBeenCalledWith(
323
+ expect.objectContaining({
324
+ fieldArray: testCase.values,
325
+ })
326
+ );
327
+ });
328
+ });
329
+ }
330
+
331
+ it('should focus on "add item" button if there are top-level errors', async () => {
332
+ const fieldSpecWithError = {
333
+ ...fieldSpec,
334
+ extra: {
335
+ ...fieldSpec.extra,
336
+ min: 1,
337
+ },
338
+ };
339
+
340
+ render(<TestForm fieldObject={fieldSpecWithError} />);
341
+ // Trigger validation error by submitting empty form
342
+ fireEvent.click(screen.getByText('Συνέχεια'));
343
+ await waitFor(() => {
344
+ expect(submitHandler).toHaveBeenCalledTimes(0);
345
+ expect(
346
+ screen.getByText(/Το πεδίο πρέπει να έχει τουλάχιστον 1 εγγραφές/, {
347
+ selector: 'p.ds-error-message',
348
+ })
349
+ ).toBeInTheDocument();
350
+ });
351
+
352
+ expect(screen.getByText('Προσθήκη συνυπογράφοντα')).toHaveFocus();
353
+ });
354
+ });
355
+ });
@@ -1,12 +1,10 @@
1
- import React from 'react';
2
- import { ErrorOption, useFieldArray, UseFormReturn } from 'react-hook-form';
1
+ import React, { useEffect, useRef } from 'react';
2
+ import type { ErrorOption, UseFormReturn } from 'react-hook-form';
3
3
  import { FieldBaseContainer } from '@digigov/form/Field/FieldBaseContainer';
4
- import { FieldProps } from '@digigov/form/Field/types';
4
+ import type { FieldProps } from '@digigov/form/Field/types';
5
+ import BaseFieldArray from '@digigov/form/FieldArray/BaseFieldArray';
5
6
  import { FormDialog } from '@digigov/form/FieldArray/FormDialog';
6
- import { FieldObject } from '@digigov/form/FieldObject';
7
- import { FieldsetLabel, Fieldset } from '@digigov/form/Fieldset';
8
- import { Card } from '@digigov/ui/content/Card';
9
- import { Button } from '@digigov/ui/form/Button';
7
+ import type { registerFieldFocus } from '@digigov/form/types';
10
8
 
11
9
  export interface FieldArrayProps extends FieldProps {
12
10
  control: UseFormReturn['control'];
@@ -20,6 +18,7 @@ export interface FieldArrayProps extends FieldProps {
20
18
  reset: UseFormReturn['reset'];
21
19
  resetField?: UseFormReturn['resetField'];
22
20
  Field: React.FC<FieldProps>;
21
+ registerFieldFocus: registerFieldFocus;
23
22
  }
24
23
  export const FieldArray: React.FC<FieldArrayProps> = ({
25
24
  name,
@@ -36,13 +35,24 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
36
35
  resetField,
37
36
  label,
38
37
  Field,
38
+ registerFieldFocus,
39
39
  ...customField
40
40
  }) => {
41
- const { append, remove } = useFieldArray({
42
- control,
43
- name,
44
- });
45
- const fields = getValues(name) || [];
41
+ /** The ref of the add-button */
42
+ const buttonRef = useRef<HTMLButtonElement | null>(null);
43
+
44
+ // Register the button to be focusable
45
+ useEffect(() => {
46
+ let unregister: (name: string) => void = () => {};
47
+ if (buttonRef.current) {
48
+ unregister = registerFieldFocus(name, buttonRef.current);
49
+ }
50
+
51
+ return () => {
52
+ unregister(name);
53
+ };
54
+ }, [name, registerFieldFocus]);
55
+
46
56
  return (
47
57
  <FieldBaseContainer
48
58
  label={label}
@@ -57,6 +67,7 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
57
67
  >
58
68
  {customField.extra?.variant === 'dialog' ? (
59
69
  <FormDialog
70
+ ref={buttonRef}
60
71
  name={name}
61
72
  trigger={trigger}
62
73
  register={register}
@@ -75,55 +86,17 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
75
86
  {...customField}
76
87
  />
77
88
  ) : (
78
- <>
79
- {fields.map((field, index) => (
80
- <Card
81
- variant={customField.extra?.border ? 'border' : 'divider'}
82
- key={field.id || index}
83
- >
84
- <Fieldset>
85
- <FieldsetLabel>
86
- {customField.extra?.label.object.title}{' '}
87
- {!customField.extra?.noIndex && index + 1}
88
- </FieldsetLabel>
89
- <FieldObject
90
- name={`${name}.${index}`}
91
- error={Array.isArray(error) && error[index]}
92
- formState={formState}
93
- register={register}
94
- control={control}
95
- {...customField.extra?.of}
96
- Field={Field}
97
- />
98
- <Button
99
- name={`${name}-object-remove`}
100
- variant={customField.extra?.label.object?.deleteButtonVariant}
101
- type="button"
102
- color="warning"
103
- onClick={() => remove(index)}
104
- disabled={!customField?.editable}
105
- >
106
- {customField.extra?.label.object?.delete}
107
- </Button>
108
- </Fieldset>
109
- </Card>
110
- ))}
111
- {customField.editable && (
112
- <Button
113
- type="button"
114
- name={`${name}-add-object`}
115
- color="secondary"
116
- variant={customField.extra?.label.object?.addButtonVariant}
117
- onClick={(ev) => {
118
- ev.preventDefault();
119
- append({});
120
- }}
121
- disabled={!customField?.editable}
122
- >
123
- {customField.extra?.label.object?.add}
124
- </Button>
125
- )}
126
- </>
89
+ <BaseFieldArray
90
+ ref={buttonRef}
91
+ name={name}
92
+ register={register}
93
+ control={control}
94
+ formState={formState}
95
+ error={error}
96
+ getValues={getValues}
97
+ Field={Field}
98
+ {...customField}
99
+ />
127
100
  )}
128
101
  </FieldBaseContainer>
129
102
  );