@payloadcms/ui 4.0.0-internal.fa183d3 → 4.0.0-internal.fec2230

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 (620) hide show
  1. package/dist/css/app.css +121 -0
  2. package/dist/css/forms.css +0 -6
  3. package/dist/css/spacing.css +11 -3
  4. package/dist/css/z-index.css +1 -0
  5. package/dist/elements/AddNewRelation/index.css +0 -1
  6. package/dist/elements/AppHeader/index.css +1 -3
  7. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  8. package/dist/elements/AppHeader/index.js +6 -2
  9. package/dist/elements/AppHeader/index.js.map +1 -1
  10. package/dist/elements/ArrayAction/index.d.ts +3 -0
  11. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  12. package/dist/elements/ArrayAction/index.js +83 -29
  13. package/dist/elements/ArrayAction/index.js.map +1 -1
  14. package/dist/elements/Autosave/index.d.ts.map +1 -1
  15. package/dist/elements/Autosave/index.js +2 -3
  16. package/dist/elements/Autosave/index.js.map +1 -1
  17. package/dist/elements/BulkUpload/AddFilesView/index.css +10 -4
  18. package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -1
  19. package/dist/elements/BulkUpload/AddFilesView/index.js +71 -51
  20. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  21. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +2 -2
  22. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  23. package/dist/elements/BulkUpload/FileSidebar/index.css +4 -0
  24. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts +2 -2
  25. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -1
  26. package/dist/elements/BulkUpload/FormsManager/createFormData.js +4 -15
  27. package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -1
  28. package/dist/elements/BulkUpload/FormsManager/index.js +3 -4
  29. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  30. package/dist/elements/Button/index.css +2 -2
  31. package/dist/elements/Button/index.d.ts.map +1 -1
  32. package/dist/elements/Button/index.js +2 -0
  33. package/dist/elements/Button/index.js.map +1 -1
  34. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts +8 -1
  35. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts.map +1 -1
  36. package/dist/elements/ClipboardAction/clipboardUtilities.js +40 -8
  37. package/dist/elements/ClipboardAction/clipboardUtilities.js.map +1 -1
  38. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +120 -0
  39. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +1 -0
  40. package/dist/elements/ClipboardAction/index.d.ts.map +1 -1
  41. package/dist/elements/ClipboardAction/index.js +17 -1
  42. package/dist/elements/ClipboardAction/index.js.map +1 -1
  43. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +144 -0
  44. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +1 -0
  45. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts +10 -0
  46. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  47. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +65 -3
  48. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  49. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +345 -1
  50. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -1
  51. package/dist/elements/ClipboardAction/types.d.ts +3 -0
  52. package/dist/elements/ClipboardAction/types.d.ts.map +1 -1
  53. package/dist/elements/ClipboardAction/types.js.map +1 -1
  54. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts +10 -0
  55. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts.map +1 -0
  56. package/dist/elements/ClipboardAction/useCanPasteClipboard.js +21 -0
  57. package/dist/elements/ClipboardAction/useCanPasteClipboard.js.map +1 -0
  58. package/dist/elements/CodeEditor/index.css +0 -5
  59. package/dist/elements/CommandPalette/index.css +0 -7
  60. package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
  61. package/dist/elements/CopyLocaleData/index.js +8 -9
  62. package/dist/elements/CopyLocaleData/index.js.map +1 -1
  63. package/dist/elements/CopyToClipboard/index.d.ts +1 -0
  64. package/dist/elements/CopyToClipboard/index.d.ts.map +1 -1
  65. package/dist/elements/CopyToClipboard/index.js +10 -8
  66. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  67. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
  68. package/dist/elements/CreateDocumentButton/index.js +4 -1
  69. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  70. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  71. package/dist/elements/DatePicker/DatePicker.js +1 -0
  72. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  73. package/dist/elements/DatePicker/index.css +1 -1
  74. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  75. package/dist/elements/DeleteDocument/index.js +16 -1
  76. package/dist/elements/DeleteDocument/index.js.map +1 -1
  77. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  78. package/dist/elements/DeleteMany/index.js +2 -3
  79. package/dist/elements/DeleteMany/index.js.map +1 -1
  80. package/dist/elements/Drawer/index.css +10 -4
  81. package/dist/elements/Dropzone/index.css +10 -4
  82. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +3 -2
  83. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -1
  84. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  85. package/dist/elements/DuplicateDocument/index.js +2 -3
  86. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  87. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  88. package/dist/elements/EditMany/DrawerContent.js +4 -5
  89. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  90. package/dist/elements/FieldSelect/reduceFieldOptions.d.ts.map +1 -1
  91. package/dist/elements/FieldSelect/reduceFieldOptions.js +3 -1
  92. package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
  93. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +143 -0
  94. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +1 -0
  95. package/dist/elements/FileDetails/StaticFileDetails/index.css +8 -9
  96. package/dist/elements/FileManager/FilePreview/index.css +3 -3
  97. package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -1
  98. package/dist/elements/FileManager/FileToolbar/index.js +3 -0
  99. package/dist/elements/FileManager/FileToolbar/index.js.map +1 -1
  100. package/dist/elements/FileManager/index.css +35 -52
  101. package/dist/elements/FileManager/index.d.ts +1 -1
  102. package/dist/elements/FileManager/index.d.ts.map +1 -1
  103. package/dist/elements/FileManager/index.js +385 -282
  104. package/dist/elements/FileManager/index.js.map +1 -1
  105. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.css +0 -1
  106. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  107. package/dist/elements/Hierarchy/MoveMany/index.js +2 -3
  108. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  109. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -1
  110. package/dist/elements/Hierarchy/Search/useHierarchySearch.js +2 -3
  111. package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -1
  112. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
  113. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +109 -89
  114. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  115. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -1
  116. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +2 -0
  117. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -1
  118. package/dist/elements/Hierarchy/Tree/TreeNode/index.css +0 -1
  119. package/dist/elements/IDLabel/index.css +6 -0
  120. package/dist/elements/IDLabel/index.d.ts +1 -1
  121. package/dist/elements/IDLabel/index.d.ts.map +1 -1
  122. package/dist/elements/IDLabel/index.js +16 -21
  123. package/dist/elements/IDLabel/index.js.map +1 -1
  124. package/dist/elements/InputStepper/index.css +0 -1
  125. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts +1 -7
  126. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts.map +1 -1
  127. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +26 -32
  128. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  129. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -1
  130. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +2 -3
  131. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  132. package/dist/elements/LivePreview/Window/index.js +1 -1
  133. package/dist/elements/LivePreview/Window/index.js.map +1 -1
  134. package/dist/elements/Localizer/index.js +1 -1
  135. package/dist/elements/Localizer/index.js.map +1 -1
  136. package/dist/elements/Locked/index.css +0 -8
  137. package/dist/elements/Locked/index.d.ts.map +1 -1
  138. package/dist/elements/Locked/index.js +70 -64
  139. package/dist/elements/Locked/index.js.map +1 -1
  140. package/dist/elements/MiniCarousel/index.css +39 -37
  141. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +1 -1
  142. package/dist/elements/Nav/SidebarTabs/index.client.js +12 -5
  143. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -1
  144. package/dist/elements/Nav/SidebarTabs/index.css +0 -5
  145. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts +1 -0
  146. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts.map +1 -1
  147. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +2 -1
  148. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
  149. package/dist/elements/NavGroup/index.css +0 -1
  150. package/dist/elements/Popup/PopupButtonList/index.css +1 -1
  151. package/dist/elements/Popup/index.js +1 -1
  152. package/dist/elements/Popup/index.js.map +1 -1
  153. package/dist/elements/PreviewButton/index.d.ts +1 -2
  154. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  155. package/dist/elements/PreviewButton/index.js +11 -5
  156. package/dist/elements/PreviewButton/index.js.map +1 -1
  157. package/dist/elements/PreviewSizes/index.css +8 -9
  158. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  159. package/dist/elements/PublishButton/ScheduleDrawer/index.js +9 -31
  160. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  161. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts +1 -1
  162. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts.map +1 -1
  163. package/dist/elements/PublishButton/ScheduleDrawer/types.js.map +1 -1
  164. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  165. package/dist/elements/PublishButton/index.js +5 -6
  166. package/dist/elements/PublishButton/index.js.map +1 -1
  167. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  168. package/dist/elements/PublishMany/DrawerContent.js +2 -3
  169. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  170. package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -3
  171. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  172. package/dist/elements/ReactSelect/ClearIndicator/index.css +0 -1
  173. package/dist/elements/ReactSelect/MultiValue/index.css +0 -1
  174. package/dist/elements/ReactSelect/MultiValueLabel/index.css +2 -2
  175. package/dist/elements/ReactSelect/index.css +0 -3
  176. package/dist/elements/RelationshipTable/Pagination.d.ts +0 -1
  177. package/dist/elements/RelationshipTable/Pagination.d.ts.map +1 -1
  178. package/dist/elements/RelationshipTable/Pagination.js +27 -77
  179. package/dist/elements/RelationshipTable/Pagination.js.map +1 -1
  180. package/dist/elements/RelationshipTable/index.css +0 -2
  181. package/dist/elements/RelationshipTable/index.d.ts +1 -0
  182. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  183. package/dist/elements/RelationshipTable/index.js +41 -5
  184. package/dist/elements/RelationshipTable/index.js.map +1 -1
  185. package/dist/elements/RenderTitle/index.css +4 -0
  186. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  187. package/dist/elements/RenderTitle/index.js +18 -13
  188. package/dist/elements/RenderTitle/index.js.map +1 -1
  189. package/dist/elements/RestoreMany/index.d.ts.map +1 -1
  190. package/dist/elements/RestoreMany/index.js +2 -3
  191. package/dist/elements/RestoreMany/index.js.map +1 -1
  192. package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
  193. package/dist/elements/SaveDraftButton/index.js +2 -3
  194. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  195. package/dist/elements/SelectRow/index.d.ts +4 -3
  196. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  197. package/dist/elements/SelectRow/index.js +10 -7
  198. package/dist/elements/SelectRow/index.js.map +1 -1
  199. package/dist/elements/SidebarToggle/index.css +0 -17
  200. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  201. package/dist/elements/SortColumn/index.js +42 -38
  202. package/dist/elements/SortColumn/index.js.map +1 -1
  203. package/dist/elements/SortHeader/index.d.ts.map +1 -1
  204. package/dist/elements/SortHeader/index.js +29 -26
  205. package/dist/elements/SortHeader/index.js.map +1 -1
  206. package/dist/elements/Status/index.d.ts.map +1 -1
  207. package/dist/elements/Status/index.js +2 -3
  208. package/dist/elements/Status/index.js.map +1 -1
  209. package/dist/elements/StepNav/index.css +64 -14
  210. package/dist/elements/StepNav/index.d.ts.map +1 -1
  211. package/dist/elements/StepNav/index.js +143 -69
  212. package/dist/elements/StepNav/index.js.map +1 -1
  213. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  214. package/dist/elements/Table/DefaultCell/index.js +3 -11
  215. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  216. package/dist/elements/Table/OrderableRow.d.ts +3 -1
  217. package/dist/elements/Table/OrderableRow.d.ts.map +1 -1
  218. package/dist/elements/Table/OrderableRow.js +17 -1
  219. package/dist/elements/Table/OrderableRow.js.map +1 -1
  220. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  221. package/dist/elements/Table/OrderableTable.js +20 -4
  222. package/dist/elements/Table/OrderableTable.js.map +1 -1
  223. package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
  224. package/dist/elements/Table/RelationshipProvider/index.js +2 -3
  225. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  226. package/dist/elements/Table/index.css +1 -0
  227. package/dist/elements/TableSection/index.css +0 -1
  228. package/dist/elements/Thumbnail/index.d.ts +1 -1
  229. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  230. package/dist/elements/Thumbnail/index.js.map +1 -1
  231. package/dist/elements/TimezonePicker/index.d.ts.map +1 -1
  232. package/dist/elements/TimezonePicker/index.js +5 -1
  233. package/dist/elements/TimezonePicker/index.js.map +1 -1
  234. package/dist/elements/Tooltip/index.css +15 -34
  235. package/dist/elements/Tooltip/index.d.ts +11 -3
  236. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  237. package/dist/elements/Tooltip/index.js +151 -85
  238. package/dist/elements/Tooltip/index.js.map +1 -1
  239. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  240. package/dist/elements/UnpublishButton/index.js +3 -4
  241. package/dist/elements/UnpublishButton/index.js.map +1 -1
  242. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  243. package/dist/elements/UnpublishMany/DrawerContent.js +2 -3
  244. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  245. package/dist/elements/Upload/UploadFromURLModal/index.d.ts +1 -1
  246. package/dist/elements/Upload/UploadFromURLModal/index.d.ts.map +1 -1
  247. package/dist/elements/Upload/UploadFromURLModal/index.js.map +1 -1
  248. package/dist/elements/Upload/index.css +39 -37
  249. package/dist/elements/Upload/index.d.ts.map +1 -1
  250. package/dist/elements/Upload/index.js +37 -99
  251. package/dist/elements/Upload/index.js.map +1 -1
  252. package/dist/elements/Upload/usePasteFromClipboard.d.ts +14 -0
  253. package/dist/elements/Upload/usePasteFromClipboard.d.ts.map +1 -0
  254. package/dist/elements/Upload/usePasteFromClipboard.js +93 -0
  255. package/dist/elements/Upload/usePasteFromClipboard.js.map +1 -0
  256. package/dist/elements/Upload/useUploadFromUrl.d.ts +20 -0
  257. package/dist/elements/Upload/useUploadFromUrl.d.ts.map +1 -0
  258. package/dist/elements/Upload/useUploadFromUrl.js +201 -0
  259. package/dist/elements/Upload/useUploadFromUrl.js.map +1 -0
  260. package/dist/elements/UploadDropzoneContent/index.css +31 -0
  261. package/dist/elements/UploadDropzoneContent/index.d.ts +17 -0
  262. package/dist/elements/UploadDropzoneContent/index.d.ts.map +1 -0
  263. package/dist/elements/UploadDropzoneContent/index.js +62 -0
  264. package/dist/elements/UploadDropzoneContent/index.js.map +1 -0
  265. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +1 -1
  266. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  267. package/dist/elements/WhereBuilder/conditionValue.d.ts +32 -0
  268. package/dist/elements/WhereBuilder/conditionValue.d.ts.map +1 -0
  269. package/dist/elements/WhereBuilder/conditionValue.js +32 -0
  270. package/dist/elements/WhereBuilder/conditionValue.js.map +1 -0
  271. package/dist/elements/WhereBuilder/conditionValue.spec.js +65 -0
  272. package/dist/elements/WhereBuilder/conditionValue.spec.js.map +1 -0
  273. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  274. package/dist/elements/WhereBuilder/index.js +15 -4
  275. package/dist/elements/WhereBuilder/index.js.map +1 -1
  276. package/dist/exports/client/index.d.ts +5 -1
  277. package/dist/exports/client/index.d.ts.map +1 -1
  278. package/dist/exports/client/index.js +1 -1
  279. package/dist/exports/client/index.js.map +3 -3
  280. package/dist/fields/Array/ArrayRow.d.ts +1 -0
  281. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  282. package/dist/fields/Array/ArrayRow.js +99 -160
  283. package/dist/fields/Array/ArrayRow.js.map +1 -1
  284. package/dist/fields/Array/index.d.ts.map +1 -1
  285. package/dist/fields/Array/index.js +40 -13
  286. package/dist/fields/Array/index.js.map +1 -1
  287. package/dist/fields/Blocks/BlockRow.d.ts +1 -0
  288. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  289. package/dist/fields/Blocks/BlockRow.js +136 -195
  290. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  291. package/dist/fields/Blocks/RowActions.d.ts +3 -0
  292. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  293. package/dist/fields/Blocks/RowActions.js +26 -20
  294. package/dist/fields/Blocks/RowActions.js.map +1 -1
  295. package/dist/fields/Blocks/index.d.ts.map +1 -1
  296. package/dist/fields/Blocks/index.js +40 -13
  297. package/dist/fields/Blocks/index.js.map +1 -1
  298. package/dist/fields/Checkbox/Input.d.ts +2 -0
  299. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  300. package/dist/fields/Checkbox/Input.js +32 -26
  301. package/dist/fields/Checkbox/Input.js.map +1 -1
  302. package/dist/fields/Checkbox/index.css +37 -73
  303. package/dist/fields/FieldError/index.css +0 -9
  304. package/dist/fields/FieldError/index.d.ts.map +1 -1
  305. package/dist/fields/FieldError/index.js +19 -9
  306. package/dist/fields/FieldError/index.js.map +1 -1
  307. package/dist/fields/FieldLabel/index.d.ts.map +1 -1
  308. package/dist/fields/FieldLabel/index.js +4 -5
  309. package/dist/fields/FieldLabel/index.js.map +1 -1
  310. package/dist/fields/Join/index.css +9 -0
  311. package/dist/fields/Join/index.d.ts.map +1 -1
  312. package/dist/fields/Join/index.js +13 -9
  313. package/dist/fields/Join/index.js.map +1 -1
  314. package/dist/fields/RadioGroup/index.css +0 -7
  315. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  316. package/dist/fields/Relationship/Input.js +34 -17
  317. package/dist/fields/Relationship/Input.js.map +1 -1
  318. package/dist/fields/Relationship/select-components/MultiValueLabel/index.css +1 -1
  319. package/dist/fields/Slug/index.css +0 -1
  320. package/dist/fields/Slug/index.d.ts.map +1 -1
  321. package/dist/fields/Slug/index.js +74 -111
  322. package/dist/fields/Slug/index.js.map +1 -1
  323. package/dist/fields/Upload/Input.d.ts.map +1 -1
  324. package/dist/fields/Upload/Input.js +46 -19
  325. package/dist/fields/Upload/Input.js.map +1 -1
  326. package/dist/fields/Upload/Input.spec.js +242 -0
  327. package/dist/fields/Upload/Input.spec.js.map +1 -0
  328. package/dist/fields/Upload/index.css +19 -4
  329. package/dist/fields/shared/index.d.ts +1 -1
  330. package/dist/fields/shared/index.d.ts.map +1 -1
  331. package/dist/fields/shared/index.js.map +1 -1
  332. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  333. package/dist/forms/Form/fieldReducer.js +3 -1
  334. package/dist/forms/Form/fieldReducer.js.map +1 -1
  335. package/dist/forms/Form/index.d.ts.map +1 -1
  336. package/dist/forms/Form/index.js +14 -18
  337. package/dist/forms/Form/index.js.map +1 -1
  338. package/dist/forms/Form/types.d.ts +1 -1
  339. package/dist/forms/Form/types.d.ts.map +1 -1
  340. package/dist/forms/Form/types.js.map +1 -1
  341. package/dist/forms/NullifyField/index.d.ts.map +1 -1
  342. package/dist/forms/NullifyField/index.js +2 -3
  343. package/dist/forms/NullifyField/index.js.map +1 -1
  344. package/dist/forms/RenderFields/index.css +16 -2
  345. package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
  346. package/dist/forms/WatchChildErrors/index.js +2 -2
  347. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  348. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  349. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +2 -1
  350. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  351. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  352. package/dist/forms/fieldSchemasToFormState/renderField.js +1 -3
  353. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  354. package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
  355. package/dist/hooks/usePayloadAPI.js +2 -3
  356. package/dist/hooks/usePayloadAPI.js.map +1 -1
  357. package/dist/icons/Edit/index.d.ts +0 -1
  358. package/dist/icons/Edit/index.d.ts.map +1 -1
  359. package/dist/icons/Edit/index.js +4 -4
  360. package/dist/icons/Edit/index.js.map +1 -1
  361. package/dist/layouts/Root/index.d.ts +1 -1
  362. package/dist/layouts/Root/index.d.ts.map +1 -1
  363. package/dist/layouts/Root/index.js +8 -2
  364. package/dist/layouts/Root/index.js.map +1 -1
  365. package/dist/providers/Actions/index.d.ts +1 -0
  366. package/dist/providers/Actions/index.d.ts.map +1 -1
  367. package/dist/providers/Actions/index.js +43 -11
  368. package/dist/providers/Actions/index.js.map +1 -1
  369. package/dist/providers/Auth/AuthSessionDebug/index.css +48 -0
  370. package/dist/providers/Auth/AuthSessionDebug/index.d.ts +13 -0
  371. package/dist/providers/Auth/AuthSessionDebug/index.d.ts.map +1 -0
  372. package/dist/providers/Auth/AuthSessionDebug/index.js +93 -0
  373. package/dist/providers/Auth/AuthSessionDebug/index.js.map +1 -0
  374. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts +21 -0
  375. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts.map +1 -0
  376. package/dist/providers/Auth/AuthSessionDebug/utilities.js +53 -0
  377. package/dist/providers/Auth/AuthSessionDebug/utilities.js.map +1 -0
  378. package/dist/providers/Auth/authSessionRequests.d.ts +27 -0
  379. package/dist/providers/Auth/authSessionRequests.d.ts.map +1 -0
  380. package/dist/providers/Auth/authSessionRequests.js +119 -0
  381. package/dist/providers/Auth/authSessionRequests.js.map +1 -0
  382. package/dist/providers/Auth/authSessionRequests.spec.js +121 -0
  383. package/dist/providers/Auth/authSessionRequests.spec.js.map +1 -0
  384. package/dist/providers/Auth/index.d.ts +2 -56
  385. package/dist/providers/Auth/index.d.ts.map +1 -1
  386. package/dist/providers/Auth/index.js +283 -135
  387. package/dist/providers/Auth/index.js.map +1 -1
  388. package/dist/providers/Auth/sessionActivity.d.ts +23 -0
  389. package/dist/providers/Auth/sessionActivity.d.ts.map +1 -0
  390. package/dist/providers/Auth/sessionActivity.js +49 -0
  391. package/dist/providers/Auth/sessionActivity.js.map +1 -0
  392. package/dist/providers/Auth/sessionActivity.spec.js +44 -0
  393. package/dist/providers/Auth/sessionActivity.spec.js.map +1 -0
  394. package/dist/providers/Auth/sessionTiming.d.ts +11 -0
  395. package/dist/providers/Auth/sessionTiming.d.ts.map +1 -0
  396. package/dist/providers/Auth/sessionTiming.js +18 -0
  397. package/dist/providers/Auth/sessionTiming.js.map +1 -0
  398. package/dist/providers/Auth/tabSessionSync/index.d.ts +17 -0
  399. package/dist/providers/Auth/tabSessionSync/index.d.ts.map +1 -0
  400. package/dist/providers/Auth/tabSessionSync/index.js +263 -0
  401. package/dist/providers/Auth/tabSessionSync/index.js.map +1 -0
  402. package/dist/providers/Auth/tabSessionSync/index.spec.js +463 -0
  403. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +1 -0
  404. package/dist/providers/Auth/tabSessionSync/types.d.ts +107 -0
  405. package/dist/providers/Auth/tabSessionSync/types.d.ts.map +1 -0
  406. package/dist/providers/Auth/tabSessionSync/types.js +6 -0
  407. package/dist/providers/Auth/tabSessionSync/types.js.map +1 -0
  408. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts +11 -0
  409. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts.map +1 -0
  410. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js +90 -0
  411. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +1 -0
  412. package/dist/providers/Auth/tabSessionSync/utilities.d.ts +26 -0
  413. package/dist/providers/Auth/tabSessionSync/utilities.d.ts.map +1 -0
  414. package/dist/providers/Auth/tabSessionSync/utilities.js +159 -0
  415. package/dist/providers/Auth/tabSessionSync/utilities.js.map +1 -0
  416. package/dist/providers/Auth/types.d.ts +65 -0
  417. package/dist/providers/Auth/types.d.ts.map +1 -0
  418. package/dist/providers/Auth/types.js +2 -0
  419. package/dist/providers/Auth/types.js.map +1 -0
  420. package/dist/providers/Auth/useAuthSessionTimers.d.ts +26 -0
  421. package/dist/providers/Auth/useAuthSessionTimers.d.ts.map +1 -0
  422. package/dist/providers/Auth/useAuthSessionTimers.js +203 -0
  423. package/dist/providers/Auth/useAuthSessionTimers.js.map +1 -0
  424. package/dist/providers/Auth/useAuthSessionTimers.spec.js +311 -0
  425. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +1 -0
  426. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  427. package/dist/providers/DocumentInfo/index.js +2 -3
  428. package/dist/providers/DocumentInfo/index.js.map +1 -1
  429. package/dist/providers/DocumentTitle/index.d.ts +1 -0
  430. package/dist/providers/DocumentTitle/index.d.ts.map +1 -1
  431. package/dist/providers/DocumentTitle/index.js +2 -0
  432. package/dist/providers/DocumentTitle/index.js.map +1 -1
  433. package/dist/providers/Embed/index.d.ts +24 -0
  434. package/dist/providers/Embed/index.d.ts.map +1 -0
  435. package/dist/providers/Embed/index.js +105 -0
  436. package/dist/providers/Embed/index.js.map +1 -0
  437. package/dist/providers/FormErrorHandler/index.d.ts +24 -0
  438. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -0
  439. package/dist/providers/FormErrorHandler/index.js +6 -0
  440. package/dist/providers/FormErrorHandler/index.js.map +1 -0
  441. package/dist/providers/Locale/index.d.ts +1 -5
  442. package/dist/providers/Locale/index.d.ts.map +1 -1
  443. package/dist/providers/Locale/index.js +64 -137
  444. package/dist/providers/Locale/index.js.map +1 -1
  445. package/dist/providers/Root/index.d.ts +1 -0
  446. package/dist/providers/Root/index.d.ts.map +1 -1
  447. package/dist/providers/Root/index.js +37 -31
  448. package/dist/providers/Root/index.js.map +1 -1
  449. package/dist/providers/RouteTransition/ProgressBar/index.js +4 -1
  450. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  451. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +44 -0
  452. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +1 -0
  453. package/dist/providers/RouteTransition/index.d.ts +2 -0
  454. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  455. package/dist/providers/RouteTransition/index.js +42 -14
  456. package/dist/providers/RouteTransition/index.js.map +1 -1
  457. package/dist/providers/Selection/index.d.ts.map +1 -1
  458. package/dist/providers/Selection/index.js +2 -3
  459. package/dist/providers/Selection/index.js.map +1 -1
  460. package/dist/providers/ServerFunctions/index.d.ts +5 -1
  461. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  462. package/dist/providers/ServerFunctions/index.js +15 -0
  463. package/dist/providers/ServerFunctions/index.js.map +1 -1
  464. package/dist/providers/SidebarTabs/index.d.ts +3 -2
  465. package/dist/providers/SidebarTabs/index.d.ts.map +1 -1
  466. package/dist/providers/SidebarTabs/index.js.map +1 -1
  467. package/dist/providers/TableColumns/buildColumnState/index.js +1 -2
  468. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  469. package/dist/providers/TableColumns/buildColumnState/index.spec.js +40 -0
  470. package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +1 -0
  471. package/dist/providers/Theme/index.d.ts +3 -0
  472. package/dist/providers/Theme/index.d.ts.map +1 -1
  473. package/dist/providers/Theme/index.js +107 -95
  474. package/dist/providers/Theme/index.js.map +1 -1
  475. package/dist/providers/UploadHandlers/index.d.ts +2 -7
  476. package/dist/providers/UploadHandlers/index.d.ts.map +1 -1
  477. package/dist/providers/UploadHandlers/index.js +102 -42
  478. package/dist/providers/UploadHandlers/index.js.map +1 -1
  479. package/dist/styles.css +13 -10
  480. package/dist/templates/Default/index.d.ts +1 -0
  481. package/dist/templates/Default/index.d.ts.map +1 -1
  482. package/dist/templates/Default/index.js +2 -0
  483. package/dist/templates/Default/index.js.map +1 -1
  484. package/dist/utilities/combineFieldLabel.d.ts.map +1 -1
  485. package/dist/utilities/combineFieldLabel.js +5 -1
  486. package/dist/utilities/combineFieldLabel.js.map +1 -1
  487. package/dist/utilities/formatMetadata.d.ts.map +1 -1
  488. package/dist/utilities/formatMetadata.js +0 -5
  489. package/dist/utilities/formatMetadata.js.map +1 -1
  490. package/dist/utilities/generateFieldID.d.ts +1 -1
  491. package/dist/utilities/generateFieldID.d.ts.map +1 -1
  492. package/dist/utilities/generateFieldID.js +2 -2
  493. package/dist/utilities/generateFieldID.js.map +1 -1
  494. package/dist/utilities/getFilesFromClipboard.d.ts +10 -0
  495. package/dist/utilities/getFilesFromClipboard.d.ts.map +1 -0
  496. package/dist/utilities/getFilesFromClipboard.js +49 -0
  497. package/dist/utilities/getFilesFromClipboard.js.map +1 -0
  498. package/dist/utilities/getHasScheduledPublish.d.ts +2 -3
  499. package/dist/utilities/getHasScheduledPublish.d.ts.map +1 -1
  500. package/dist/utilities/getHasScheduledPublish.js +2 -5
  501. package/dist/utilities/getHasScheduledPublish.js.map +1 -1
  502. package/dist/utilities/getRequestEmbed.d.ts +14 -0
  503. package/dist/utilities/getRequestEmbed.d.ts.map +1 -0
  504. package/dist/utilities/getRequestEmbed.js +10 -0
  505. package/dist/utilities/getRequestEmbed.js.map +1 -0
  506. package/dist/utilities/handleServerFunctions.d.ts +32 -8
  507. package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
  508. package/dist/utilities/handleServerFunctions.js +17 -37
  509. package/dist/utilities/handleServerFunctions.js.map +1 -1
  510. package/dist/utilities/renderTable.d.ts.map +1 -1
  511. package/dist/utilities/renderTable.js +18 -2
  512. package/dist/utilities/renderTable.js.map +1 -1
  513. package/dist/utilities/schedulePublishHandler.d.ts +8 -1
  514. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
  515. package/dist/utilities/schedulePublishHandler.js +68 -4
  516. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  517. package/dist/utilities/serverFunctionRegistry.d.ts +12 -7
  518. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  519. package/dist/utilities/serverFunctionRegistry.js +27 -8
  520. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  521. package/dist/utilities/slugify.d.ts.map +1 -1
  522. package/dist/utilities/slugify.js +52 -6
  523. package/dist/utilities/slugify.js.map +1 -1
  524. package/dist/views/API/index.client.d.ts.map +1 -1
  525. package/dist/views/API/index.client.js +2 -3
  526. package/dist/views/API/index.client.js.map +1 -1
  527. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
  528. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +3 -2
  529. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  530. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.d.ts.map +1 -1
  531. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js +7 -7
  532. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -1
  533. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -1
  534. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +104 -66
  535. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  536. package/dist/views/Dashboard/Default/ModularDashboard/index.css +29 -144
  537. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +4 -4
  538. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  539. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +10 -10
  540. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  541. package/dist/views/Document/index.d.ts.map +1 -1
  542. package/dist/views/Document/index.js +1 -2
  543. package/dist/views/Document/index.js.map +1 -1
  544. package/dist/views/Edit/SetDocumentTitle/index.d.ts.map +1 -1
  545. package/dist/views/Edit/SetDocumentTitle/index.js +4 -1
  546. package/dist/views/Edit/SetDocumentTitle/index.js.map +1 -1
  547. package/dist/views/Edit/index.css +61 -53
  548. package/dist/views/Edit/index.d.ts.map +1 -1
  549. package/dist/views/Edit/index.js +3 -2
  550. package/dist/views/Edit/index.js.map +1 -1
  551. package/dist/views/HierarchyList/index.css +1 -1
  552. package/dist/views/List/ListHeader/index.d.ts +1 -10
  553. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  554. package/dist/views/List/ListHeader/index.js +1 -3
  555. package/dist/views/List/ListHeader/index.js.map +1 -1
  556. package/dist/views/List/index.client.d.ts.map +1 -1
  557. package/dist/views/List/index.client.js +0 -14
  558. package/dist/views/List/index.client.js.map +1 -1
  559. package/dist/views/List/index.css +6 -1
  560. package/dist/views/List/index.d.ts.map +1 -1
  561. package/dist/views/List/index.js +4 -0
  562. package/dist/views/List/index.js.map +1 -1
  563. package/dist/views/Logout/index.d.ts.map +1 -1
  564. package/dist/views/Logout/index.js +11 -0
  565. package/dist/views/Logout/index.js.map +1 -1
  566. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
  567. package/dist/views/Root/getCustomCollectionViewByRoute.js.map +1 -1
  568. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -1
  569. package/dist/views/Root/getCustomGlobalViewByRoute.js.map +1 -1
  570. package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
  571. package/dist/views/Root/getCustomViewByKey.js.map +1 -1
  572. package/dist/views/Root/index.d.ts +12 -1
  573. package/dist/views/Root/index.d.ts.map +1 -1
  574. package/dist/views/Root/index.js +11 -3
  575. package/dist/views/Root/index.js.map +1 -1
  576. package/dist/views/Version/Default/SetStepNav.d.ts.map +1 -1
  577. package/dist/views/Version/Default/SetStepNav.js +10 -13
  578. package/dist/views/Version/Default/SetStepNav.js.map +1 -1
  579. package/dist/views/Version/Default/index.d.ts.map +1 -1
  580. package/dist/views/Version/Default/index.js +12 -13
  581. package/dist/views/Version/Default/index.js.map +1 -1
  582. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts +1 -0
  583. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts.map +1 -1
  584. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +56 -50
  585. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
  586. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.d.ts.map +1 -1
  587. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +41 -27
  588. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
  589. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js +258 -0
  590. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js.map +1 -0
  591. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts.map +1 -1
  592. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +10 -0
  593. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
  594. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.d.ts.map +1 -1
  595. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +33 -1
  596. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -1
  597. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +56 -2
  598. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +1 -1
  599. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts +8 -2
  600. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts.map +1 -1
  601. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +17 -19
  602. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -1
  603. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +3 -13
  604. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +1 -1
  605. package/dist/views/Version/generateVersionViewMetadata.js.map +1 -1
  606. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.d.ts.map +1 -1
  607. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js +2 -3
  608. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js.map +1 -1
  609. package/dist/views/Versions/generateVersionsViewMetadata.js.map +1 -1
  610. package/package.json +6 -10
  611. package/dist/elements/RelationshipTable/Pagination.css +0 -39
  612. package/dist/scss/app.scss +0 -183
  613. package/dist/scss/colors.scss +0 -191
  614. package/dist/scss/custom.css +0 -1
  615. package/dist/scss/queries.scss +0 -27
  616. package/dist/scss/styles.scss +0 -9
  617. package/dist/scss/svg.scss +0 -10
  618. package/dist/scss/toastify.scss +0 -61
  619. package/dist/scss/vars.scss +0 -192
  620. package/dist/scss/z-index.scss +0 -9
@@ -0,0 +1,242 @@
1
+ // @vitest-environment jsdom
2
+ import React, { act } from 'react';
3
+ import { createRoot } from 'react-dom/client';
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { UploadInput } from './Input.js';
6
+ vi.mock('@faceless-ui/modal', () => ({
7
+ useModal: () => ({
8
+ openModal: vi.fn()
9
+ })
10
+ }));
11
+ vi.mock('../../elements/BulkUpload/index.js', () => ({
12
+ useBulkUpload: () => ({
13
+ modalSlug: 'bulk-upload',
14
+ setCollectionSlug: vi.fn(),
15
+ setInitialFiles: vi.fn(),
16
+ setMaxFiles: vi.fn(),
17
+ setOnSuccess: vi.fn(),
18
+ setSelectableCollections: vi.fn()
19
+ })
20
+ }));
21
+ vi.mock('../../elements/DocumentDrawer/index.js', () => ({
22
+ useDocumentDrawer: () => [() => null, () => null, {
23
+ closeDrawer: vi.fn(),
24
+ openDrawer: vi.fn()
25
+ }]
26
+ }));
27
+ vi.mock('../../elements/ListDrawer/index.js', () => ({
28
+ useListDrawer: () => [() => null, () => null, {
29
+ closeDrawer: vi.fn(),
30
+ openDrawer: vi.fn()
31
+ }]
32
+ }));
33
+ vi.mock('../../providers/Auth/index.js', () => ({
34
+ useAuth: () => ({
35
+ permissions: {}
36
+ })
37
+ }));
38
+ vi.mock('../../providers/Locale/index.js', () => ({
39
+ useLocale: () => ({
40
+ code: 'en',
41
+ label: 'English'
42
+ })
43
+ }));
44
+ vi.mock('../../providers/Translation/index.js', () => ({
45
+ useTranslation: () => ({
46
+ i18n: {
47
+ language: 'en'
48
+ },
49
+ t: key => key
50
+ })
51
+ }));
52
+ vi.mock('./HasMany/index.js', () => ({
53
+ UploadComponentHasMany: props => React.createElement('div', {
54
+ 'data-testid': 'has-many'
55
+ }, JSON.stringify(props.fileDocs))
56
+ }));
57
+ vi.mock('./HasOne/index.js', () => ({
58
+ UploadComponentHasOne: () => null
59
+ }));
60
+ const rootCleanups = [];
61
+ beforeEach(() => {
62
+ vi.stubGlobal('fetch', vi.fn());
63
+ });
64
+ afterEach(() => {
65
+ for (const cleanup of rootCleanups.splice(0)) {
66
+ cleanup();
67
+ }
68
+ vi.unstubAllGlobals();
69
+ });
70
+ describe('UploadInput populateDocs race', () => {
71
+ it('aborts an in-flight populateDocs() request when value changes', async () => {
72
+ let oldRequest;
73
+ let newRequest;
74
+ const fetchMock = fetch;
75
+ fetchMock.mockImplementation((_url, options) => {
76
+ const deferred = createDeferred();
77
+ if (options.signal) {
78
+ if (options.signal.aborted) {
79
+ return Promise.reject(new DOMException('The operation was aborted.', 'AbortError'));
80
+ }
81
+ options.signal.addEventListener('abort', () => {
82
+ deferred.reject(new DOMException('The operation was aborted.', 'AbortError'));
83
+ });
84
+ }
85
+ if (options.body.includes('old-id')) {
86
+ oldRequest = deferred;
87
+ } else {
88
+ newRequest = deferred;
89
+ }
90
+ return deferred.promise;
91
+ });
92
+ const {
93
+ container,
94
+ rerender
95
+ } = renderUploadInput({
96
+ value: ['old-id']
97
+ });
98
+ // First render fires populateDocs() for the older value; do not resolve it yet.
99
+ await act(async () => {
100
+ await Promise.resolve();
101
+ });
102
+ expect(oldRequest).toBeDefined();
103
+ // A newer value supersedes it before the older request resolves.
104
+ rerender({
105
+ value: ['new-id']
106
+ });
107
+ await act(async () => {
108
+ await Promise.resolve();
109
+ });
110
+ expect(newRequest).toBeDefined();
111
+ await expect(oldRequest.promise).rejects.toMatchObject({
112
+ name: 'AbortError'
113
+ });
114
+ // The newer request resolves and is applied.
115
+ await act(async () => {
116
+ newRequest.resolve(jsonResponse([{
117
+ id: 'new-id',
118
+ filename: 'new.jpg'
119
+ }]));
120
+ await Promise.resolve();
121
+ await Promise.resolve();
122
+ });
123
+ expect(container.querySelector('[data-testid="has-many"]')?.textContent).toContain('new-id');
124
+ expect(container.querySelector('[data-testid="has-many"]')?.textContent).not.toContain('old-id');
125
+ });
126
+ it('applies the result normally when requests resolve in order', async () => {
127
+ let oldRequest;
128
+ let newRequest;
129
+ const fetchMock = fetch;
130
+ fetchMock.mockImplementation((_url, options) => {
131
+ const deferred = createDeferred();
132
+ if (options.signal) {
133
+ if (options.signal.aborted) {
134
+ return Promise.reject(new DOMException('The operation was aborted.', 'AbortError'));
135
+ }
136
+ options.signal.addEventListener('abort', () => {
137
+ deferred.reject(new DOMException('The operation was aborted.', 'AbortError'));
138
+ });
139
+ }
140
+ if (options.body.includes('old-id')) {
141
+ oldRequest = deferred;
142
+ } else {
143
+ newRequest = deferred;
144
+ }
145
+ return deferred.promise;
146
+ });
147
+ const {
148
+ container,
149
+ rerender
150
+ } = renderUploadInput({
151
+ value: ['old-id']
152
+ });
153
+ await act(async () => {
154
+ await Promise.resolve();
155
+ });
156
+ await act(async () => {
157
+ oldRequest.resolve(jsonResponse([{
158
+ id: 'old-id',
159
+ filename: 'old.jpg'
160
+ }]));
161
+ await Promise.resolve();
162
+ await Promise.resolve();
163
+ });
164
+ expect(container.querySelector('[data-testid="has-many"]')?.textContent).toContain('old-id');
165
+ rerender({
166
+ value: ['new-id']
167
+ });
168
+ await act(async () => {
169
+ await Promise.resolve();
170
+ });
171
+ await act(async () => {
172
+ newRequest.resolve(jsonResponse([{
173
+ id: 'new-id',
174
+ filename: 'new.jpg'
175
+ }]));
176
+ await Promise.resolve();
177
+ await Promise.resolve();
178
+ });
179
+ expect(container.querySelector('[data-testid="has-many"]')?.textContent).toContain('new-id');
180
+ });
181
+ });
182
+ function renderUploadInput({
183
+ value
184
+ }) {
185
+ const container = document.createElement('div');
186
+ const root = createRoot(container);
187
+ const props = {
188
+ api: '/api',
189
+ hasMany: true,
190
+ onChange: vi.fn(),
191
+ path: 'upload',
192
+ relationTo: 'uploads',
193
+ serverURL: ''
194
+ };
195
+ act(() => {
196
+ root.render(React.createElement(UploadInput, {
197
+ ...props,
198
+ value
199
+ }));
200
+ });
201
+ rootCleanups.push(() => {
202
+ act(() => {
203
+ root.unmount();
204
+ });
205
+ });
206
+ return {
207
+ container,
208
+ rerender: next => {
209
+ act(() => {
210
+ root.render(React.createElement(UploadInput, {
211
+ ...props,
212
+ value: next.value
213
+ }));
214
+ });
215
+ }
216
+ };
217
+ }
218
+ function jsonResponse(docs) {
219
+ return {
220
+ json: async () => ({
221
+ docs
222
+ }),
223
+ ok: true
224
+ };
225
+ }
226
+ function createDeferred() {
227
+ let resolve;
228
+ let reject;
229
+ const promise = new Promise((resolvePromise, rejectPromise) => {
230
+ resolve = resolvePromise;
231
+ reject = rejectPromise;
232
+ });
233
+ if (!resolve || !reject) {
234
+ throw new Error('Expected deferred promise resolver.');
235
+ }
236
+ return {
237
+ promise,
238
+ reject,
239
+ resolve
240
+ };
241
+ }
242
+ //# sourceMappingURL=Input.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.spec.js","names":["React","act","createRoot","afterEach","beforeEach","describe","expect","it","vi","UploadInput","mock","useModal","openModal","fn","useBulkUpload","modalSlug","setCollectionSlug","setInitialFiles","setMaxFiles","setOnSuccess","setSelectableCollections","useDocumentDrawer","closeDrawer","openDrawer","useListDrawer","useAuth","permissions","useLocale","code","label","useTranslation","i18n","language","t","key","UploadComponentHasMany","props","createElement","JSON","stringify","fileDocs","UploadComponentHasOne","rootCleanups","stubGlobal","cleanup","splice","unstubAllGlobals","oldRequest","newRequest","fetchMock","fetch","mockImplementation","_url","options","deferred","createDeferred","signal","aborted","Promise","reject","DOMException","addEventListener","body","includes","promise","container","rerender","renderUploadInput","value","resolve","toBeDefined","rejects","toMatchObject","name","jsonResponse","id","filename","querySelector","textContent","toContain","not","document","root","api","hasMany","onChange","path","relationTo","serverURL","render","push","unmount","next","docs","json","ok","resolvePromise","rejectPromise","Error"],"sources":["../../../src/fields/Upload/Input.spec.ts"],"sourcesContent":["// @vitest-environment jsdom\nimport type { Locale } from 'payload'\n\nimport React, { act } from 'react'\nimport { createRoot, type Root } from 'react-dom/client'\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport { UploadInput } from './Input.js'\n\nvi.mock('@faceless-ui/modal', () => ({\n useModal: () => ({ openModal: vi.fn() }),\n}))\n\nvi.mock('../../elements/BulkUpload/index.js', () => ({\n useBulkUpload: () => ({\n modalSlug: 'bulk-upload',\n setCollectionSlug: vi.fn(),\n setInitialFiles: vi.fn(),\n setMaxFiles: vi.fn(),\n setOnSuccess: vi.fn(),\n setSelectableCollections: vi.fn(),\n }),\n}))\n\nvi.mock('../../elements/DocumentDrawer/index.js', () => ({\n useDocumentDrawer: () => [() => null, () => null, { closeDrawer: vi.fn(), openDrawer: vi.fn() }],\n}))\n\nvi.mock('../../elements/ListDrawer/index.js', () => ({\n useListDrawer: () => [() => null, () => null, { closeDrawer: vi.fn(), openDrawer: vi.fn() }],\n}))\n\nvi.mock('../../providers/Auth/index.js', () => ({\n useAuth: () => ({ permissions: {} }),\n}))\n\nvi.mock('../../providers/Locale/index.js', () => ({\n useLocale: (): Locale | null => ({ code: 'en', label: 'English' }),\n}))\n\nvi.mock('../../providers/Translation/index.js', () => ({\n useTranslation: () => ({ i18n: { language: 'en' }, t: (key: string) => key }),\n}))\n\nvi.mock('./HasMany/index.js', () => ({\n UploadComponentHasMany: (props: { fileDocs: unknown }) =>\n React.createElement('div', { 'data-testid': 'has-many' }, JSON.stringify(props.fileDocs)),\n}))\n\nvi.mock('./HasOne/index.js', () => ({\n UploadComponentHasOne: () => null,\n}))\n\nconst rootCleanups: Array<() => void> = []\n\nbeforeEach(() => {\n vi.stubGlobal('fetch', vi.fn())\n})\n\nafterEach(() => {\n for (const cleanup of rootCleanups.splice(0)) {\n cleanup()\n }\n vi.unstubAllGlobals()\n})\n\ndescribe('UploadInput populateDocs race', () => {\n it('aborts an in-flight populateDocs() request when value changes', async () => {\n let oldRequest: ReturnType<typeof createDeferred<Response>> | undefined\n let newRequest: ReturnType<typeof createDeferred<Response>> | undefined\n\n const fetchMock = fetch as unknown as ReturnType<typeof vi.fn>\n fetchMock.mockImplementation(\n (_url: string, options: { body: string; signal?: AbortSignal }) => {\n const deferred = createDeferred<Response>()\n\n if (options.signal) {\n if (options.signal.aborted) {\n return Promise.reject(new DOMException('The operation was aborted.', 'AbortError'))\n }\n\n options.signal.addEventListener('abort', () => {\n deferred.reject(new DOMException('The operation was aborted.', 'AbortError'))\n })\n }\n\n if (options.body.includes('old-id')) {\n oldRequest = deferred\n } else {\n newRequest = deferred\n }\n\n return deferred.promise\n },\n )\n\n const { container, rerender } = renderUploadInput({ value: ['old-id'] })\n\n // First render fires populateDocs() for the older value; do not resolve it yet.\n await act(async () => {\n await Promise.resolve()\n })\n expect(oldRequest).toBeDefined()\n\n // A newer value supersedes it before the older request resolves.\n rerender({ value: ['new-id'] })\n await act(async () => {\n await Promise.resolve()\n })\n expect(newRequest).toBeDefined()\n await expect(oldRequest!.promise).rejects.toMatchObject({ name: 'AbortError' })\n\n // The newer request resolves and is applied.\n await act(async () => {\n newRequest!.resolve(jsonResponse([{ id: 'new-id', filename: 'new.jpg' }]))\n await Promise.resolve()\n await Promise.resolve()\n })\n expect(container.querySelector('[data-testid=\"has-many\"]')?.textContent).toContain('new-id')\n expect(container.querySelector('[data-testid=\"has-many\"]')?.textContent).not.toContain('old-id')\n })\n\n it('applies the result normally when requests resolve in order', async () => {\n let oldRequest: ReturnType<typeof createDeferred<Response>> | undefined\n let newRequest: ReturnType<typeof createDeferred<Response>> | undefined\n\n const fetchMock = fetch as unknown as ReturnType<typeof vi.fn>\n fetchMock.mockImplementation(\n (_url: string, options: { body: string; signal?: AbortSignal }) => {\n const deferred = createDeferred<Response>()\n\n if (options.signal) {\n if (options.signal.aborted) {\n return Promise.reject(new DOMException('The operation was aborted.', 'AbortError'))\n }\n\n options.signal.addEventListener('abort', () => {\n deferred.reject(new DOMException('The operation was aborted.', 'AbortError'))\n })\n }\n\n if (options.body.includes('old-id')) {\n oldRequest = deferred\n } else {\n newRequest = deferred\n }\n\n return deferred.promise\n },\n )\n\n const { container, rerender } = renderUploadInput({ value: ['old-id'] })\n\n await act(async () => {\n await Promise.resolve()\n })\n\n await act(async () => {\n oldRequest!.resolve(jsonResponse([{ id: 'old-id', filename: 'old.jpg' }]))\n await Promise.resolve()\n await Promise.resolve()\n })\n expect(container.querySelector('[data-testid=\"has-many\"]')?.textContent).toContain('old-id')\n\n rerender({ value: ['new-id'] })\n await act(async () => {\n await Promise.resolve()\n })\n\n await act(async () => {\n newRequest!.resolve(jsonResponse([{ id: 'new-id', filename: 'new.jpg' }]))\n await Promise.resolve()\n await Promise.resolve()\n })\n expect(container.querySelector('[data-testid=\"has-many\"]')?.textContent).toContain('new-id')\n })\n})\n\nfunction renderUploadInput({ value }: { value: (number | string)[] }): {\n container: HTMLElement\n rerender: (next: { value: (number | string)[] }) => void\n} {\n const container = document.createElement('div')\n const root: Root = createRoot(container)\n\n const props = {\n api: '/api',\n hasMany: true,\n onChange: vi.fn(),\n path: 'upload',\n relationTo: 'uploads',\n serverURL: '',\n }\n\n act(() => {\n root.render(React.createElement(UploadInput, { ...props, value }))\n })\n\n rootCleanups.push(() => {\n act(() => {\n root.unmount()\n })\n })\n\n return {\n container,\n rerender: (next) => {\n act(() => {\n root.render(React.createElement(UploadInput, { ...props, value: next.value }))\n })\n },\n }\n}\n\nfunction jsonResponse(docs: unknown[]): Response {\n return {\n json: async () => ({ docs }),\n ok: true,\n } as unknown as Response\n}\n\nfunction createDeferred<Value>(): {\n promise: Promise<Value>\n reject: (reason?: unknown) => void\n resolve: (value: Value | PromiseLike<Value>) => void\n} {\n let resolve: ((value: Value | PromiseLike<Value>) => void) | undefined\n let reject: ((reason?: unknown) => void) | undefined\n const promise = new Promise<Value>((resolvePromise, rejectPromise) => {\n resolve = resolvePromise\n reject = rejectPromise\n })\n\n if (!resolve || !reject) {\n throw new Error('Expected deferred promise resolver.')\n }\n\n return { promise, reject, resolve }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,13 +3,20 @@
3
3
  display: flex;
4
4
  flex-direction: column;
5
5
  gap: var(--spacer-2);
6
+ container-type: inline-size;
7
+ container-name: upload-dropzone;
8
+ }
9
+
10
+ .upload__dropzoneAndUpload .dropzone.dropzone--style-default {
11
+ padding-block: 0;
6
12
  }
7
13
 
8
14
  .upload__dropzoneContent {
9
15
  display: flex;
10
16
  align-items: center;
11
- justify-content: space-between;
12
- padding: var(--spacer-2-5);
17
+ flex-wrap: wrap;
18
+ row-gap: var(--spacer-2);
19
+ padding: var(--spacer-3);
13
20
  gap: var(--spacer-2);
14
21
  width: 100%;
15
22
  }
@@ -18,6 +25,13 @@
18
25
  display: flex;
19
26
  align-items: center;
20
27
  gap: var(--spacer-2);
28
+ flex-wrap: wrap;
29
+ }
30
+
31
+ @supports (flex-wrap: balance) {
32
+ .upload__dropzoneContent__buttons {
33
+ flex-wrap: balance;
34
+ }
21
35
  }
22
36
 
23
37
  .upload__dropzoneContent__orText {
@@ -26,6 +40,7 @@
26
40
  }
27
41
 
28
42
  .upload__dragAndDropText {
43
+ display: none;
29
44
  flex-shrink: 0;
30
45
  margin: 0;
31
46
  text-transform: lowercase;
@@ -43,9 +58,9 @@
43
58
  border: var(--stroke-width-small) solid var(--color-border);
44
59
  }
45
60
 
46
- @media (max-width: 768px) {
61
+ @container upload-dropzone (min-width: 400px) {
47
62
  .upload__dragAndDropText {
48
- display: none;
63
+ display: block;
49
64
  }
50
65
  }
51
66
  }
@@ -8,7 +8,7 @@ export declare const fieldBaseClass = "field-type";
8
8
  export declare function isFieldRTL({ fieldLocalized, fieldRTL, locale, localizationConfig, }: {
9
9
  fieldLocalized?: boolean;
10
10
  fieldRTL?: boolean;
11
- locale: Locale;
11
+ locale: Locale | null;
12
12
  localizationConfig?: SanitizedLocalizationConfig;
13
13
  }): boolean;
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/shared/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAElE,eAAO,MAAM,cAAc,eAAe,CAAA;AAE1C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,cAAc,EACd,QAAQ,EACR,MAAM,EACN,kBAAkB,GACnB,EAAE;IACD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,2BAA2B,CAAA;CACjD,WAiBA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/shared/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAElE,eAAO,MAAM,cAAc,eAAe,CAAA;AAE1C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,cAAc,EACd,QAAQ,EACR,MAAM,EACN,kBAAkB,GACnB,EAAE;IACD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,kBAAkB,CAAC,EAAE,2BAA2B,CAAA;CACjD,WAiBA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["fieldBaseClass","isFieldRTL","fieldLocalized","fieldRTL","locale","localizationConfig","hasMultipleLocales","locales","length","isCurrentLocaleDefaultLocale","code","defaultLocale","rtl"],"sources":["../../../src/fields/shared/index.tsx"],"sourcesContent":["'use client'\nimport type { Locale, SanitizedLocalizationConfig } from 'payload'\n\nexport const fieldBaseClass = 'field-type'\n\n/**\n * Determines whether a field should be displayed as right-to-left (RTL) based on its configuration, payload's localization configuration and the adming user's currently enabled locale.\n\n * @returns Whether the field should be displayed as RTL.\n */\nexport function isFieldRTL({\n fieldLocalized,\n fieldRTL,\n locale,\n localizationConfig,\n}: {\n fieldLocalized?: boolean\n fieldRTL?: boolean\n locale: Locale\n localizationConfig?: SanitizedLocalizationConfig\n}) {\n const hasMultipleLocales =\n locale &&\n localizationConfig &&\n localizationConfig.locales &&\n localizationConfig.locales.length > 1\n\n const isCurrentLocaleDefaultLocale = locale?.code === localizationConfig?.defaultLocale\n\n return (\n (fieldRTL !== false &&\n locale?.rtl === true &&\n (fieldLocalized ||\n (!fieldLocalized && !hasMultipleLocales) || // If there is only one locale which is also rtl, that field is rtl too\n (!fieldLocalized && isCurrentLocaleDefaultLocale))) || // If the current locale is the default locale, but the field is not localized, that field is rtl too\n fieldRTL === true\n ) // If fieldRTL is true. This should be useful for when no localization is set at all in the payload config, but you still want fields to be rtl.\n}\n"],"mappings":"AAAA;;AAGA,OAAO,MAAMA,cAAA,GAAiB;AAE9B;;;;;AAKA,OAAO,SAASC,WAAW;EACzBC,cAAc;EACdC,QAAQ;EACRC,MAAM;EACNC;AAAkB,CAMnB;EACC,MAAMC,kBAAA,GACJF,MAAA,IACAC,kBAAA,IACAA,kBAAA,CAAmBE,OAAO,IAC1BF,kBAAA,CAAmBE,OAAO,CAACC,MAAM,GAAG;EAEtC,MAAMC,4BAAA,GAA+BL,MAAA,EAAQM,IAAA,KAASL,kBAAA,EAAoBM,aAAA;EAE1E,OACER,QAAC,KAAa,SACZC,MAAA,EAAQQ,GAAA,KAAQ,SACfV,cAAA,IACE,CAACA,cAAA,IAAkB,CAACI,kBAAA;EAAuB;EAC3C,CAACJ,cAAA,IAAkBO,4BAA4B;EAAO;EAC3DN,QAAA,KAAa,KACb;AAAA;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["fieldBaseClass","isFieldRTL","fieldLocalized","fieldRTL","locale","localizationConfig","hasMultipleLocales","locales","length","isCurrentLocaleDefaultLocale","code","defaultLocale","rtl"],"sources":["../../../src/fields/shared/index.tsx"],"sourcesContent":["'use client'\nimport type { Locale, SanitizedLocalizationConfig } from 'payload'\n\nexport const fieldBaseClass = 'field-type'\n\n/**\n * Determines whether a field should be displayed as right-to-left (RTL) based on its configuration, payload's localization configuration and the adming user's currently enabled locale.\n\n * @returns Whether the field should be displayed as RTL.\n */\nexport function isFieldRTL({\n fieldLocalized,\n fieldRTL,\n locale,\n localizationConfig,\n}: {\n fieldLocalized?: boolean\n fieldRTL?: boolean\n locale: Locale | null\n localizationConfig?: SanitizedLocalizationConfig\n}) {\n const hasMultipleLocales =\n locale &&\n localizationConfig &&\n localizationConfig.locales &&\n localizationConfig.locales.length > 1\n\n const isCurrentLocaleDefaultLocale = locale?.code === localizationConfig?.defaultLocale\n\n return (\n (fieldRTL !== false &&\n locale?.rtl === true &&\n (fieldLocalized ||\n (!fieldLocalized && !hasMultipleLocales) || // If there is only one locale which is also rtl, that field is rtl too\n (!fieldLocalized && isCurrentLocaleDefaultLocale))) || // If the current locale is the default locale, but the field is not localized, that field is rtl too\n fieldRTL === true\n ) // If fieldRTL is true. This should be useful for when no localization is set at all in the payload config, but you still want fields to be rtl.\n}\n"],"mappings":"AAAA;;AAGA,OAAO,MAAMA,cAAA,GAAiB;AAE9B;;;;;AAKA,OAAO,SAASC,WAAW;EACzBC,cAAc;EACdC,QAAQ;EACRC,MAAM;EACNC;AAAkB,CAMnB;EACC,MAAMC,kBAAA,GACJF,MAAA,IACAC,kBAAA,IACAA,kBAAA,CAAmBE,OAAO,IAC1BF,kBAAA,CAAmBE,OAAO,CAACC,MAAM,GAAG;EAEtC,MAAMC,4BAAA,GAA+BL,MAAA,EAAQM,IAAA,KAASL,kBAAA,EAAoBM,aAAA;EAE1E,OACER,QAAC,KAAa,SACZC,MAAA,EAAQQ,GAAA,KAAQ,SACfV,cAAA,IACE,CAACA,cAAA,IAAkB,CAACI,kBAAA;EAAuB;EAC3C,CAACJ,cAAA,IAAkBO,4BAA4B;EAAO;EAC3DN,QAAA,KAAa,KACb;AAAA;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"fieldReducer.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/fieldReducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,SAAS,EAAO,MAAM,SAAS,CAAA;AAMxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAO7C;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,CAwb7E"}
1
+ {"version":3,"file":"fieldReducer.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/fieldReducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,SAAS,EAAO,MAAM,SAAS,CAAA;AAMxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAO7C;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,CA0b7E"}
@@ -207,7 +207,9 @@ export function fieldReducer(state, action) {
207
207
  currentState: state || {},
208
208
  incomingState: serverState
209
209
  });
210
- prevStateRef.current = newState;
210
+ if (prevStateRef) {
211
+ prevStateRef.current = newState;
212
+ }
211
213
  return newState;
212
214
  }
213
215
  case 'MOVE_ROW':
@@ -1 +1 @@
1
- {"version":3,"file":"fieldReducer.js","names":["ObjectIdImport","dequal","deepCopyObjectSimpleWithoutReactComponents","mergeServerFormState","flattenRows","separateRows","ObjectId","default","fieldReducer","state","action","type","blockType","path","rowIndex","rowIndexFromArgs","subFieldState","rows","length","withNewRow","newRow","id","value","toHexString","isLoading","splice","initialValue","valid","remainingFields","siblingRows","newState","passesCondition","disableFormData","errorPaths","errors","forEach","message","fieldPath","errorMessage","segments","split","push","fieldErrorPath","parentPath","slice","join","Object","entries","reduce","acc","fieldState","fieldErrorPaths","errorACC","startsWith","changed","newErrorPaths","Array","isArray","includes","newRows","newRowID","customComponents","RowLabel","newRowState","key","keys","filter","endsWith","idState","newNestedFieldID","isValid","parseInt","parentFieldPath","parentFieldRows","acceptValues","prevStateRef","serverState","currentState","incomingState","current","moveFromIndex","moveToIndex","topLevelRows","copyOfMovingRow","rowsWithinField","copyOfMovingRow2","rowsMetadata","rowIndexArg","Math","max","min","undefined","collapsed","optimize","newField","oldField","sanitize","field","values","updatedRows","isModified","_","fieldWithoutIsModified","formState"],"sources":["../../../src/forms/Form/fieldReducer.ts"],"sourcesContent":["'use client'\nimport type { FormField, FormState, Row } from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared'\n\nimport type { FieldAction } from './types.js'\n\nimport { mergeServerFormState } from './mergeServerFormState.js'\nimport { flattenRows, separateRows } from './rows.js'\n\nconst ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n\n/**\n * Reducer which modifies the form field state (all the current data of the fields in the form). When called using dispatch, it will return a new state object.\n */\nexport function fieldReducer(state: FormState, action: FieldAction): FormState {\n switch (action.type) {\n case 'ADD_ROW': {\n const { blockType, path, rowIndex: rowIndexFromArgs, subFieldState = {} } = action\n\n const rowIndex =\n typeof rowIndexFromArgs === 'number' ? rowIndexFromArgs : state[path]?.rows?.length || 0\n\n const withNewRow = [...(state[path]?.rows || [])]\n\n const newRow: Row = {\n id: (subFieldState?.id?.value as string) || new ObjectId().toHexString(),\n isLoading: true,\n }\n\n if (blockType) {\n newRow.blockType = blockType\n }\n\n withNewRow.splice(rowIndex, 0, newRow)\n\n if (blockType) {\n subFieldState.blockType = {\n initialValue: blockType,\n valid: true,\n value: blockType,\n }\n }\n\n // add new row to array _field state_\n const { remainingFields, rows: siblingRows } = separateRows(path, state)\n\n siblingRows.splice(rowIndex, 0, subFieldState)\n\n const newState: FormState = {\n ...remainingFields,\n ...flattenRows(path, siblingRows),\n [`${path}.${rowIndex}.id`]: {\n initialValue: newRow.id,\n passesCondition: true,\n valid: true,\n value: newRow.id,\n },\n [path]: {\n ...state[path],\n disableFormData: true,\n rows: withNewRow,\n value: siblingRows.length,\n },\n }\n\n return newState\n }\n\n case 'ADD_SERVER_ERRORS': {\n let newState = { ...state }\n\n const errorPaths: { fieldErrorPath: string; parentPath: string }[] = []\n\n action.errors.forEach(({ message, path: fieldPath }) => {\n newState[fieldPath] = {\n ...(newState[fieldPath] || {\n initialValue: null,\n value: null,\n }),\n errorMessage: message,\n valid: false,\n }\n\n const segments = fieldPath.split('.')\n if (segments.length > 1) {\n errorPaths.push({\n fieldErrorPath: fieldPath,\n parentPath: segments.slice(0, segments.length - 1).join('.'),\n })\n }\n })\n\n newState = Object.entries(newState).reduce((acc, [path, fieldState]) => {\n const fieldErrorPaths = errorPaths.reduce((errorACC, { fieldErrorPath, parentPath }) => {\n if (parentPath.startsWith(path)) {\n errorACC.push(fieldErrorPath)\n }\n return errorACC\n }, [])\n\n let changed = false\n\n if (fieldErrorPaths.length > 0) {\n const newErrorPaths = Array.isArray(fieldState.errorPaths) ? fieldState.errorPaths : []\n\n fieldErrorPaths.forEach((fieldErrorPath) => {\n if (!newErrorPaths.includes(fieldErrorPath)) {\n newErrorPaths.push(fieldErrorPath)\n changed = true\n }\n })\n\n if (changed) {\n acc[path] = {\n ...fieldState,\n errorPaths: newErrorPaths,\n }\n }\n }\n\n if (!changed) {\n acc[path] = fieldState\n }\n\n return acc\n }, {})\n\n return newState\n }\n\n /**\n * Duplicates a row in an array or blocks field.\n * It needs to manipulate two distinct parts of the form state:\n * - The `rows` property of the parent field, e.g. `array.rows`, `blocks.rows`, etc.\n * - The row's state, e.g. `array.0.id`, `array.0.text`, etc.\n */\n case 'DUPLICATE_ROW': {\n const { path, rowIndex } = action\n const { remainingFields, rows } = separateRows(path, state)\n\n // 1. Duplicate the `rows` property of the parent field, e.g. `array.rows`, `blocks.rows`, etc.\n const newRows = [...(state[path].rows || [])]\n\n const newRow = deepCopyObjectSimpleWithoutReactComponents(newRows[rowIndex])\n\n const newRowID = new ObjectId().toHexString()\n\n if (newRow.id) {\n newRow.id = newRowID\n }\n\n if (newRows[rowIndex]?.customComponents?.RowLabel) {\n newRow.customComponents = {\n RowLabel: newRows[rowIndex].customComponents.RowLabel,\n }\n }\n\n // 2. Duplicate the row's state, e.g. `array.0.id`, `array.0.text`, etc.\n const newRowState = deepCopyObjectSimpleWithoutReactComponents(rows[rowIndex])\n\n // Ensure that `id` in form state exactly matches the row id on the parent field\n if (newRowState.id) {\n newRowState.id.value = newRowID\n newRowState.id.initialValue = newRowID\n }\n\n // Generate new ids for all nested id fields, e.g. `array.0.nestedArray.0.id`\n for (const key of Object.keys(newRowState).filter((key) => key.endsWith('.id'))) {\n const idState = newRowState[key]\n\n const newNestedFieldID = new ObjectId().toHexString()\n\n if (idState && typeof idState.value === 'string' && ObjectId.isValid(idState.value)) {\n newRowState[key].value = newNestedFieldID\n newRowState[key].initialValue = newNestedFieldID\n\n // Apply the ID to its corresponding parent field's rows, e.g. `array.0.nestedArray.rows[0].id`\n const segments = key.split('.')\n const rowIndex = parseInt(segments[segments.length - 2], 10)\n const parentFieldPath = segments.slice(0, segments.length - 2).join('.')\n const parentFieldRows = newRowState?.[parentFieldPath]?.rows\n\n if (newRowState[parentFieldPath] && Array.isArray(parentFieldRows)) {\n if (!parentFieldRows[rowIndex]) {\n parentFieldRows[rowIndex] = {\n id: newNestedFieldID,\n }\n } else {\n parentFieldRows[rowIndex].id = newNestedFieldID\n }\n }\n }\n }\n\n // If there are subfields\n if (Object.keys(newRowState).length > 0) {\n // Add new object containing subfield names to unflattenedRows array\n rows.splice(rowIndex + 1, 0, newRowState)\n newRows.splice(rowIndex + 1, 0, newRow)\n }\n\n const newState = {\n ...remainingFields,\n ...flattenRows(path, rows),\n [path]: {\n ...state[path],\n disableFormData: true,\n rows: newRows,\n value: rows.length,\n },\n }\n\n return newState\n }\n\n case 'MERGE_SERVER_STATE': {\n const { acceptValues, prevStateRef, serverState } = action\n\n const newState = mergeServerFormState({\n acceptValues,\n currentState: state || {},\n incomingState: serverState,\n })\n\n prevStateRef.current = newState\n\n return newState\n }\n\n case 'MOVE_ROW': {\n const { moveFromIndex, moveToIndex, path } = action\n\n // Handle moving rows on the top-level, i.e. `array.0.text` -> `array.1.text`\n const { remainingFields, rows: topLevelRows } = separateRows(path, state)\n const copyOfMovingRow = topLevelRows[moveFromIndex]\n topLevelRows.splice(moveFromIndex, 1)\n topLevelRows.splice(moveToIndex, 0, copyOfMovingRow)\n\n // modify array/block internal row state (i.e. collapsed, blockType)\n const rowsWithinField = [...(state[path]?.rows || [])]\n const copyOfMovingRow2 = { ...rowsWithinField[moveFromIndex] }\n rowsWithinField.splice(moveFromIndex, 1)\n rowsWithinField.splice(moveToIndex, 0, copyOfMovingRow2)\n\n const newState = {\n ...remainingFields,\n ...flattenRows(path, topLevelRows),\n [path]: {\n ...state[path],\n rows: rowsWithinField,\n },\n }\n\n return newState\n }\n\n case 'REMOVE': {\n const newState = { ...state }\n if (newState[action.path]) {\n delete newState[action.path]\n }\n return newState\n }\n\n case 'REMOVE_ROW': {\n const { path, rowIndex } = action\n const { remainingFields, rows } = separateRows(path, state)\n const rowsMetadata = [...(state[path]?.rows || [])]\n\n rows.splice(rowIndex, 1)\n rowsMetadata.splice(rowIndex, 1)\n\n const newState: FormState = {\n ...remainingFields,\n [path]: {\n ...state[path],\n disableFormData: rows.length > 0,\n rows: rowsMetadata,\n value: rows.length,\n },\n ...flattenRows(path, rows),\n }\n\n return newState\n }\n\n case 'REPLACE_ROW': {\n const { blockType, path, rowIndex: rowIndexArg, subFieldState = {} } = action\n\n const { remainingFields, rows: siblingRows } = separateRows(path, state)\n const rowIndex = Math.max(0, Math.min(rowIndexArg, siblingRows?.length - 1 || 0))\n\n const rowsMetadata = [...(state[path]?.rows || [])]\n rowsMetadata[rowIndex] = {\n id: new ObjectId().toHexString(),\n blockType: blockType || undefined,\n collapsed: false,\n }\n\n if (blockType) {\n subFieldState.blockType = {\n initialValue: blockType,\n valid: true,\n value: blockType,\n }\n }\n\n // replace form _field state_\n siblingRows[rowIndex] = subFieldState\n\n const newState: FormState = {\n ...remainingFields,\n ...flattenRows(path, siblingRows),\n [path]: {\n ...state[path],\n disableFormData: true,\n rows: rowsMetadata,\n value: siblingRows.length,\n },\n }\n\n return newState\n }\n\n case 'REPLACE_STATE': {\n if (action.optimize !== false) {\n // Only update fields that have changed\n // by comparing old value / initialValue to new\n // ..\n // This is a performance enhancement for saving\n // large documents with hundreds of fields\n const newState: FormState = {}\n\n for (const [path, newField] of Object.entries(action.state)) {\n const oldField = state[path]\n\n if (newField.valid !== false) {\n newField.valid = true\n }\n if (newField.passesCondition !== false) {\n newField.passesCondition = true\n }\n\n if (!dequal(oldField, newField)) {\n newState[path] = newField\n } else if (oldField) {\n newState[path] = oldField\n }\n }\n\n return newState\n }\n\n // TODO: Remove this in 4.0 - this is a temporary fix to prevent a breaking change\n if (action.sanitize) {\n for (const field of Object.values(action.state)) {\n if (field.valid !== false) {\n field.valid = true\n }\n if (field.passesCondition !== false) {\n field.passesCondition = true\n }\n }\n }\n // If we're not optimizing, just set the state to the new state\n return action.state\n }\n\n case 'SET_ALL_ROWS_COLLAPSED': {\n const { path, updatedRows } = action\n\n return {\n ...state,\n [path]: {\n ...state[path],\n rows: updatedRows,\n },\n }\n }\n\n case 'SET_ROW_COLLAPSED': {\n const { path, updatedRows } = action\n\n const newState = {\n ...state,\n [path]: {\n ...state[path],\n rows: updatedRows,\n },\n }\n\n return newState\n }\n\n case 'UPDATE': {\n const newField = Object.entries(action).reduce(\n (field, [key, value]) => {\n if (\n [\n 'disableFormData',\n 'errorMessage',\n 'initialValue',\n 'rows',\n 'valid',\n 'validate',\n 'value',\n ].includes(key)\n ) {\n return {\n ...field,\n [key]: value,\n ...(key === 'value' ? { isModified: true } : {}),\n }\n }\n\n return field\n },\n state?.[action.path] || ({} as FormField),\n )\n\n const newState = {\n ...state,\n [action.path]: newField,\n }\n\n // reset `isModified` in all other fields\n // Use destructuring instead of delete to avoid mutating field objects\n // shared with the previous state (shallow copy shares references)\n if ('value' in action) {\n for (const [path, field] of Object.entries(newState)) {\n if (path !== action.path && 'isModified' in field) {\n const { isModified: _, ...fieldWithoutIsModified } = field\n newState[path] = fieldWithoutIsModified as typeof field\n }\n }\n }\n\n return newState\n }\n\n case 'UPDATE_MANY': {\n const newState = { ...state }\n\n Object.entries(action.formState).forEach(([path, field]) => {\n newState[path] = field\n })\n\n return newState\n }\n\n default: {\n return state\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"fieldReducer.js","names":["ObjectIdImport","dequal","deepCopyObjectSimpleWithoutReactComponents","mergeServerFormState","flattenRows","separateRows","ObjectId","default","fieldReducer","state","action","type","blockType","path","rowIndex","rowIndexFromArgs","subFieldState","rows","length","withNewRow","newRow","id","value","toHexString","isLoading","splice","initialValue","valid","remainingFields","siblingRows","newState","passesCondition","disableFormData","errorPaths","errors","forEach","message","fieldPath","errorMessage","segments","split","push","fieldErrorPath","parentPath","slice","join","Object","entries","reduce","acc","fieldState","fieldErrorPaths","errorACC","startsWith","changed","newErrorPaths","Array","isArray","includes","newRows","newRowID","customComponents","RowLabel","newRowState","key","keys","filter","endsWith","idState","newNestedFieldID","isValid","parseInt","parentFieldPath","parentFieldRows","acceptValues","prevStateRef","serverState","currentState","incomingState","current","moveFromIndex","moveToIndex","topLevelRows","copyOfMovingRow","rowsWithinField","copyOfMovingRow2","rowsMetadata","rowIndexArg","Math","max","min","undefined","collapsed","optimize","newField","oldField","sanitize","field","values","updatedRows","isModified","_","fieldWithoutIsModified","formState"],"sources":["../../../src/forms/Form/fieldReducer.ts"],"sourcesContent":["'use client'\nimport type { FormField, FormState, Row } from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared'\n\nimport type { FieldAction } from './types.js'\n\nimport { mergeServerFormState } from './mergeServerFormState.js'\nimport { flattenRows, separateRows } from './rows.js'\n\nconst ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n\n/**\n * Reducer which modifies the form field state (all the current data of the fields in the form). When called using dispatch, it will return a new state object.\n */\nexport function fieldReducer(state: FormState, action: FieldAction): FormState {\n switch (action.type) {\n case 'ADD_ROW': {\n const { blockType, path, rowIndex: rowIndexFromArgs, subFieldState = {} } = action\n\n const rowIndex =\n typeof rowIndexFromArgs === 'number' ? rowIndexFromArgs : state[path]?.rows?.length || 0\n\n const withNewRow = [...(state[path]?.rows || [])]\n\n const newRow: Row = {\n id: (subFieldState?.id?.value as string) || new ObjectId().toHexString(),\n isLoading: true,\n }\n\n if (blockType) {\n newRow.blockType = blockType\n }\n\n withNewRow.splice(rowIndex, 0, newRow)\n\n if (blockType) {\n subFieldState.blockType = {\n initialValue: blockType,\n valid: true,\n value: blockType,\n }\n }\n\n // add new row to array _field state_\n const { remainingFields, rows: siblingRows } = separateRows(path, state)\n\n siblingRows.splice(rowIndex, 0, subFieldState)\n\n const newState: FormState = {\n ...remainingFields,\n ...flattenRows(path, siblingRows),\n [`${path}.${rowIndex}.id`]: {\n initialValue: newRow.id,\n passesCondition: true,\n valid: true,\n value: newRow.id,\n },\n [path]: {\n ...state[path],\n disableFormData: true,\n rows: withNewRow,\n value: siblingRows.length,\n },\n }\n\n return newState\n }\n\n case 'ADD_SERVER_ERRORS': {\n let newState = { ...state }\n\n const errorPaths: { fieldErrorPath: string; parentPath: string }[] = []\n\n action.errors.forEach(({ message, path: fieldPath }) => {\n newState[fieldPath] = {\n ...(newState[fieldPath] || {\n initialValue: null,\n value: null,\n }),\n errorMessage: message,\n valid: false,\n }\n\n const segments = fieldPath.split('.')\n if (segments.length > 1) {\n errorPaths.push({\n fieldErrorPath: fieldPath,\n parentPath: segments.slice(0, segments.length - 1).join('.'),\n })\n }\n })\n\n newState = Object.entries(newState).reduce((acc, [path, fieldState]) => {\n const fieldErrorPaths = errorPaths.reduce((errorACC, { fieldErrorPath, parentPath }) => {\n if (parentPath.startsWith(path)) {\n errorACC.push(fieldErrorPath)\n }\n return errorACC\n }, [])\n\n let changed = false\n\n if (fieldErrorPaths.length > 0) {\n const newErrorPaths = Array.isArray(fieldState.errorPaths) ? fieldState.errorPaths : []\n\n fieldErrorPaths.forEach((fieldErrorPath) => {\n if (!newErrorPaths.includes(fieldErrorPath)) {\n newErrorPaths.push(fieldErrorPath)\n changed = true\n }\n })\n\n if (changed) {\n acc[path] = {\n ...fieldState,\n errorPaths: newErrorPaths,\n }\n }\n }\n\n if (!changed) {\n acc[path] = fieldState\n }\n\n return acc\n }, {})\n\n return newState\n }\n\n /**\n * Duplicates a row in an array or blocks field.\n * It needs to manipulate two distinct parts of the form state:\n * - The `rows` property of the parent field, e.g. `array.rows`, `blocks.rows`, etc.\n * - The row's state, e.g. `array.0.id`, `array.0.text`, etc.\n */\n case 'DUPLICATE_ROW': {\n const { path, rowIndex } = action\n const { remainingFields, rows } = separateRows(path, state)\n\n // 1. Duplicate the `rows` property of the parent field, e.g. `array.rows`, `blocks.rows`, etc.\n const newRows = [...(state[path].rows || [])]\n\n const newRow = deepCopyObjectSimpleWithoutReactComponents(newRows[rowIndex])\n\n const newRowID = new ObjectId().toHexString()\n\n if (newRow.id) {\n newRow.id = newRowID\n }\n\n if (newRows[rowIndex]?.customComponents?.RowLabel) {\n newRow.customComponents = {\n RowLabel: newRows[rowIndex].customComponents.RowLabel,\n }\n }\n\n // 2. Duplicate the row's state, e.g. `array.0.id`, `array.0.text`, etc.\n const newRowState = deepCopyObjectSimpleWithoutReactComponents(rows[rowIndex])\n\n // Ensure that `id` in form state exactly matches the row id on the parent field\n if (newRowState.id) {\n newRowState.id.value = newRowID\n newRowState.id.initialValue = newRowID\n }\n\n // Generate new ids for all nested id fields, e.g. `array.0.nestedArray.0.id`\n for (const key of Object.keys(newRowState).filter((key) => key.endsWith('.id'))) {\n const idState = newRowState[key]\n\n const newNestedFieldID = new ObjectId().toHexString()\n\n if (idState && typeof idState.value === 'string' && ObjectId.isValid(idState.value)) {\n newRowState[key].value = newNestedFieldID\n newRowState[key].initialValue = newNestedFieldID\n\n // Apply the ID to its corresponding parent field's rows, e.g. `array.0.nestedArray.rows[0].id`\n const segments = key.split('.')\n const rowIndex = parseInt(segments[segments.length - 2], 10)\n const parentFieldPath = segments.slice(0, segments.length - 2).join('.')\n const parentFieldRows = newRowState?.[parentFieldPath]?.rows\n\n if (newRowState[parentFieldPath] && Array.isArray(parentFieldRows)) {\n if (!parentFieldRows[rowIndex]) {\n parentFieldRows[rowIndex] = {\n id: newNestedFieldID,\n }\n } else {\n parentFieldRows[rowIndex].id = newNestedFieldID\n }\n }\n }\n }\n\n // If there are subfields\n if (Object.keys(newRowState).length > 0) {\n // Add new object containing subfield names to unflattenedRows array\n rows.splice(rowIndex + 1, 0, newRowState)\n newRows.splice(rowIndex + 1, 0, newRow)\n }\n\n const newState = {\n ...remainingFields,\n ...flattenRows(path, rows),\n [path]: {\n ...state[path],\n disableFormData: true,\n rows: newRows,\n value: rows.length,\n },\n }\n\n return newState\n }\n\n case 'MERGE_SERVER_STATE': {\n const { acceptValues, prevStateRef, serverState } = action\n\n const newState = mergeServerFormState({\n acceptValues,\n currentState: state || {},\n incomingState: serverState,\n })\n\n if (prevStateRef) {\n prevStateRef.current = newState\n }\n\n return newState\n }\n\n case 'MOVE_ROW': {\n const { moveFromIndex, moveToIndex, path } = action\n\n // Handle moving rows on the top-level, i.e. `array.0.text` -> `array.1.text`\n const { remainingFields, rows: topLevelRows } = separateRows(path, state)\n const copyOfMovingRow = topLevelRows[moveFromIndex]\n topLevelRows.splice(moveFromIndex, 1)\n topLevelRows.splice(moveToIndex, 0, copyOfMovingRow)\n\n // modify array/block internal row state (i.e. collapsed, blockType)\n const rowsWithinField = [...(state[path]?.rows || [])]\n const copyOfMovingRow2 = { ...rowsWithinField[moveFromIndex] }\n rowsWithinField.splice(moveFromIndex, 1)\n rowsWithinField.splice(moveToIndex, 0, copyOfMovingRow2)\n\n const newState = {\n ...remainingFields,\n ...flattenRows(path, topLevelRows),\n [path]: {\n ...state[path],\n rows: rowsWithinField,\n },\n }\n\n return newState\n }\n\n case 'REMOVE': {\n const newState = { ...state }\n if (newState[action.path]) {\n delete newState[action.path]\n }\n return newState\n }\n\n case 'REMOVE_ROW': {\n const { path, rowIndex } = action\n const { remainingFields, rows } = separateRows(path, state)\n const rowsMetadata = [...(state[path]?.rows || [])]\n\n rows.splice(rowIndex, 1)\n rowsMetadata.splice(rowIndex, 1)\n\n const newState: FormState = {\n ...remainingFields,\n [path]: {\n ...state[path],\n disableFormData: rows.length > 0,\n rows: rowsMetadata,\n value: rows.length,\n },\n ...flattenRows(path, rows),\n }\n\n return newState\n }\n\n case 'REPLACE_ROW': {\n const { blockType, path, rowIndex: rowIndexArg, subFieldState = {} } = action\n\n const { remainingFields, rows: siblingRows } = separateRows(path, state)\n const rowIndex = Math.max(0, Math.min(rowIndexArg, siblingRows?.length - 1 || 0))\n\n const rowsMetadata = [...(state[path]?.rows || [])]\n rowsMetadata[rowIndex] = {\n id: new ObjectId().toHexString(),\n blockType: blockType || undefined,\n collapsed: false,\n }\n\n if (blockType) {\n subFieldState.blockType = {\n initialValue: blockType,\n valid: true,\n value: blockType,\n }\n }\n\n // replace form _field state_\n siblingRows[rowIndex] = subFieldState\n\n const newState: FormState = {\n ...remainingFields,\n ...flattenRows(path, siblingRows),\n [path]: {\n ...state[path],\n disableFormData: true,\n rows: rowsMetadata,\n value: siblingRows.length,\n },\n }\n\n return newState\n }\n\n case 'REPLACE_STATE': {\n if (action.optimize !== false) {\n // Only update fields that have changed\n // by comparing old value / initialValue to new\n // ..\n // This is a performance enhancement for saving\n // large documents with hundreds of fields\n const newState: FormState = {}\n\n for (const [path, newField] of Object.entries(action.state)) {\n const oldField = state[path]\n\n if (newField.valid !== false) {\n newField.valid = true\n }\n if (newField.passesCondition !== false) {\n newField.passesCondition = true\n }\n\n if (!dequal(oldField, newField)) {\n newState[path] = newField\n } else if (oldField) {\n newState[path] = oldField\n }\n }\n\n return newState\n }\n\n // TODO: Remove this in 4.0 - this is a temporary fix to prevent a breaking change\n if (action.sanitize) {\n for (const field of Object.values(action.state)) {\n if (field.valid !== false) {\n field.valid = true\n }\n if (field.passesCondition !== false) {\n field.passesCondition = true\n }\n }\n }\n // If we're not optimizing, just set the state to the new state\n return action.state\n }\n\n case 'SET_ALL_ROWS_COLLAPSED': {\n const { path, updatedRows } = action\n\n return {\n ...state,\n [path]: {\n ...state[path],\n rows: updatedRows,\n },\n }\n }\n\n case 'SET_ROW_COLLAPSED': {\n const { path, updatedRows } = action\n\n const newState = {\n ...state,\n [path]: {\n ...state[path],\n rows: updatedRows,\n },\n }\n\n return newState\n }\n\n case 'UPDATE': {\n const newField = Object.entries(action).reduce(\n (field, [key, value]) => {\n if (\n [\n 'disableFormData',\n 'errorMessage',\n 'initialValue',\n 'rows',\n 'valid',\n 'validate',\n 'value',\n ].includes(key)\n ) {\n return {\n ...field,\n [key]: value,\n ...(key === 'value' ? { isModified: true } : {}),\n }\n }\n\n return field\n },\n state?.[action.path] || ({} as FormField),\n )\n\n const newState = {\n ...state,\n [action.path]: newField,\n }\n\n // reset `isModified` in all other fields\n // Use destructuring instead of delete to avoid mutating field objects\n // shared with the previous state (shallow copy shares references)\n if ('value' in action) {\n for (const [path, field] of Object.entries(newState)) {\n if (path !== action.path && 'isModified' in field) {\n const { isModified: _, ...fieldWithoutIsModified } = field\n newState[path] = fieldWithoutIsModified as typeof field\n }\n }\n }\n\n return newState\n }\n\n case 'UPDATE_MANY': {\n const newState = { ...state }\n\n Object.entries(action.formState).forEach(([path, field]) => {\n newState[path] = field\n })\n\n return newState\n }\n\n default: {\n return state\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,YAAY,CAAA;AAqCnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA+1BpC,CAAA;AAED,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,YAAY,CAAA;AAsCnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA41BpC,CAAA;AAED,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -14,6 +14,7 @@ import { useThrottledEffect } from '../../hooks/useThrottledEffect.js';
14
14
  import { useAuth } from '../../providers/Auth/index.js';
15
15
  import { useConfig } from '../../providers/Config/index.js';
16
16
  import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
17
+ import { useFormErrorHandler } from '../../providers/FormErrorHandler/index.js';
17
18
  import { useLocale } from '../../providers/Locale/index.js';
18
19
  import { useOperation } from '../../providers/Operation/index.js';
19
20
  import { useRouter } from '../../providers/RouterAdapter/index.js';
@@ -63,9 +64,8 @@ export const Form = props => {
63
64
  const method = 'method' in props ? props?.method : undefined;
64
65
  const router = useRouter();
65
66
  const documentForm = useDocumentForm();
66
- const {
67
- code: locale
68
- } = useLocale();
67
+ const currentLocale = useLocale();
68
+ const locale = currentLocale?.code;
69
69
  const {
70
70
  i18n,
71
71
  t
@@ -74,6 +74,7 @@ export const Form = props => {
74
74
  refreshCookie,
75
75
  user
76
76
  } = useAuth();
77
+ const onNonFieldError = useFormErrorHandler();
77
78
  const operation = useOperation();
78
79
  const {
79
80
  queueTask
@@ -409,6 +410,12 @@ export const Form = props => {
409
410
  errors: fieldErrors
410
411
  });
411
412
  nonFieldErrors.forEach(err_1 => {
413
+ // Pass overridesFromArgs (not the computed overrides) so a retry re-evaluates any function overrides against current fields.
414
+ if (onNonFieldError?.(err_1, () => void submit({
415
+ overrides: overridesFromArgs
416
+ }))) {
417
+ return;
418
+ }
412
419
  errorToast(/*#__PURE__*/_jsx(FieldErrorsToast, {
413
420
  errorMessage: err_1.message || t('error:unknown')
414
421
  }));
@@ -429,7 +436,7 @@ export const Form = props => {
429
436
  setDisabled(false);
430
437
  errorToast(err.message);
431
438
  }
432
- }, [beforeSubmit, startRouteTransition, action, disableSuccessStatus, disableValidationOnSubmit, disabled, dispatchFields, handleResponse, method, onSubmit, onSuccess, redirect, router, t, i18n, validateDrafts, waitForAutocomplete, setModified, setSubmitted]);
439
+ }, [beforeSubmit, startRouteTransition, action, disableSuccessStatus, disableValidationOnSubmit, disabled, dispatchFields, handleResponse, method, onSubmit, onSuccess, redirect, router, t, i18n, validateDrafts, waitForAutocomplete, setModified, setSubmitted, onNonFieldError]);
433
440
  const getFields = useCallback(() => contextRef.current.fields, []);
434
441
  const getField = useCallback(path_0 => contextRef.current.fields[path_0], []);
435
442
  const getData = useCallback(() => reduceFieldsToValues(contextRef.current.fields, true), []);
@@ -447,21 +454,10 @@ export const Form = props => {
447
454
  collectionSlug
448
455
  });
449
456
  if (typeof handler === 'function') {
450
- let filename = file.name;
451
- const clientUploadContext = await handler({
457
+ file = JSON.stringify(await handler({
452
458
  docPrefix: typeof data_5?.prefix === 'string' ? data_5.prefix : undefined,
453
- file,
454
- updateFilename: value_0 => {
455
- filename = value_0;
456
- }
457
- });
458
- file = JSON.stringify({
459
- clientUploadContext,
460
- collectionSlug,
461
- filename,
462
- mimeType: file.type,
463
- size: file.size
464
- });
459
+ file
460
+ }));
465
461
  }
466
462
  }
467
463
  if (mergeOverrideData) {