@payloadcms/ui 3.0.0-alpha.49 → 3.0.0-alpha.50

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 (442) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js +2 -43
  3. package/dist/elements/Autosave/index.js.map +1 -1
  4. package/dist/elements/ColumnSelector/index.d.ts.map +1 -1
  5. package/dist/elements/ColumnSelector/index.js +2 -5
  6. package/dist/elements/ColumnSelector/index.js.map +1 -1
  7. package/dist/elements/DeleteDocument/index.js +2 -2
  8. package/dist/elements/DeleteDocument/index.js.map +1 -1
  9. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  10. package/dist/elements/DocumentControls/index.js +13 -4
  11. package/dist/elements/DocumentControls/index.js.map +1 -1
  12. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  13. package/dist/elements/DocumentDrawer/DrawerContent.js +31 -112
  14. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  15. package/dist/elements/DocumentDrawer/types.d.ts +0 -2
  16. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  17. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  18. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.d.ts +1 -0
  19. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.d.ts.map +1 -1
  20. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +8 -2
  21. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -1
  22. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
  23. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +1 -0
  24. package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
  25. package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
  26. package/dist/elements/DocumentHeader/Tabs/index.js +4 -0
  27. package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
  28. package/dist/elements/EditMany/index.d.ts.map +1 -1
  29. package/dist/elements/EditMany/index.js +3 -25
  30. package/dist/elements/EditMany/index.js.map +1 -1
  31. package/dist/elements/FieldSelect/index.d.ts.map +1 -1
  32. package/dist/elements/FieldSelect/index.js +39 -12
  33. package/dist/elements/FieldSelect/index.js.map +1 -1
  34. package/dist/elements/FileDetails/index.d.ts.map +1 -1
  35. package/dist/elements/FileDetails/index.js +2 -1
  36. package/dist/elements/FileDetails/index.js.map +1 -1
  37. package/dist/elements/ListControls/index.d.ts +0 -1
  38. package/dist/elements/ListControls/index.d.ts.map +1 -1
  39. package/dist/elements/ListControls/index.js +7 -6
  40. package/dist/elements/ListControls/index.js.map +1 -1
  41. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  42. package/dist/elements/ListDrawer/DrawerContent.js +5 -9
  43. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  44. package/dist/elements/Nav/index.client.d.ts +3 -0
  45. package/dist/elements/Nav/index.client.d.ts.map +1 -0
  46. package/dist/elements/Nav/index.client.js +77 -0
  47. package/dist/elements/Nav/index.client.js.map +1 -0
  48. package/dist/elements/Nav/index.d.ts +3 -7
  49. package/dist/elements/Nav/index.d.ts.map +1 -1
  50. package/dist/elements/Nav/index.js +4 -66
  51. package/dist/elements/Nav/index.js.map +1 -1
  52. package/dist/elements/PerPage/index.d.ts +1 -0
  53. package/dist/elements/PerPage/index.d.ts.map +1 -1
  54. package/dist/elements/PerPage/index.js +6 -4
  55. package/dist/elements/PerPage/index.js.map +1 -1
  56. package/dist/elements/PreviewButton/index.d.ts +4 -6
  57. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  58. package/dist/elements/PreviewButton/index.js +11 -65
  59. package/dist/elements/PreviewButton/index.js.map +1 -1
  60. package/dist/elements/PreviewButton/usePreviewURL.d.ts +9 -0
  61. package/dist/elements/PreviewButton/usePreviewURL.d.ts.map +1 -0
  62. package/dist/elements/PreviewButton/usePreviewURL.js +57 -0
  63. package/dist/elements/PreviewButton/usePreviewURL.js.map +1 -0
  64. package/dist/elements/Publish/index.d.ts +4 -2
  65. package/dist/elements/Publish/index.d.ts.map +1 -1
  66. package/dist/elements/Publish/index.js +15 -25
  67. package/dist/elements/Publish/index.js.map +1 -1
  68. package/dist/elements/ReactSelect/MultiValue/index.d.ts.map +1 -1
  69. package/dist/elements/ReactSelect/MultiValue/index.js +2 -1
  70. package/dist/elements/ReactSelect/MultiValue/index.js.map +1 -1
  71. package/dist/elements/ReactSelect/ValueContainer/index.scss +4 -0
  72. package/dist/elements/ReactSelect/index.d.ts.map +1 -1
  73. package/dist/elements/ReactSelect/index.js +4 -1
  74. package/dist/elements/ReactSelect/index.js.map +1 -1
  75. package/dist/elements/ReactSelect/types.d.ts +2 -0
  76. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  77. package/dist/elements/ReactSelect/types.js.map +1 -1
  78. package/dist/elements/Save/index.d.ts +4 -2
  79. package/dist/elements/Save/index.d.ts.map +1 -1
  80. package/dist/elements/Save/index.js +7 -14
  81. package/dist/elements/Save/index.js.map +1 -1
  82. package/dist/elements/SaveDraft/index.d.ts +1 -2
  83. package/dist/elements/SaveDraft/index.d.ts.map +1 -1
  84. package/dist/elements/SaveDraft/index.js +33 -42
  85. package/dist/elements/SaveDraft/index.js.map +1 -1
  86. package/dist/elements/SortColumn/index.d.ts +3 -1
  87. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  88. package/dist/elements/SortColumn/index.js +5 -6
  89. package/dist/elements/SortColumn/index.js.map +1 -1
  90. package/dist/elements/Table/DefaultCell/fields/Array/index.d.ts +3 -3
  91. package/dist/elements/Table/DefaultCell/fields/Array/index.d.ts.map +1 -1
  92. package/dist/elements/Table/DefaultCell/fields/Array/index.js.map +1 -1
  93. package/dist/elements/Table/DefaultCell/fields/Blocks/index.d.ts +4 -4
  94. package/dist/elements/Table/DefaultCell/fields/Blocks/index.d.ts.map +1 -1
  95. package/dist/elements/Table/DefaultCell/fields/Blocks/index.js.map +1 -1
  96. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.d.ts +2 -2
  97. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.d.ts.map +1 -1
  98. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js.map +1 -1
  99. package/dist/elements/Table/DefaultCell/fields/Code/index.d.ts +2 -2
  100. package/dist/elements/Table/DefaultCell/fields/Code/index.d.ts.map +1 -1
  101. package/dist/elements/Table/DefaultCell/fields/Code/index.js.map +1 -1
  102. package/dist/elements/Table/DefaultCell/fields/Date/index.d.ts +2 -5
  103. package/dist/elements/Table/DefaultCell/fields/Date/index.d.ts.map +1 -1
  104. package/dist/elements/Table/DefaultCell/fields/Date/index.js.map +1 -1
  105. package/dist/elements/Table/DefaultCell/fields/File/index.d.ts +2 -2
  106. package/dist/elements/Table/DefaultCell/fields/File/index.d.ts.map +1 -1
  107. package/dist/elements/Table/DefaultCell/fields/File/index.js +4 -3
  108. package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
  109. package/dist/elements/Table/DefaultCell/fields/JSON/index.d.ts +2 -2
  110. package/dist/elements/Table/DefaultCell/fields/JSON/index.d.ts.map +1 -1
  111. package/dist/elements/Table/DefaultCell/fields/JSON/index.js.map +1 -1
  112. package/dist/elements/Table/DefaultCell/fields/Relationship/index.d.ts +4 -4
  113. package/dist/elements/Table/DefaultCell/fields/Relationship/index.d.ts.map +1 -1
  114. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
  115. package/dist/elements/Table/DefaultCell/fields/Select/index.d.ts +3 -3
  116. package/dist/elements/Table/DefaultCell/fields/Select/index.d.ts.map +1 -1
  117. package/dist/elements/Table/DefaultCell/fields/Select/index.js.map +1 -1
  118. package/dist/elements/Table/DefaultCell/fields/Textarea/index.d.ts +2 -2
  119. package/dist/elements/Table/DefaultCell/fields/Textarea/index.d.ts.map +1 -1
  120. package/dist/elements/Table/DefaultCell/fields/Textarea/index.js.map +1 -1
  121. package/dist/elements/Table/DefaultCell/fields/index.d.ts +4 -4
  122. package/dist/elements/Table/DefaultCell/index.d.ts +2 -2
  123. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  124. package/dist/elements/Table/DefaultCell/index.js +4 -2
  125. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  126. package/dist/elements/Table/TableCellProvider/index.d.ts +11 -11
  127. package/dist/elements/Table/TableCellProvider/index.d.ts.map +1 -1
  128. package/dist/elements/Table/TableCellProvider/index.js.map +1 -1
  129. package/dist/elements/Table/index.d.ts +8 -4
  130. package/dist/elements/Table/index.d.ts.map +1 -1
  131. package/dist/elements/Table/index.js +1 -0
  132. package/dist/elements/Table/index.js.map +1 -1
  133. package/dist/elements/TableColumns/{buildColumns.d.ts → buildColumnState.d.ts} +8 -6
  134. package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -0
  135. package/dist/elements/TableColumns/{buildColumns.js → buildColumnState.js} +37 -13
  136. package/dist/elements/TableColumns/buildColumnState.js.map +1 -0
  137. package/dist/elements/TableColumns/filterFields.d.ts +3 -0
  138. package/dist/elements/TableColumns/filterFields.d.ts.map +1 -0
  139. package/dist/elements/TableColumns/filterFields.js +27 -0
  140. package/dist/elements/TableColumns/filterFields.js.map +1 -0
  141. package/dist/elements/TableColumns/getInitialColumns.d.ts +5 -0
  142. package/dist/elements/TableColumns/getInitialColumns.d.ts.map +1 -0
  143. package/dist/elements/TableColumns/getInitialColumns.js +48 -0
  144. package/dist/elements/TableColumns/getInitialColumns.js.map +1 -0
  145. package/dist/elements/TableColumns/index.d.ts +2 -2
  146. package/dist/elements/TableColumns/index.d.ts.map +1 -1
  147. package/dist/elements/TableColumns/index.js +11 -7
  148. package/dist/elements/TableColumns/index.js.map +1 -1
  149. package/dist/elements/Thumbnail/index.d.ts +6 -0
  150. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  151. package/dist/elements/Thumbnail/index.js +32 -16
  152. package/dist/elements/Thumbnail/index.js.map +1 -1
  153. package/dist/elements/ThumbnailCard/index.d.ts +1 -1
  154. package/dist/elements/ThumbnailCard/index.d.ts.map +1 -1
  155. package/dist/elements/ThumbnailCard/index.js +2 -6
  156. package/dist/elements/ThumbnailCard/index.js.map +1 -1
  157. package/dist/elements/Tooltip/index.scss +4 -4
  158. package/dist/elements/Translation/index.d.ts.map +1 -1
  159. package/dist/elements/Translation/index.js +12 -9
  160. package/dist/elements/Translation/index.js.map +1 -1
  161. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  162. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +11 -7
  163. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  164. package/dist/elements/WhereBuilder/Condition/index.d.ts +21 -4
  165. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  166. package/dist/elements/WhereBuilder/Condition/index.js +45 -61
  167. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  168. package/dist/elements/WhereBuilder/Condition/index.scss +6 -0
  169. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  170. package/dist/elements/WhereBuilder/index.js +134 -55
  171. package/dist/elements/WhereBuilder/index.js.map +1 -1
  172. package/dist/elements/WhereBuilder/reduceFieldMap.d.ts +3 -0
  173. package/dist/elements/WhereBuilder/reduceFieldMap.d.ts.map +1 -0
  174. package/dist/elements/WhereBuilder/reduceFieldMap.js +36 -0
  175. package/dist/elements/WhereBuilder/reduceFieldMap.js.map +1 -0
  176. package/dist/elements/withMergedProps/index.js +1 -1
  177. package/dist/elements/withMergedProps/index.js.map +1 -1
  178. package/dist/fields/Array/ArrayRow.d.ts +2 -0
  179. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  180. package/dist/fields/Array/ArrayRow.js +3 -3
  181. package/dist/fields/Array/ArrayRow.js.map +1 -1
  182. package/dist/fields/Array/index.d.ts +1 -1
  183. package/dist/fields/Array/index.d.ts.map +1 -1
  184. package/dist/fields/Array/index.js +23 -8
  185. package/dist/fields/Array/index.js.map +1 -1
  186. package/dist/fields/Blocks/BlockRow.d.ts +1 -0
  187. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  188. package/dist/fields/Blocks/BlockRow.js +2 -3
  189. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  190. package/dist/fields/Blocks/index.d.ts +0 -1
  191. package/dist/fields/Blocks/index.d.ts.map +1 -1
  192. package/dist/fields/Blocks/index.js +17 -5
  193. package/dist/fields/Blocks/index.js.map +1 -1
  194. package/dist/fields/Checkbox/Input.d.ts +2 -1
  195. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  196. package/dist/fields/Checkbox/Input.js +3 -1
  197. package/dist/fields/Checkbox/Input.js.map +1 -1
  198. package/dist/fields/Checkbox/index.d.ts.map +1 -1
  199. package/dist/fields/Checkbox/index.js +6 -2
  200. package/dist/fields/Checkbox/index.js.map +1 -1
  201. package/dist/fields/Code/index.d.ts.map +1 -1
  202. package/dist/fields/Code/index.js +8 -3
  203. package/dist/fields/Code/index.js.map +1 -1
  204. package/dist/fields/Collapsible/index.d.ts +2 -1
  205. package/dist/fields/Collapsible/index.d.ts.map +1 -1
  206. package/dist/fields/Collapsible/index.js +4 -3
  207. package/dist/fields/Collapsible/index.js.map +1 -1
  208. package/dist/fields/DateTime/index.d.ts.map +1 -1
  209. package/dist/fields/DateTime/index.js +7 -2
  210. package/dist/fields/DateTime/index.js.map +1 -1
  211. package/dist/fields/Email/index.d.ts.map +1 -1
  212. package/dist/fields/Email/index.js +7 -2
  213. package/dist/fields/Email/index.js.map +1 -1
  214. package/dist/fields/Group/index.d.ts +0 -1
  215. package/dist/fields/Group/index.d.ts.map +1 -1
  216. package/dist/fields/Group/index.js +9 -8
  217. package/dist/fields/Group/index.js.map +1 -1
  218. package/dist/fields/HiddenInput/index.d.ts +1 -0
  219. package/dist/fields/HiddenInput/index.d.ts.map +1 -1
  220. package/dist/fields/HiddenInput/index.js +4 -2
  221. package/dist/fields/HiddenInput/index.js.map +1 -1
  222. package/dist/fields/JSON/index.d.ts.map +1 -1
  223. package/dist/fields/JSON/index.js +8 -4
  224. package/dist/fields/JSON/index.js.map +1 -1
  225. package/dist/fields/Number/index.d.ts.map +1 -1
  226. package/dist/fields/Number/index.js +7 -2
  227. package/dist/fields/Number/index.js.map +1 -1
  228. package/dist/fields/Password/index.d.ts +0 -1
  229. package/dist/fields/Password/index.d.ts.map +1 -1
  230. package/dist/fields/Password/index.js +5 -2
  231. package/dist/fields/Password/index.js.map +1 -1
  232. package/dist/fields/Point/index.d.ts.map +1 -1
  233. package/dist/fields/Point/index.js +15 -10
  234. package/dist/fields/Point/index.js.map +1 -1
  235. package/dist/fields/RadioGroup/index.d.ts.map +1 -1
  236. package/dist/fields/RadioGroup/index.js +7 -2
  237. package/dist/fields/RadioGroup/index.js.map +1 -1
  238. package/dist/fields/Relationship/index.d.ts.map +1 -1
  239. package/dist/fields/Relationship/index.js +45 -14
  240. package/dist/fields/Relationship/index.js.map +1 -1
  241. package/dist/fields/Relationship/types.d.ts +3 -1
  242. package/dist/fields/Relationship/types.d.ts.map +1 -1
  243. package/dist/fields/Relationship/types.js.map +1 -1
  244. package/dist/fields/RichText/index.d.ts +2 -0
  245. package/dist/fields/RichText/index.d.ts.map +1 -1
  246. package/dist/fields/RichText/index.js.map +1 -1
  247. package/dist/fields/Row/index.d.ts.map +1 -1
  248. package/dist/fields/Row/index.js +2 -1
  249. package/dist/fields/Row/index.js.map +1 -1
  250. package/dist/fields/Select/index.d.ts +0 -1
  251. package/dist/fields/Select/index.d.ts.map +1 -1
  252. package/dist/fields/Select/index.js +8 -3
  253. package/dist/fields/Select/index.js.map +1 -1
  254. package/dist/fields/Tabs/index.d.ts +0 -1
  255. package/dist/fields/Tabs/index.d.ts.map +1 -1
  256. package/dist/fields/Tabs/index.js +2 -2
  257. package/dist/fields/Tabs/index.js.map +1 -1
  258. package/dist/fields/Text/Input.d.ts.map +1 -1
  259. package/dist/fields/Text/Input.js +4 -1
  260. package/dist/fields/Text/Input.js.map +1 -1
  261. package/dist/fields/Text/index.d.ts.map +1 -1
  262. package/dist/fields/Text/index.js +3 -1
  263. package/dist/fields/Text/index.js.map +1 -1
  264. package/dist/fields/Textarea/Input.d.ts.map +1 -1
  265. package/dist/fields/Textarea/Input.js +4 -1
  266. package/dist/fields/Textarea/Input.js.map +1 -1
  267. package/dist/fields/Textarea/index.d.ts.map +1 -1
  268. package/dist/fields/Textarea/index.js +3 -1
  269. package/dist/fields/Textarea/index.js.map +1 -1
  270. package/dist/fields/Upload/Input.d.ts.map +1 -1
  271. package/dist/fields/Upload/Input.js +10 -8
  272. package/dist/fields/Upload/Input.js.map +1 -1
  273. package/dist/fields/Upload/index.d.ts.map +1 -1
  274. package/dist/fields/Upload/index.js +6 -2
  275. package/dist/fields/Upload/index.js.map +1 -1
  276. package/dist/fields/shared/index.d.ts +1 -2
  277. package/dist/fields/shared/index.d.ts.map +1 -1
  278. package/dist/fields/shared/index.js.map +1 -1
  279. package/dist/forms/FieldDescription/index.d.ts +1 -2
  280. package/dist/forms/FieldDescription/index.d.ts.map +1 -1
  281. package/dist/forms/FieldDescription/index.js.map +1 -1
  282. package/dist/forms/FieldError/index.js +1 -1
  283. package/dist/forms/FieldError/index.js.map +1 -1
  284. package/dist/forms/FieldLabel/index.d.ts.map +1 -1
  285. package/dist/forms/FieldLabel/index.js +4 -4
  286. package/dist/forms/FieldLabel/index.js.map +1 -1
  287. package/dist/forms/FieldLabel/index.scss +1 -1
  288. package/dist/forms/FieldPropsProvider/index.d.ts +5 -0
  289. package/dist/forms/FieldPropsProvider/index.d.ts.map +1 -1
  290. package/dist/forms/FieldPropsProvider/index.js +5 -1
  291. package/dist/forms/FieldPropsProvider/index.js.map +1 -1
  292. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  293. package/dist/forms/Form/fieldReducer.js +6 -8
  294. package/dist/forms/Form/fieldReducer.js.map +1 -1
  295. package/dist/forms/Form/index.d.ts.map +1 -1
  296. package/dist/forms/Form/index.js +37 -20
  297. package/dist/forms/Form/index.js.map +1 -1
  298. package/dist/forms/Form/initContextState.d.ts.map +1 -1
  299. package/dist/forms/Form/initContextState.js +1 -0
  300. package/dist/forms/Form/initContextState.js.map +1 -1
  301. package/dist/forms/Form/mergeErrorPaths.d.ts +5 -0
  302. package/dist/forms/Form/mergeErrorPaths.d.ts.map +1 -0
  303. package/dist/forms/Form/mergeErrorPaths.js +29 -0
  304. package/dist/forms/Form/mergeErrorPaths.js.map +1 -0
  305. package/dist/forms/Form/mergeServerFormState.d.ts +1 -1
  306. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  307. package/dist/forms/Form/mergeServerFormState.js +36 -19
  308. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  309. package/dist/forms/Form/types.d.ts +8 -2
  310. package/dist/forms/Form/types.d.ts.map +1 -1
  311. package/dist/forms/Form/types.js.map +1 -1
  312. package/dist/forms/RenderFields/RenderField.d.ts +1 -0
  313. package/dist/forms/RenderFields/RenderField.d.ts.map +1 -1
  314. package/dist/forms/RenderFields/RenderField.js +12 -4
  315. package/dist/forms/RenderFields/RenderField.js.map +1 -1
  316. package/dist/forms/RenderFields/index.d.ts.map +1 -1
  317. package/dist/forms/RenderFields/index.js +3 -3
  318. package/dist/forms/RenderFields/index.js.map +1 -1
  319. package/dist/forms/RenderFields/types.d.ts +1 -0
  320. package/dist/forms/RenderFields/types.d.ts.map +1 -1
  321. package/dist/forms/RenderFields/types.js.map +1 -1
  322. package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts +4 -3
  323. package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
  324. package/dist/forms/buildStateFromSchema/addFieldStatePromise.js +67 -42
  325. package/dist/forms/buildStateFromSchema/addFieldStatePromise.js.map +1 -1
  326. package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.d.ts +11 -0
  327. package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.d.ts.map +1 -0
  328. package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.js +13 -0
  329. package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.js.map +1 -0
  330. package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.d.ts +11 -0
  331. package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.d.ts.map +1 -0
  332. package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.js +16 -0
  333. package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.js.map +1 -0
  334. package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.d.ts +12 -0
  335. package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.d.ts.map +1 -0
  336. package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js +122 -0
  337. package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js.map +1 -0
  338. package/dist/forms/buildStateFromSchema/index.d.ts +1 -0
  339. package/dist/forms/buildStateFromSchema/index.d.ts.map +1 -1
  340. package/dist/forms/buildStateFromSchema/index.js +10 -2
  341. package/dist/forms/buildStateFromSchema/index.js.map +1 -1
  342. package/dist/forms/buildStateFromSchema/iterateFields.d.ts +2 -2
  343. package/dist/forms/buildStateFromSchema/iterateFields.d.ts.map +1 -1
  344. package/dist/forms/buildStateFromSchema/iterateFields.js +4 -3
  345. package/dist/forms/buildStateFromSchema/iterateFields.js.map +1 -1
  346. package/dist/forms/useField/index.d.ts.map +1 -1
  347. package/dist/forms/useField/index.js +32 -12
  348. package/dist/forms/useField/index.js.map +1 -1
  349. package/dist/forms/useField/types.d.ts +1 -0
  350. package/dist/forms/useField/types.d.ts.map +1 -1
  351. package/dist/forms/useField/types.js.map +1 -1
  352. package/dist/forms/withCondition/WatchCondition.d.ts +3 -0
  353. package/dist/forms/withCondition/WatchCondition.d.ts.map +1 -1
  354. package/dist/forms/withCondition/WatchCondition.js +10 -2
  355. package/dist/forms/withCondition/WatchCondition.js.map +1 -1
  356. package/dist/forms/withCondition/index.js +4 -2
  357. package/dist/forms/withCondition/index.js.map +1 -1
  358. package/dist/hooks/usePayloadAPI.js +1 -1
  359. package/dist/hooks/usePayloadAPI.js.map +1 -1
  360. package/dist/hooks/useUseAsTitle.d.ts +3 -2
  361. package/dist/hooks/useUseAsTitle.d.ts.map +1 -1
  362. package/dist/hooks/useUseAsTitle.js +5 -6
  363. package/dist/hooks/useUseAsTitle.js.map +1 -1
  364. package/dist/providers/ClientFunction/index.d.ts.map +1 -1
  365. package/dist/providers/ClientFunction/index.js +27 -5
  366. package/dist/providers/ClientFunction/index.js.map +1 -1
  367. package/dist/providers/ComponentMap/buildComponentMap/{mapActions.d.ts → actions.d.ts} +1 -1
  368. package/dist/providers/ComponentMap/buildComponentMap/actions.d.ts.map +1 -0
  369. package/dist/providers/ComponentMap/buildComponentMap/{mapActions.js → actions.js} +1 -1
  370. package/dist/providers/ComponentMap/buildComponentMap/actions.js.map +1 -0
  371. package/dist/providers/ComponentMap/buildComponentMap/collections.d.ts +13 -0
  372. package/dist/providers/ComponentMap/buildComponentMap/collections.d.ts.map +1 -0
  373. package/dist/providers/ComponentMap/buildComponentMap/collections.js +74 -0
  374. package/dist/providers/ComponentMap/buildComponentMap/collections.js.map +1 -0
  375. package/dist/providers/ComponentMap/buildComponentMap/{mapFields.d.ts → fields.d.ts} +1 -1
  376. package/dist/providers/ComponentMap/buildComponentMap/fields.d.ts.map +1 -0
  377. package/dist/providers/ComponentMap/buildComponentMap/{mapFields.js → fields.js} +43 -23
  378. package/dist/providers/ComponentMap/buildComponentMap/fields.js.map +1 -0
  379. package/dist/providers/ComponentMap/buildComponentMap/globals.d.ts +12 -0
  380. package/dist/providers/ComponentMap/buildComponentMap/globals.d.ts.map +1 -0
  381. package/dist/providers/ComponentMap/buildComponentMap/globals.js +49 -0
  382. package/dist/providers/ComponentMap/buildComponentMap/globals.js.map +1 -0
  383. package/dist/providers/ComponentMap/buildComponentMap/index.d.ts +2 -2
  384. package/dist/providers/ComponentMap/buildComponentMap/index.d.ts.map +1 -1
  385. package/dist/providers/ComponentMap/buildComponentMap/index.js +16 -83
  386. package/dist/providers/ComponentMap/buildComponentMap/index.js.map +1 -1
  387. package/dist/providers/ComponentMap/buildComponentMap/types.d.ts +8 -3
  388. package/dist/providers/ComponentMap/buildComponentMap/types.d.ts.map +1 -1
  389. package/dist/providers/ComponentMap/buildComponentMap/types.js.map +1 -1
  390. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  391. package/dist/providers/DocumentInfo/index.js +120 -96
  392. package/dist/providers/DocumentInfo/index.js.map +1 -1
  393. package/dist/providers/DocumentInfo/types.d.ts +12 -13
  394. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  395. package/dist/providers/DocumentInfo/types.js.map +1 -1
  396. package/dist/providers/EntityVisibility/index.d.ts +16 -0
  397. package/dist/providers/EntityVisibility/index.d.ts.map +1 -0
  398. package/dist/providers/EntityVisibility/index.js +25 -0
  399. package/dist/providers/EntityVisibility/index.js.map +1 -0
  400. package/dist/providers/ListInfo/index.d.ts +0 -1
  401. package/dist/providers/ListInfo/index.d.ts.map +1 -1
  402. package/dist/providers/ListInfo/index.js +2 -7
  403. package/dist/providers/ListInfo/index.js.map +1 -1
  404. package/dist/templates/Default/index.d.ts +2 -7
  405. package/dist/templates/Default/index.d.ts.map +1 -1
  406. package/dist/templates/Default/index.js +10 -12
  407. package/dist/templates/Default/index.js.map +1 -1
  408. package/dist/utilities/buildComponentMap.d.ts +1 -1
  409. package/dist/utilities/buildComponentMap.d.ts.map +1 -1
  410. package/dist/utilities/buildComponentMap.js +1 -1
  411. package/dist/utilities/buildComponentMap.js.map +1 -1
  412. package/dist/utilities/flattenFieldMap.d.ts +10 -0
  413. package/dist/utilities/flattenFieldMap.d.ts.map +1 -0
  414. package/dist/utilities/flattenFieldMap.js +33 -0
  415. package/dist/utilities/flattenFieldMap.js.map +1 -0
  416. package/dist/utilities/getFormState.d.ts +2 -0
  417. package/dist/utilities/getFormState.d.ts.map +1 -1
  418. package/dist/utilities/getFormState.js +8 -3
  419. package/dist/utilities/getFormState.js.map +1 -1
  420. package/package.json +10 -4
  421. package/dist/elements/TableColumns/buildColumns.d.ts.map +0 -1
  422. package/dist/elements/TableColumns/buildColumns.js.map +0 -1
  423. package/dist/elements/WhereBuilder/reducer.d.ts +0 -5
  424. package/dist/elements/WhereBuilder/reducer.d.ts.map +0 -1
  425. package/dist/elements/WhereBuilder/reducer.js +0 -78
  426. package/dist/elements/WhereBuilder/reducer.js.map +0 -1
  427. package/dist/forms/FieldDescription/types.d.ts +0 -8
  428. package/dist/forms/FieldDescription/types.d.ts.map +0 -1
  429. package/dist/forms/FieldDescription/types.js +0 -3
  430. package/dist/forms/FieldDescription/types.js.map +0 -1
  431. package/dist/hooks/useAdminThumbnail.d.ts +0 -3
  432. package/dist/hooks/useAdminThumbnail.d.ts.map +0 -1
  433. package/dist/hooks/useAdminThumbnail.js +0 -8
  434. package/dist/hooks/useAdminThumbnail.js.map +0 -1
  435. package/dist/hooks/useThumbnail.d.ts +0 -3
  436. package/dist/hooks/useThumbnail.d.ts.map +0 -1
  437. package/dist/hooks/useThumbnail.js +0 -45
  438. package/dist/hooks/useThumbnail.js.map +0 -1
  439. package/dist/providers/ComponentMap/buildComponentMap/mapActions.d.ts.map +0 -1
  440. package/dist/providers/ComponentMap/buildComponentMap/mapActions.js.map +0 -1
  441. package/dist/providers/ComponentMap/buildComponentMap/mapFields.d.ts.map +0 -1
  442. package/dist/providers/ComponentMap/buildComponentMap/mapFields.js.map +0 -1
@@ -17,52 +17,46 @@ const valueFields = {
17
17
  };
18
18
  const baseClass = 'condition';
19
19
  export const Condition = (props)=>{
20
- const { andIndex, dispatch, fields, orIndex, value } = props;
21
- const fieldName = Object.keys(value)[0];
22
- const [activeField, setActiveField] = useState(()=>fields.find((field)=>fieldName === field.value));
23
- const operatorAndValue = value?.[fieldName] ? Object.entries(value[fieldName])[0] : undefined;
24
- const queryValue = operatorAndValue?.[1];
25
- const operatorValue = operatorAndValue?.[0];
26
- const [internalValue, setInternalValue] = useState(queryValue);
27
- const [internalOperatorField, setInternalOperatorField] = useState(operatorValue);
28
- const debouncedValue = useDebounce(internalValue, 300);
20
+ const { addCondition, andIndex, fieldName, fields, initialValue, operator, orIndex, removeCondition, updateCondition } = props;
21
+ const [internalField, setInternalField] = useState(()=>fields.find((field)=>fieldName === field.value));
22
+ const [internalOperatorOption, setInternalOperatorOption] = useState(operator);
23
+ const [internalQueryValue, setInternalQueryValue] = useState(initialValue);
24
+ const debouncedValue = useDebounce(internalQueryValue, 300);
29
25
  useEffect(()=>{
30
- const newActiveField = fields.find(({ value: name })=>name === fieldName);
31
- if (newActiveField && newActiveField !== activeField) {
32
- setActiveField(newActiveField);
33
- setInternalOperatorField(null);
34
- setInternalValue('');
26
+ // This is to trigger changes when the debounced value changes
27
+ if (internalField.value && internalOperatorOption && ![
28
+ null,
29
+ undefined
30
+ ].includes(debouncedValue)) {
31
+ updateCondition({
32
+ andIndex,
33
+ fieldName: internalField.value,
34
+ operator: internalOperatorOption,
35
+ orIndex,
36
+ value: debouncedValue
37
+ });
35
38
  }
36
- }, [
37
- fieldName,
38
- fields,
39
- activeField
40
- ]);
41
- useEffect(()=>{
42
- dispatch({
43
- type: 'update',
44
- andIndex,
45
- orIndex,
46
- value: debouncedValue || ''
47
- });
48
39
  }, [
49
40
  debouncedValue,
50
- dispatch,
41
+ andIndex,
42
+ internalField?.value,
43
+ internalOperatorOption,
51
44
  orIndex,
52
- andIndex
45
+ updateCondition,
46
+ operator
53
47
  ]);
54
48
  const booleanSelect = [
55
49
  'exists'
56
- ].includes(operatorValue) || activeField?.props?.type === 'checkbox';
57
- const ValueComponent = booleanSelect ? Select : valueFields[activeField?.component] || valueFields.Text;
50
+ ].includes(internalOperatorOption) || internalField?.props?.type === 'checkbox';
51
+ const ValueComponent = booleanSelect ? Select : valueFields[internalField?.component] || valueFields.Text;
58
52
  let valueOptions;
59
53
  if (booleanSelect) {
60
54
  valueOptions = [
61
55
  'true',
62
56
  'false'
63
57
  ];
64
- } else if (activeField?.props && 'options' in activeField.props) {
65
- valueOptions = activeField.props.options;
58
+ } else if (internalField?.props && 'options' in internalField.props) {
59
+ valueOptions = internalField.props.options;
66
60
  }
67
61
  return /*#__PURE__*/ React.createElement("div", {
68
62
  className: baseClass
@@ -75,43 +69,35 @@ export const Condition = (props)=>{
75
69
  }, /*#__PURE__*/ React.createElement(ReactSelect, {
76
70
  isClearable: false,
77
71
  onChange: (field)=>{
78
- dispatch({
79
- type: 'update',
80
- andIndex,
81
- field: field?.value,
82
- orIndex
83
- });
72
+ setInternalField(fields.find((f)=>f.value === field.value));
73
+ setInternalOperatorOption(undefined);
74
+ setInternalQueryValue(undefined);
84
75
  },
85
76
  options: fields,
86
- value: fields.find((field)=>fieldName === field.value)
77
+ value: fields.find((field)=>internalField.value === field.value) || fields[0]
87
78
  })), /*#__PURE__*/ React.createElement("div", {
88
79
  className: `${baseClass}__operator`
89
80
  }, /*#__PURE__*/ React.createElement(ReactSelect, {
90
- disabled: !fieldName,
81
+ disabled: !internalField.value,
91
82
  isClearable: false,
92
83
  onChange: (operator)=>{
93
- dispatch({
94
- type: 'update',
95
- andIndex,
96
- operator: operator.value,
97
- orIndex
98
- });
99
- setInternalOperatorField(operator.value);
84
+ setInternalOperatorOption(operator.value);
100
85
  },
101
- options: activeField?.operators,
102
- value: activeField?.operators.find((operator)=>internalOperatorField === operator.value) || null
86
+ options: internalField?.operators,
87
+ value: internalField?.operators.find((operator)=>internalOperatorOption === operator.value) || null
103
88
  })), /*#__PURE__*/ React.createElement("div", {
104
89
  className: `${baseClass}__value`
105
90
  }, /*#__PURE__*/ React.createElement(RenderCustomComponent, {
106
- CustomComponent: activeField?.props?.admin?.components?.Filter,
91
+ CustomComponent: internalField?.props?.admin?.components?.Filter,
107
92
  DefaultComponent: ValueComponent,
108
93
  componentProps: {
109
- ...activeField?.props,
110
- disabled: !operatorValue,
111
- onChange: setInternalValue,
112
- operator: operatorValue,
94
+ ...internalField?.props,
95
+ disabled: !internalOperatorOption,
96
+ onChange: setInternalQueryValue,
97
+ operator: internalOperatorOption,
113
98
  options: valueOptions,
114
- value: internalValue
99
+ relationTo: internalField?.props?.type === 'relationship' && 'cellProps' in internalField.props && typeof internalField.props.cellProps === 'object' && 'relationTo' in internalField.props.cellProps ? internalField.props.cellProps?.relationTo : undefined,
100
+ value: internalQueryValue ?? ''
115
101
  }
116
102
  }))), /*#__PURE__*/ React.createElement("div", {
117
103
  className: `${baseClass}__actions`
@@ -120,8 +106,7 @@ export const Condition = (props)=>{
120
106
  className: `${baseClass}__actions-remove`,
121
107
  icon: "x",
122
108
  iconStyle: "with-border",
123
- onClick: ()=>dispatch({
124
- type: 'remove',
109
+ onClick: ()=>removeCondition({
125
110
  andIndex,
126
111
  orIndex
127
112
  }),
@@ -131,10 +116,9 @@ export const Condition = (props)=>{
131
116
  className: `${baseClass}__actions-add`,
132
117
  icon: "plus",
133
118
  iconStyle: "with-border",
134
- onClick: ()=>dispatch({
135
- type: 'add',
136
- andIndex: andIndex + 1,
137
- field: fields[0].value,
119
+ onClick: ()=>addCondition({
120
+ andIndex,
121
+ fieldName,
138
122
  orIndex,
139
123
  relation: 'and'
140
124
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["import type { Where } from 'payload/types'\n\nimport React, { useEffect, useState } from 'react'\n\nimport type { Action, FieldCondition } from '../types.js'\n\nexport type Props = {\n andIndex: number\n dispatch: (action: Action) => void\n fields: FieldCondition[]\n orIndex: number\n value: Where\n}\n\nimport { RenderCustomComponent } from '../../../elements/RenderCustomComponent/index.js'\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DateField } from './Date/index.js'\nimport { NumberField } from './Number/index.js'\nimport { RelationshipField } from './Relationship/index.js'\nimport { Select } from './Select/index.js'\nimport Text from './Text/index.js'\nimport './index.scss'\n\ntype ComponentType = 'Date' | 'Number' | 'Relationship' | 'Select' | 'Text'\nconst valueFields: Record<ComponentType, React.FC> = {\n Date: DateField,\n Number: NumberField,\n Relationship: RelationshipField,\n Select,\n Text,\n}\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const { andIndex, dispatch, fields, orIndex, value } = props\n const fieldName = Object.keys(value)[0]\n const [activeField, setActiveField] = useState<FieldCondition>(() =>\n fields.find((field) => fieldName === field.value),\n )\n\n const operatorAndValue = value?.[fieldName] ? Object.entries(value[fieldName])[0] : undefined\n const queryValue = operatorAndValue?.[1]\n const operatorValue = operatorAndValue?.[0]\n\n const [internalValue, setInternalValue] = useState(queryValue)\n const [internalOperatorField, setInternalOperatorField] = useState(operatorValue)\n\n const debouncedValue = useDebounce(internalValue, 300)\n\n useEffect(() => {\n const newActiveField = fields.find(({ value: name }) => name === fieldName)\n\n if (newActiveField && newActiveField !== activeField) {\n setActiveField(newActiveField)\n setInternalOperatorField(null)\n setInternalValue('')\n }\n }, [fieldName, fields, activeField])\n\n useEffect(() => {\n dispatch({\n type: 'update',\n andIndex,\n orIndex,\n value: debouncedValue || '',\n })\n }, [debouncedValue, dispatch, orIndex, andIndex])\n\n const booleanSelect =\n ['exists'].includes(operatorValue) || activeField?.props?.type === 'checkbox'\n const ValueComponent = booleanSelect\n ? Select\n : valueFields[activeField?.component] || valueFields.Text\n\n let valueOptions\n if (booleanSelect) {\n valueOptions = ['true', 'false']\n } else if (activeField?.props && 'options' in activeField.props) {\n valueOptions = activeField.props.options\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n isClearable={false}\n onChange={(field) => {\n dispatch({\n type: 'update',\n andIndex,\n field: field?.value,\n orIndex,\n })\n }}\n options={fields}\n value={fields.find((field) => fieldName === field.value)}\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={!fieldName}\n isClearable={false}\n onChange={(operator) => {\n dispatch({\n type: 'update',\n andIndex,\n operator: operator.value,\n orIndex,\n })\n setInternalOperatorField(operator.value)\n }}\n options={activeField?.operators}\n value={\n activeField?.operators.find(\n (operator) => internalOperatorField === operator.value,\n ) || null\n }\n />\n </div>\n <div className={`${baseClass}__value`}>\n <RenderCustomComponent\n CustomComponent={activeField?.props?.admin?.components?.Filter}\n DefaultComponent={ValueComponent}\n componentProps={{\n ...activeField?.props,\n disabled: !operatorValue,\n onChange: setInternalValue,\n operator: operatorValue,\n options: valueOptions,\n value: internalValue,\n }}\n />\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() =>\n dispatch({\n type: 'remove',\n andIndex,\n orIndex,\n })\n }\n round\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-add`}\n icon=\"plus\"\n iconStyle=\"with-border\"\n onClick={() =>\n dispatch({\n type: 'add',\n andIndex: andIndex + 1,\n field: fields[0].value,\n orIndex,\n relation: 'and',\n })\n }\n round\n />\n </div>\n </div>\n </div>\n )\n}\n"],"names":["React","useEffect","useState","RenderCustomComponent","useDebounce","Button","ReactSelect","DateField","NumberField","RelationshipField","Select","Text","valueFields","Date","Number","Relationship","baseClass","Condition","props","andIndex","dispatch","fields","orIndex","value","fieldName","Object","keys","activeField","setActiveField","find","field","operatorAndValue","entries","undefined","queryValue","operatorValue","internalValue","setInternalValue","internalOperatorField","setInternalOperatorField","debouncedValue","newActiveField","name","type","booleanSelect","includes","ValueComponent","component","valueOptions","options","div","className","isClearable","onChange","disabled","operator","operators","CustomComponent","admin","components","Filter","DefaultComponent","componentProps","buttonStyle","icon","iconStyle","onClick","round","relation"],"mappings":"AAEA,OAAOA,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAYlD,SAASC,qBAAqB,QAAQ,mDAAkD;AACxF,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,MAAM,QAAQ,wBAAuB;AAC9C,SAASC,WAAW,QAAQ,6BAA4B;AACxD,SAASC,SAAS,QAAQ,kBAAiB;AAC3C,SAASC,WAAW,QAAQ,oBAAmB;AAC/C,SAASC,iBAAiB,QAAQ,0BAAyB;AAC3D,SAASC,MAAM,QAAQ,oBAAmB;AAC1C,OAAOC,UAAU,kBAAiB;AAIlC,MAAMC,cAA+C;IACnDC,MAAMN;IACNO,QAAQN;IACRO,cAAcN;IACdC;IACAC;AACF;AAEA,MAAMK,YAAY;AAElB,OAAO,MAAMC,YAA6B,CAACC;IACzC,MAAM,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAE,GAAGL;IACvD,MAAMM,YAAYC,OAAOC,IAAI,CAACH,MAAM,CAAC,EAAE;IACvC,MAAM,CAACI,aAAaC,eAAe,GAAG1B,SAAyB,IAC7DmB,OAAOQ,IAAI,CAAC,CAACC,QAAUN,cAAcM,MAAMP,KAAK;IAGlD,MAAMQ,mBAAmBR,OAAO,CAACC,UAAU,GAAGC,OAAOO,OAAO,CAACT,KAAK,CAACC,UAAU,CAAC,CAAC,EAAE,GAAGS;IACpF,MAAMC,aAAaH,kBAAkB,CAAC,EAAE;IACxC,MAAMI,gBAAgBJ,kBAAkB,CAAC,EAAE;IAE3C,MAAM,CAACK,eAAeC,iBAAiB,GAAGnC,SAASgC;IACnD,MAAM,CAACI,uBAAuBC,yBAAyB,GAAGrC,SAASiC;IAEnE,MAAMK,iBAAiBpC,YAAYgC,eAAe;IAElDnC,UAAU;QACR,MAAMwC,iBAAiBpB,OAAOQ,IAAI,CAAC,CAAC,EAAEN,OAAOmB,IAAI,EAAE,GAAKA,SAASlB;QAEjE,IAAIiB,kBAAkBA,mBAAmBd,aAAa;YACpDC,eAAea;YACfF,yBAAyB;YACzBF,iBAAiB;QACnB;IACF,GAAG;QAACb;QAAWH;QAAQM;KAAY;IAEnC1B,UAAU;QACRmB,SAAS;YACPuB,MAAM;YACNxB;YACAG;YACAC,OAAOiB,kBAAkB;QAC3B;IACF,GAAG;QAACA;QAAgBpB;QAAUE;QAASH;KAAS;IAEhD,MAAMyB,gBACJ;QAAC;KAAS,CAACC,QAAQ,CAACV,kBAAkBR,aAAaT,OAAOyB,SAAS;IACrE,MAAMG,iBAAiBF,gBACnBlC,SACAE,WAAW,CAACe,aAAaoB,UAAU,IAAInC,YAAYD,IAAI;IAE3D,IAAIqC;IACJ,IAAIJ,eAAe;QACjBI,eAAe;YAAC;YAAQ;SAAQ;IAClC,OAAO,IAAIrB,aAAaT,SAAS,aAAaS,YAAYT,KAAK,EAAE;QAC/D8B,eAAerB,YAAYT,KAAK,CAAC+B,OAAO;IAC1C;IAEA,qBACE,oBAACC;QAAIC,WAAWnC;qBACd,oBAACkC;QAAIC,WAAW,CAAC,EAAEnC,UAAU,MAAM,CAAC;qBAClC,oBAACkC;QAAIC,WAAW,CAAC,EAAEnC,UAAU,QAAQ,CAAC;qBACpC,oBAACkC;QAAIC,WAAW,CAAC,EAAEnC,UAAU,OAAO,CAAC;qBACnC,oBAACV;QACC8C,aAAa;QACbC,UAAU,CAACvB;YACTV,SAAS;gBACPuB,MAAM;gBACNxB;gBACAW,OAAOA,OAAOP;gBACdD;YACF;QACF;QACA2B,SAAS5B;QACTE,OAAOF,OAAOQ,IAAI,CAAC,CAACC,QAAUN,cAAcM,MAAMP,KAAK;uBAG3D,oBAAC2B;QAAIC,WAAW,CAAC,EAAEnC,UAAU,UAAU,CAAC;qBACtC,oBAACV;QACCgD,UAAU,CAAC9B;QACX4B,aAAa;QACbC,UAAU,CAACE;YACTnC,SAAS;gBACPuB,MAAM;gBACNxB;gBACAoC,UAAUA,SAAShC,KAAK;gBACxBD;YACF;YACAiB,yBAAyBgB,SAAShC,KAAK;QACzC;QACA0B,SAAStB,aAAa6B;QACtBjC,OACEI,aAAa6B,UAAU3B,KACrB,CAAC0B,WAAajB,0BAA0BiB,SAAShC,KAAK,KACnD;uBAIX,oBAAC2B;QAAIC,WAAW,CAAC,EAAEnC,UAAU,OAAO,CAAC;qBACnC,oBAACb;QACCsD,iBAAiB9B,aAAaT,OAAOwC,OAAOC,YAAYC;QACxDC,kBAAkBf;QAClBgB,gBAAgB;YACd,GAAGnC,aAAaT,KAAK;YACrBoC,UAAU,CAACnB;YACXkB,UAAUhB;YACVkB,UAAUpB;YACVc,SAASD;YACTzB,OAAOa;QACT;wBAIN,oBAACc;QAAIC,WAAW,CAAC,EAAEnC,UAAU,SAAS,CAAC;qBACrC,oBAACX;QACC0D,aAAY;QACZZ,WAAW,CAAC,EAAEnC,UAAU,gBAAgB,CAAC;QACzCgD,MAAK;QACLC,WAAU;QACVC,SAAS,IACP9C,SAAS;gBACPuB,MAAM;gBACNxB;gBACAG;YACF;QAEF6C,OAAAA;sBAEF,oBAAC9D;QACC0D,aAAY;QACZZ,WAAW,CAAC,EAAEnC,UAAU,aAAa,CAAC;QACtCgD,MAAK;QACLC,WAAU;QACVC,SAAS,IACP9C,SAAS;gBACPuB,MAAM;gBACNxB,UAAUA,WAAW;gBACrBW,OAAOT,MAAM,CAAC,EAAE,CAACE,KAAK;gBACtBD;gBACA8C,UAAU;YACZ;QAEFD,OAAAA;;AAMZ,EAAC"}
1
+ {"version":3,"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\n\nimport type { FieldCondition } from '../types.js'\n\nexport type Props = {\n addCondition: ({\n andIndex,\n fieldName,\n orIndex,\n relation,\n }: {\n andIndex: number\n fieldName: string\n orIndex: number\n relation: 'and' | 'or'\n }) => void\n andIndex: number\n fieldName: string\n fields: FieldCondition[]\n initialValue: string\n operator: string\n orIndex: number\n removeCondition: ({ andIndex, orIndex }: { andIndex: number; orIndex: number }) => void\n updateCondition: ({\n andIndex,\n fieldName,\n operator,\n orIndex,\n value,\n }: {\n andIndex: number\n fieldName: string\n operator: string\n orIndex: number\n value: string\n }) => void\n}\n\nimport type { RelationshipFieldProps } from '@payloadcms/ui/fields/Relationship'\n\nimport { RenderCustomComponent } from '../../../elements/RenderCustomComponent/index.js'\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DateField } from './Date/index.js'\nimport { NumberField } from './Number/index.js'\nimport { RelationshipField } from './Relationship/index.js'\nimport { Select } from './Select/index.js'\nimport Text from './Text/index.js'\nimport './index.scss'\n\ntype ComponentType = 'Date' | 'Number' | 'Relationship' | 'Select' | 'Text'\nconst valueFields: Record<ComponentType, React.FC> = {\n Date: DateField,\n Number: NumberField,\n Relationship: RelationshipField,\n Select,\n Text,\n}\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const {\n addCondition,\n andIndex,\n fieldName,\n fields,\n initialValue,\n operator,\n orIndex,\n removeCondition,\n updateCondition,\n } = props\n const [internalField, setInternalField] = useState<FieldCondition>(() =>\n fields.find((field) => fieldName === field.value),\n )\n const [internalOperatorOption, setInternalOperatorOption] = useState(operator)\n const [internalQueryValue, setInternalQueryValue] = useState<string>(initialValue)\n\n const debouncedValue = useDebounce(internalQueryValue, 300)\n\n useEffect(() => {\n // This is to trigger changes when the debounced value changes\n if (\n internalField.value &&\n internalOperatorOption &&\n ![null, undefined].includes(debouncedValue)\n ) {\n updateCondition({\n andIndex,\n fieldName: internalField.value,\n operator: internalOperatorOption,\n orIndex,\n value: debouncedValue,\n })\n }\n }, [\n debouncedValue,\n andIndex,\n internalField?.value,\n internalOperatorOption,\n orIndex,\n updateCondition,\n operator,\n ])\n\n const booleanSelect =\n ['exists'].includes(internalOperatorOption) || internalField?.props?.type === 'checkbox'\n const ValueComponent = booleanSelect\n ? Select\n : valueFields[internalField?.component] || valueFields.Text\n\n let valueOptions\n if (booleanSelect) {\n valueOptions = ['true', 'false']\n } else if (internalField?.props && 'options' in internalField.props) {\n valueOptions = internalField.props.options\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n isClearable={false}\n onChange={(field) => {\n setInternalField(fields.find((f) => f.value === field.value))\n setInternalOperatorOption(undefined)\n setInternalQueryValue(undefined)\n }}\n options={fields}\n value={fields.find((field) => internalField.value === field.value) || fields[0]}\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={!internalField.value}\n isClearable={false}\n onChange={(operator) => {\n setInternalOperatorOption(operator.value)\n }}\n options={internalField?.operators}\n value={\n internalField?.operators.find(\n (operator) => internalOperatorOption === operator.value,\n ) || null\n }\n />\n </div>\n <div className={`${baseClass}__value`}>\n <RenderCustomComponent\n CustomComponent={internalField?.props?.admin?.components?.Filter}\n DefaultComponent={ValueComponent}\n componentProps={{\n ...internalField?.props,\n disabled: !internalOperatorOption,\n onChange: setInternalQueryValue,\n operator: internalOperatorOption,\n options: valueOptions,\n relationTo:\n internalField?.props?.type === 'relationship' &&\n 'cellProps' in internalField.props &&\n typeof internalField.props.cellProps === 'object' &&\n 'relationTo' in internalField.props.cellProps\n ? internalField.props.cellProps?.relationTo\n : undefined,\n value: internalQueryValue ?? '',\n }}\n />\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() =>\n removeCondition({\n andIndex,\n orIndex,\n })\n }\n round\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-add`}\n icon=\"plus\"\n iconStyle=\"with-border\"\n onClick={() =>\n addCondition({\n andIndex,\n fieldName,\n orIndex,\n relation: 'and',\n })\n }\n round\n />\n </div>\n </div>\n </div>\n )\n}\n"],"names":["React","useEffect","useState","RenderCustomComponent","useDebounce","Button","ReactSelect","DateField","NumberField","RelationshipField","Select","Text","valueFields","Date","Number","Relationship","baseClass","Condition","props","addCondition","andIndex","fieldName","fields","initialValue","operator","orIndex","removeCondition","updateCondition","internalField","setInternalField","find","field","value","internalOperatorOption","setInternalOperatorOption","internalQueryValue","setInternalQueryValue","debouncedValue","undefined","includes","booleanSelect","type","ValueComponent","component","valueOptions","options","div","className","isClearable","onChange","f","disabled","operators","CustomComponent","admin","components","Filter","DefaultComponent","componentProps","relationTo","cellProps","buttonStyle","icon","iconStyle","onClick","round","relation"],"mappings":"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"}
@@ -18,6 +18,12 @@
18
18
  }
19
19
  }
20
20
 
21
+ &__field {
22
+ .field-label {
23
+ padding-bottom: 0;
24
+ }
25
+ }
26
+
21
27
  &__actions {
22
28
  flex-shrink: 0;
23
29
  display: flex;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AASnD,OAAO,cAAc,CAAA;AAyCrB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAuGpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAQnD,OAAO,cAAc,CAAA;AAOrB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA0NpD,CAAA"}
@@ -1,66 +1,60 @@
1
1
  import { getTranslation } from '@payloadcms/translations';
2
- import { flattenTopLevelFields } from 'payload/utilities';
3
- import React, { useReducer, useState } from 'react';
4
- import { useConfig } from '../../providers/Config/index.js';
2
+ import React, { useEffect, useState } from 'react';
5
3
  import { useListQuery } from '../../providers/ListQuery/index.js';
6
4
  import { useSearchParams } from '../../providers/SearchParams/index.js';
7
5
  import { useTranslation } from '../../providers/Translation/index.js';
8
6
  import { Button } from '../Button/index.js';
7
+ import { useTableColumns } from '../TableColumns/index.js';
9
8
  import { Condition } from './Condition/index.js';
10
- import fieldTypes from './field-types.js';
11
- import reducer from './reducer.js';
9
+ import { reduceFieldMap } from './reduceFieldMap.js';
12
10
  import { transformWhereQuery } from './transformWhereQuery.js';
13
11
  import validateWhereQuery from './validateWhereQuery.js';
14
12
  const baseClass = 'where-builder';
15
- const reduceFields = (fields, i18n)=>flattenTopLevelFields(fields).reduce((reduced, field)=>{
16
- if (typeof fieldTypes[field.type] === 'object') {
17
- const operatorKeys = new Set();
18
- const operators = fieldTypes[field.type].operators.reduce((acc, operator)=>{
19
- if (!operatorKeys.has(operator.value)) {
20
- operatorKeys.add(operator.value);
21
- return [
22
- ...acc,
23
- {
24
- ...operator,
25
- label: i18n.t(`operators:${operator.label}`)
26
- }
27
- ];
28
- }
29
- return acc;
30
- }, []);
31
- const formattedField = {
32
- label: getTranslation(field.label || field.name, i18n),
33
- value: field.name,
34
- ...fieldTypes[field.type],
35
- operators,
36
- props: {
37
- ...field
38
- }
39
- };
40
- return [
41
- ...reduced,
42
- formattedField
43
- ];
44
- }
45
- return reduced;
46
- }, []);
47
13
  /**
48
14
  * The WhereBuilder component is used to render the filter controls for a collection's list view.
49
15
  * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).
50
16
  */ export const WhereBuilder = (props)=>{
51
- const { collectionPluralLabel, collectionSlug } = props;
17
+ const { collectionPluralLabel } = props;
52
18
  const { i18n, t } = useTranslation();
53
- const config = useConfig();
54
- const collection = config.collections.find((c)=>c.slug === collectionSlug);
55
- const [reducedFields] = useState(()=>reduceFields(collection.fields, i18n));
19
+ const { columns } = useTableColumns();
20
+ const [reducedFields, setReducedColumns] = useState(()=>reduceFieldMap(columns, i18n));
21
+ useEffect(()=>{
22
+ setReducedColumns(reduceFieldMap(columns, i18n));
23
+ }, [
24
+ columns,
25
+ i18n
26
+ ]);
56
27
  const { searchParams } = useSearchParams();
57
28
  const { handleWhereChange } = useListQuery();
29
+ const [shouldUpdateQuery, setShouldUpdateQuery] = React.useState(false);
58
30
  // This handles initializing the where conditions from the search query (URL). That way, if you pass in
59
31
  // query params to the URL, the where conditions will be initialized from those and displayed in the UI.
60
32
  // Example: /admin/collections/posts?where[or][0][and][0][text][equals]=example%20post
61
- const [conditions, dispatchConditions] = useReducer(reducer((state)=>handleWhereChange({
62
- or: state
63
- })), searchParams.where, (whereFromSearch)=>{
33
+ /*
34
+ stored conditions look like this:
35
+ [
36
+ _or_ & _and_ queries have the same shape:
37
+ {
38
+ and: [{
39
+ category: {
40
+ equals: 'category-a'
41
+ }
42
+ }]
43
+ },
44
+
45
+ {
46
+ and:[{
47
+ category: {
48
+ equals: 'category-b'
49
+ },
50
+ text: {
51
+ not_equals: 'oranges'
52
+ },
53
+ }]
54
+ }
55
+ ]
56
+ */ const [conditions, setConditions] = React.useState(()=>{
57
+ const whereFromSearch = searchParams.where;
64
58
  if (whereFromSearch) {
65
59
  if (validateWhereQuery(whereFromSearch)) {
66
60
  return whereFromSearch.or;
@@ -74,6 +68,76 @@ const reduceFields = (fields, i18n)=>flattenTopLevelFields(fields).reduce((reduc
74
68
  }
75
69
  return [];
76
70
  });
71
+ const addCondition = React.useCallback(({ andIndex, fieldName, orIndex, relation })=>{
72
+ setConditions((prevConditions)=>{
73
+ const newConditions = [
74
+ ...prevConditions
75
+ ];
76
+ if (relation === 'and') {
77
+ newConditions[orIndex].and.splice(andIndex, 0, {
78
+ [fieldName]: {}
79
+ });
80
+ } else {
81
+ newConditions.push({
82
+ and: [
83
+ {
84
+ [fieldName]: {}
85
+ }
86
+ ]
87
+ });
88
+ }
89
+ return newConditions;
90
+ });
91
+ }, []);
92
+ const updateCondition = React.useCallback(({ andIndex, fieldName: fieldNameArg, operator: operatorArg, orIndex, value: valueArg })=>{
93
+ setConditions((prevConditions)=>{
94
+ const newConditions = [
95
+ ...prevConditions
96
+ ];
97
+ if (typeof newConditions[orIndex].and[andIndex] === 'object') {
98
+ const fieldName = fieldNameArg;
99
+ const operator = operatorArg;
100
+ const value = valueArg ?? (operator ? newConditions[orIndex].and[andIndex][operator] : '');
101
+ if (fieldName && operator && ![
102
+ null,
103
+ undefined
104
+ ].includes(value)) {
105
+ newConditions[orIndex].and[andIndex] = {
106
+ [fieldName]: operator ? {
107
+ [operator]: value
108
+ } : {}
109
+ };
110
+ setShouldUpdateQuery(true);
111
+ }
112
+ }
113
+ return newConditions;
114
+ });
115
+ }, []);
116
+ const removeCondition = React.useCallback(({ andIndex, orIndex })=>{
117
+ setConditions((prevConditions)=>{
118
+ const newConditions = [
119
+ ...prevConditions
120
+ ];
121
+ newConditions[orIndex].and.splice(andIndex, 1);
122
+ if (newConditions[orIndex].and.length === 0) {
123
+ newConditions.splice(orIndex, 1);
124
+ }
125
+ return newConditions;
126
+ });
127
+ setShouldUpdateQuery(true);
128
+ }, []);
129
+ React.useEffect(()=>{
130
+ if (shouldUpdateQuery) {
131
+ handleWhereChange({
132
+ or: conditions
133
+ });
134
+ setShouldUpdateQuery(false);
135
+ }
136
+ }, [
137
+ conditions,
138
+ handleWhereChange,
139
+ shouldUpdateQuery
140
+ ]);
77
141
  return /*#__PURE__*/ React.createElement("div", {
78
142
  className: baseClass
79
143
  }, conditions.length > 0 && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("div", {
@@ -88,27 +152,38 @@ const reduceFields = (fields, i18n)=>flattenTopLevelFields(fields).reduce((reduc
88
152
  className: `${baseClass}__label`
89
153
  }, t('general:or')), /*#__PURE__*/ React.createElement("ul", {
90
154
  className: `${baseClass}__and-filters`
91
- }, Array.isArray(or?.and) && or.and.map((_, andIndex)=>/*#__PURE__*/ React.createElement("li", {
155
+ }, Array.isArray(or?.and) && or.and.map((_, andIndex)=>{
156
+ const initialFieldName = Object.keys(conditions[orIndex].and[andIndex])[0];
157
+ const initialOperator = Object.keys(conditions[orIndex].and[andIndex]?.[initialFieldName] || {})?.[0] || undefined;
158
+ const initialValue = conditions[orIndex].and[andIndex]?.[initialFieldName]?.[initialOperator] || '';
159
+ return /*#__PURE__*/ React.createElement("li", {
92
160
  key: andIndex
93
161
  }, andIndex !== 0 && /*#__PURE__*/ React.createElement("div", {
94
162
  className: `${baseClass}__label`
95
163
  }, t('general:and')), /*#__PURE__*/ React.createElement(Condition, {
164
+ addCondition: addCondition,
96
165
  andIndex: andIndex,
97
- dispatch: dispatchConditions,
166
+ fieldName: initialFieldName,
98
167
  fields: reducedFields,
168
+ initialValue: initialValue,
99
169
  key: andIndex,
170
+ operator: initialOperator,
100
171
  orIndex: orIndex,
101
- value: conditions[orIndex].and[andIndex]
102
- }))))))), /*#__PURE__*/ React.createElement(Button, {
172
+ removeCondition: removeCondition,
173
+ updateCondition: updateCondition
174
+ }));
175
+ }))))), /*#__PURE__*/ React.createElement(Button, {
103
176
  buttonStyle: "icon-label",
104
177
  className: `${baseClass}__add-or`,
105
178
  icon: "plus",
106
179
  iconPosition: "left",
107
180
  iconStyle: "with-border",
108
181
  onClick: ()=>{
109
- if (reducedFields.length > 0) dispatchConditions({
110
- type: 'add',
111
- field: reducedFields[0].value
182
+ addCondition({
183
+ andIndex: 0,
184
+ fieldName: reducedFields[0].value,
185
+ orIndex: conditions.length,
186
+ relation: 'or'
112
187
  });
113
188
  }
114
189
  }, t('general:or'))), conditions.length === 0 && /*#__PURE__*/ React.createElement("div", {
@@ -122,10 +197,14 @@ const reduceFields = (fields, i18n)=>flattenTopLevelFields(fields).reduce((reduc
122
197
  iconPosition: "left",
123
198
  iconStyle: "with-border",
124
199
  onClick: ()=>{
125
- if (reducedFields.length > 0) dispatchConditions({
126
- type: 'add',
127
- field: reducedFields[0].value
128
- });
200
+ if (reducedFields.length > 0) {
201
+ addCondition({
202
+ andIndex: 0,
203
+ fieldName: reducedFields[0].value,
204
+ orIndex: conditions.length,
205
+ relation: 'or'
206
+ });
207
+ }
129
208
  }
130
209
  }, t('general:addFilter'))));
131
210
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["import type { Where } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { flattenTopLevelFields } from 'payload/utilities'\nimport React, { useReducer, useState } from 'react'\n\nimport type { WhereBuilderProps } from './types.js'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useSearchParams } from '../../providers/SearchParams/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { Condition } from './Condition/index.js'\nimport fieldTypes from './field-types.js'\nimport './index.scss'\nimport reducer from './reducer.js'\nimport { transformWhereQuery } from './transformWhereQuery.js'\nimport validateWhereQuery from './validateWhereQuery.js'\n\nconst baseClass = 'where-builder'\n\nconst reduceFields = (fields, i18n) =>\n flattenTopLevelFields(fields).reduce((reduced, field) => {\n if (typeof fieldTypes[field.type] === 'object') {\n const operatorKeys = new Set()\n const operators = fieldTypes[field.type].operators.reduce((acc, operator) => {\n if (!operatorKeys.has(operator.value)) {\n operatorKeys.add(operator.value)\n return [\n ...acc,\n {\n ...operator,\n label: i18n.t(`operators:${operator.label}`),\n },\n ]\n }\n return acc\n }, [])\n\n const formattedField = {\n label: getTranslation(field.label || field.name, i18n),\n value: field.name,\n ...fieldTypes[field.type],\n operators,\n props: {\n ...field,\n },\n }\n\n return [...reduced, formattedField]\n }\n\n return reduced\n }, [])\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel, collectionSlug } = props\n const { i18n, t } = useTranslation()\n\n const config = useConfig()\n const collection = config.collections.find((c) => c.slug === collectionSlug)\n const [reducedFields] = useState(() => reduceFields(collection.fields, i18n))\n\n const { searchParams } = useSearchParams()\n const { handleWhereChange } = useListQuery()\n\n // This handles initializing the where conditions from the search query (URL). That way, if you pass in\n // query params to the URL, the where conditions will be initialized from those and displayed in the UI.\n // Example: /admin/collections/posts?where[or][0][and][0][text][equals]=example%20post\n const [conditions, dispatchConditions] = useReducer(\n reducer((state) => handleWhereChange({ or: state })),\n searchParams.where as Where,\n (whereFromSearch: Where) => {\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`)\n }\n return []\n },\n )\n\n return (\n <div className={baseClass}>\n {conditions.length > 0 && (\n <React.Fragment>\n <div className={`${baseClass}__label`}>\n {t('general:filterWhere', { label: getTranslation(collectionPluralLabel, i18n) })}\n </div>\n <ul className={`${baseClass}__or-filters`}>\n {conditions.map((or, orIndex) => (\n <li key={orIndex}>\n {orIndex !== 0 && <div className={`${baseClass}__label`}>{t('general:or')}</div>}\n <ul className={`${baseClass}__and-filters`}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => (\n <li key={andIndex}>\n {andIndex !== 0 && (\n <div className={`${baseClass}__label`}>{t('general:and')}</div>\n )}\n <Condition\n andIndex={andIndex}\n dispatch={dispatchConditions}\n fields={reducedFields}\n key={andIndex}\n orIndex={orIndex}\n value={conditions[orIndex].and[andIndex]}\n />\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-or`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n if (reducedFields.length > 0)\n dispatchConditions({ type: 'add', field: reducedFields[0].value })\n }}\n >\n {t('general:or')}\n </Button>\n </React.Fragment>\n )}\n {conditions.length === 0 && (\n <div className={`${baseClass}__no-filters`}>\n <div className={`${baseClass}__label`}>{t('general:noFiltersSet')}</div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-first-filter`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n if (reducedFields.length > 0)\n dispatchConditions({ type: 'add', field: reducedFields[0].value })\n }}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","flattenTopLevelFields","React","useReducer","useState","useConfig","useListQuery","useSearchParams","useTranslation","Button","Condition","fieldTypes","reducer","transformWhereQuery","validateWhereQuery","baseClass","reduceFields","fields","i18n","reduce","reduced","field","type","operatorKeys","Set","operators","acc","operator","has","value","add","label","t","formattedField","name","props","WhereBuilder","collectionPluralLabel","collectionSlug","config","collection","collections","find","c","slug","reducedFields","searchParams","handleWhereChange","conditions","dispatchConditions","state","or","where","whereFromSearch","transformedWhere","console","warn","JSON","stringify","div","className","length","Fragment","ul","map","orIndex","li","key","Array","isArray","and","_","andIndex","dispatch","buttonStyle","icon","iconPosition","iconStyle","onClick"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["import { getTranslation } from '@payloadcms/translations'\nimport React, { useEffect, useState } from 'react'\n\nimport type { WhereBuilderProps } from './types.js'\n\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useSearchParams } from '../../providers/SearchParams/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { useTableColumns } from '../TableColumns/index.js'\nimport { Condition } from './Condition/index.js'\nimport './index.scss'\nimport { reduceFieldMap } from './reduceFieldMap.js'\nimport { transformWhereQuery } from './transformWhereQuery.js'\nimport validateWhereQuery from './validateWhereQuery.js'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel } = props\n const { i18n, t } = useTranslation()\n const { columns } = useTableColumns()\n\n const [reducedFields, setReducedColumns] = useState(() => reduceFieldMap(columns, i18n))\n\n useEffect(() => {\n setReducedColumns(reduceFieldMap(columns, i18n))\n }, [columns, i18n])\n\n const { searchParams } = useSearchParams()\n const { handleWhereChange } = useListQuery()\n const [shouldUpdateQuery, setShouldUpdateQuery] = React.useState(false)\n\n // This handles initializing the where conditions from the search query (URL). That way, if you pass in\n // query params to the URL, the where conditions will be initialized from those and displayed in the UI.\n // Example: /admin/collections/posts?where[or][0][and][0][text][equals]=example%20post\n /*\n stored conditions look like this:\n [\n _or_ & _and_ queries have the same shape:\n {\n and: [{\n category: {\n equals: 'category-a'\n }\n }]\n },\n\n {\n and:[{\n category: {\n equals: 'category-b'\n },\n text: {\n not_equals: 'oranges'\n },\n }]\n }\n ]\n */\n\n const [conditions, setConditions] = React.useState(() => {\n const whereFromSearch = searchParams.where\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`)\n }\n\n return []\n })\n\n const addCondition = React.useCallback(({ andIndex, fieldName, orIndex, relation }) => {\n setConditions((prevConditions) => {\n const newConditions = [...prevConditions]\n if (relation === 'and') {\n newConditions[orIndex].and.splice(andIndex, 0, { [fieldName]: {} })\n } else {\n newConditions.push({\n and: [\n {\n [fieldName]: {},\n },\n ],\n })\n }\n\n return newConditions\n })\n }, [])\n\n const updateCondition = React.useCallback(\n ({ andIndex, fieldName: fieldNameArg, operator: operatorArg, orIndex, value: valueArg }) => {\n setConditions((prevConditions) => {\n const newConditions = [...prevConditions]\n if (typeof newConditions[orIndex].and[andIndex] === 'object') {\n const fieldName = fieldNameArg\n const operator = operatorArg\n const value = valueArg ?? (operator ? newConditions[orIndex].and[andIndex][operator] : '')\n\n if (fieldName && operator && ![null, undefined].includes(value)) {\n newConditions[orIndex].and[andIndex] = {\n [fieldName]: operator ? { [operator]: value } : {},\n }\n setShouldUpdateQuery(true)\n }\n }\n\n return newConditions\n })\n },\n [],\n )\n\n const removeCondition = React.useCallback(({ andIndex, orIndex }) => {\n setConditions((prevConditions) => {\n const newConditions = [...prevConditions]\n newConditions[orIndex].and.splice(andIndex, 1)\n\n if (newConditions[orIndex].and.length === 0) {\n newConditions.splice(orIndex, 1)\n }\n\n return newConditions\n })\n setShouldUpdateQuery(true)\n }, [])\n\n React.useEffect(() => {\n if (shouldUpdateQuery) {\n handleWhereChange({ or: conditions })\n setShouldUpdateQuery(false)\n }\n }, [conditions, handleWhereChange, shouldUpdateQuery])\n\n return (\n <div className={baseClass}>\n {conditions.length > 0 && (\n <React.Fragment>\n <div className={`${baseClass}__label`}>\n {t('general:filterWhere', { label: getTranslation(collectionPluralLabel, i18n) })}\n </div>\n <ul className={`${baseClass}__or-filters`}>\n {conditions.map((or, orIndex) => (\n <li key={orIndex}>\n {orIndex !== 0 && <div className={`${baseClass}__label`}>{t('general:or')}</div>}\n <ul className={`${baseClass}__and-filters`}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => {\n const initialFieldName = Object.keys(conditions[orIndex].and[andIndex])[0]\n const initialOperator =\n Object.keys(\n conditions[orIndex].and[andIndex]?.[initialFieldName] || {},\n )?.[0] || undefined\n const initialValue =\n conditions[orIndex].and[andIndex]?.[initialFieldName]?.[initialOperator] ||\n ''\n\n return (\n <li key={andIndex}>\n {andIndex !== 0 && (\n <div className={`${baseClass}__label`}>{t('general:and')}</div>\n )}\n <Condition\n addCondition={addCondition}\n andIndex={andIndex}\n fieldName={initialFieldName}\n fields={reducedFields}\n initialValue={initialValue}\n key={andIndex}\n operator={initialOperator}\n orIndex={orIndex}\n removeCondition={removeCondition}\n updateCondition={updateCondition}\n />\n </li>\n )\n })}\n </ul>\n </li>\n ))}\n </ul>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-or`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n addCondition({\n andIndex: 0,\n fieldName: reducedFields[0].value,\n orIndex: conditions.length,\n relation: 'or',\n })\n }}\n >\n {t('general:or')}\n </Button>\n </React.Fragment>\n )}\n {conditions.length === 0 && (\n <div className={`${baseClass}__no-filters`}>\n <div className={`${baseClass}__label`}>{t('general:noFiltersSet')}</div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-first-filter`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n if (reducedFields.length > 0) {\n addCondition({\n andIndex: 0,\n fieldName: reducedFields[0].value,\n orIndex: conditions.length,\n relation: 'or',\n })\n }\n }}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","React","useEffect","useState","useListQuery","useSearchParams","useTranslation","Button","useTableColumns","Condition","reduceFieldMap","transformWhereQuery","validateWhereQuery","baseClass","WhereBuilder","props","collectionPluralLabel","i18n","t","columns","reducedFields","setReducedColumns","searchParams","handleWhereChange","shouldUpdateQuery","setShouldUpdateQuery","conditions","setConditions","whereFromSearch","where","or","transformedWhere","console","warn","JSON","stringify","addCondition","useCallback","andIndex","fieldName","orIndex","relation","prevConditions","newConditions","and","splice","push","updateCondition","fieldNameArg","operator","operatorArg","value","valueArg","undefined","includes","removeCondition","length","div","className","Fragment","label","ul","map","li","key","Array","isArray","_","initialFieldName","Object","keys","initialOperator","initialValue","fields","buttonStyle","icon","iconPosition","iconStyle","onClick"],"mappings":"AAAA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAIlD,SAASC,YAAY,QAAQ,qCAAoC;AACjE,SAASC,eAAe,QAAQ,wCAAuC;AACvE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,MAAM,QAAQ,qBAAoB;AAC3C,SAASC,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,SAAS,QAAQ,uBAAsB;AAEhD,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,OAAOC,wBAAwB,0BAAyB;AAExD,MAAMC,YAAY;AAIlB;;;CAGC,GACD,OAAO,MAAMC,eAA4C,CAACC;IACxD,MAAM,EAAEC,qBAAqB,EAAE,GAAGD;IAClC,MAAM,EAAEE,IAAI,EAAEC,CAAC,EAAE,GAAGZ;IACpB,MAAM,EAAEa,OAAO,EAAE,GAAGX;IAEpB,MAAM,CAACY,eAAeC,kBAAkB,GAAGlB,SAAS,IAAMO,eAAeS,SAASF;IAElFf,UAAU;QACRmB,kBAAkBX,eAAeS,SAASF;IAC5C,GAAG;QAACE;QAASF;KAAK;IAElB,MAAM,EAAEK,YAAY,EAAE,GAAGjB;IACzB,MAAM,EAAEkB,iBAAiB,EAAE,GAAGnB;IAC9B,MAAM,CAACoB,mBAAmBC,qBAAqB,GAAGxB,MAAME,QAAQ,CAAC;IAEjE,uGAAuG;IACvG,wGAAwG;IACxG,sFAAsF;IACtF;;;;;;;;;;;;;;;;;;;;;;;EAuBA,GAEA,MAAM,CAACuB,YAAYC,cAAc,GAAG1B,MAAME,QAAQ,CAAC;QACjD,MAAMyB,kBAAkBN,aAAaO,KAAK;QAC1C,IAAID,iBAAiB;YACnB,IAAIhB,mBAAmBgB,kBAAkB;gBACvC,OAAOA,gBAAgBE,EAAE;YAC3B;YAEA,mJAAmJ;YACnJ,MAAMC,mBAAmBpB,oBAAoBiB;YAE7C,IAAIhB,mBAAmBmB,mBAAmB;gBACxC,OAAOA,iBAAiBD,EAAE;YAC5B;YAEAE,QAAQC,IAAI,CAAC,CAAC,4BAA4B,EAAEC,KAAKC,SAAS,CAACP,iBAAiB,CAAC;QAC/E;QAEA,OAAO,EAAE;IACX;IAEA,MAAMQ,eAAenC,MAAMoC,WAAW,CAAC,CAAC,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,EAAE;QAChFd,cAAc,CAACe;YACb,MAAMC,gBAAgB;mBAAID;aAAe;YACzC,IAAID,aAAa,OAAO;gBACtBE,aAAa,CAACH,QAAQ,CAACI,GAAG,CAACC,MAAM,CAACP,UAAU,GAAG;oBAAE,CAACC,UAAU,EAAE,CAAC;gBAAE;YACnE,OAAO;gBACLI,cAAcG,IAAI,CAAC;oBACjBF,KAAK;wBACH;4BACE,CAACL,UAAU,EAAE,CAAC;wBAChB;qBACD;gBACH;YACF;YAEA,OAAOI;QACT;IACF,GAAG,EAAE;IAEL,MAAMI,kBAAkB9C,MAAMoC,WAAW,CACvC,CAAC,EAAEC,QAAQ,EAAEC,WAAWS,YAAY,EAAEC,UAAUC,WAAW,EAAEV,OAAO,EAAEW,OAAOC,QAAQ,EAAE;QACrFzB,cAAc,CAACe;YACb,MAAMC,gBAAgB;mBAAID;aAAe;YACzC,IAAI,OAAOC,aAAa,CAACH,QAAQ,CAACI,GAAG,CAACN,SAAS,KAAK,UAAU;gBAC5D,MAAMC,YAAYS;gBAClB,MAAMC,WAAWC;gBACjB,MAAMC,QAAQC,YAAaH,CAAAA,WAAWN,aAAa,CAACH,QAAQ,CAACI,GAAG,CAACN,SAAS,CAACW,SAAS,GAAG,EAAC;gBAExF,IAAIV,aAAaU,YAAY,CAAC;oBAAC;oBAAMI;iBAAU,CAACC,QAAQ,CAACH,QAAQ;oBAC/DR,aAAa,CAACH,QAAQ,CAACI,GAAG,CAACN,SAAS,GAAG;wBACrC,CAACC,UAAU,EAAEU,WAAW;4BAAE,CAACA,SAAS,EAAEE;wBAAM,IAAI,CAAC;oBACnD;oBACA1B,qBAAqB;gBACvB;YACF;YAEA,OAAOkB;QACT;IACF,GACA,EAAE;IAGJ,MAAMY,kBAAkBtD,MAAMoC,WAAW,CAAC,CAAC,EAAEC,QAAQ,EAAEE,OAAO,EAAE;QAC9Db,cAAc,CAACe;YACb,MAAMC,gBAAgB;mBAAID;aAAe;YACzCC,aAAa,CAACH,QAAQ,CAACI,GAAG,CAACC,MAAM,CAACP,UAAU;YAE5C,IAAIK,aAAa,CAACH,QAAQ,CAACI,GAAG,CAACY,MAAM,KAAK,GAAG;gBAC3Cb,cAAcE,MAAM,CAACL,SAAS;YAChC;YAEA,OAAOG;QACT;QACAlB,qBAAqB;IACvB,GAAG,EAAE;IAELxB,MAAMC,SAAS,CAAC;QACd,IAAIsB,mBAAmB;YACrBD,kBAAkB;gBAAEO,IAAIJ;YAAW;YACnCD,qBAAqB;QACvB;IACF,GAAG;QAACC;QAAYH;QAAmBC;KAAkB;IAErD,qBACE,oBAACiC;QAAIC,WAAW7C;OACba,WAAW8B,MAAM,GAAG,mBACnB,oBAACvD,MAAM0D,QAAQ,sBACb,oBAACF;QAAIC,WAAW,CAAC,EAAE7C,UAAU,OAAO,CAAC;OAClCK,EAAE,uBAAuB;QAAE0C,OAAO5D,eAAegB,uBAAuBC;IAAM,mBAEjF,oBAAC4C;QAAGH,WAAW,CAAC,EAAE7C,UAAU,YAAY,CAAC;OACtCa,WAAWoC,GAAG,CAAC,CAAChC,IAAIU,wBACnB,oBAACuB;YAAGC,KAAKxB;WACNA,YAAY,mBAAK,oBAACiB;YAAIC,WAAW,CAAC,EAAE7C,UAAU,OAAO,CAAC;WAAGK,EAAE,8BAC5D,oBAAC2C;YAAGH,WAAW,CAAC,EAAE7C,UAAU,aAAa,CAAC;WACvCoD,MAAMC,OAAO,CAACpC,IAAIc,QACjBd,GAAGc,GAAG,CAACkB,GAAG,CAAC,CAACK,GAAG7B;YACb,MAAM8B,mBAAmBC,OAAOC,IAAI,CAAC5C,UAAU,CAACc,QAAQ,CAACI,GAAG,CAACN,SAAS,CAAC,CAAC,EAAE;YAC1E,MAAMiC,kBACJF,OAAOC,IAAI,CACT5C,UAAU,CAACc,QAAQ,CAACI,GAAG,CAACN,SAAS,EAAE,CAAC8B,iBAAiB,IAAI,CAAC,IACzD,CAAC,EAAE,IAAIf;YACZ,MAAMmB,eACJ9C,UAAU,CAACc,QAAQ,CAACI,GAAG,CAACN,SAAS,EAAE,CAAC8B,iBAAiB,EAAE,CAACG,gBAAgB,IACxE;YAEF,qBACE,oBAACR;gBAAGC,KAAK1B;eACNA,aAAa,mBACZ,oBAACmB;gBAAIC,WAAW,CAAC,EAAE7C,UAAU,OAAO,CAAC;eAAGK,EAAE,+BAE5C,oBAACT;gBACC2B,cAAcA;gBACdE,UAAUA;gBACVC,WAAW6B;gBACXK,QAAQrD;gBACRoD,cAAcA;gBACdR,KAAK1B;gBACLW,UAAUsB;gBACV/B,SAASA;gBACTe,iBAAiBA;gBACjBR,iBAAiBA;;QAIzB,sBAKV,oBAACxC;QACCmE,aAAY;QACZhB,WAAW,CAAC,EAAE7C,UAAU,QAAQ,CAAC;QACjC8D,MAAK;QACLC,cAAa;QACbC,WAAU;QACVC,SAAS;YACP1C,aAAa;gBACXE,UAAU;gBACVC,WAAWnB,aAAa,CAAC,EAAE,CAAC+B,KAAK;gBACjCX,SAASd,WAAW8B,MAAM;gBAC1Bf,UAAU;YACZ;QACF;OAECvB,EAAE,iBAIRQ,WAAW8B,MAAM,KAAK,mBACrB,oBAACC;QAAIC,WAAW,CAAC,EAAE7C,UAAU,YAAY,CAAC;qBACxC,oBAAC4C;QAAIC,WAAW,CAAC,EAAE7C,UAAU,OAAO,CAAC;OAAGK,EAAE,wCAC1C,oBAACX;QACCmE,aAAY;QACZhB,WAAW,CAAC,EAAE7C,UAAU,kBAAkB,CAAC;QAC3C8D,MAAK;QACLC,cAAa;QACbC,WAAU;QACVC,SAAS;YACP,IAAI1D,cAAcoC,MAAM,GAAG,GAAG;gBAC5BpB,aAAa;oBACXE,UAAU;oBACVC,WAAWnB,aAAa,CAAC,EAAE,CAAC+B,KAAK;oBACjCX,SAASd,WAAW8B,MAAM;oBAC1Bf,UAAU;gBACZ;YACF;QACF;OAECvB,EAAE;AAMf,EAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Column } from '../Table/index.js';
2
+ export declare const reduceFieldMap: (fieldMap: Column[], i18n: any) => any[];
3
+ //# sourceMappingURL=reduceFieldMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reduceFieldMap.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/reduceFieldMap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAI/C,eAAO,MAAM,cAAc,aAAc,MAAM,EAAE,qBAkCzC,CAAA"}
@@ -0,0 +1,36 @@
1
+ import fieldTypes from './field-types.js';
2
+ export const reduceFieldMap = (fieldMap, i18n)=>fieldMap.reduce((reduced, field)=>{
3
+ if (typeof fieldTypes[field.type] === 'object') {
4
+ const operatorKeys = new Set();
5
+ const operators = fieldTypes[field.type].operators.reduce((acc, operator)=>{
6
+ if (!operatorKeys.has(operator.value)) {
7
+ operatorKeys.add(operator.value);
8
+ return [
9
+ ...acc,
10
+ {
11
+ ...operator,
12
+ label: i18n.t(`operators:${operator.label}`)
13
+ }
14
+ ];
15
+ }
16
+ return acc;
17
+ }, []);
18
+ const formattedField = {
19
+ label: field.Label,
20
+ value: field.name,
21
+ ...fieldTypes[field.type],
22
+ operators,
23
+ props: {
24
+ ...field,
25
+ ...field?.cellProps || {}
26
+ }
27
+ };
28
+ return [
29
+ ...reduced,
30
+ formattedField
31
+ ];
32
+ }
33
+ return reduced;
34
+ }, []);
35
+
36
+ //# sourceMappingURL=reduceFieldMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/elements/WhereBuilder/reduceFieldMap.tsx"],"sourcesContent":["import type { Column } from '../Table/index.js'\n\nimport fieldTypes from './field-types.js'\n\nexport const reduceFieldMap = (fieldMap: Column[], i18n) =>\n fieldMap.reduce((reduced, field) => {\n if (typeof fieldTypes[field.type] === 'object') {\n const operatorKeys = new Set()\n\n const operators = fieldTypes[field.type].operators.reduce((acc, operator) => {\n if (!operatorKeys.has(operator.value)) {\n operatorKeys.add(operator.value)\n return [\n ...acc,\n {\n ...operator,\n label: i18n.t(`operators:${operator.label}`),\n },\n ]\n }\n return acc\n }, [])\n\n const formattedField = {\n label: field.Label,\n value: field.name,\n ...fieldTypes[field.type],\n operators,\n props: {\n ...field,\n ...(field?.cellProps || {}),\n },\n }\n\n return [...reduced, formattedField]\n }\n\n return reduced\n }, [])\n"],"names":["fieldTypes","reduceFieldMap","fieldMap","i18n","reduce","reduced","field","type","operatorKeys","Set","operators","acc","operator","has","value","add","label","t","formattedField","Label","name","props","cellProps"],"mappings":"AAEA,OAAOA,gBAAgB,mBAAkB;AAEzC,OAAO,MAAMC,iBAAiB,CAACC,UAAoBC,OACjDD,SAASE,MAAM,CAAC,CAACC,SAASC;QACxB,IAAI,OAAON,UAAU,CAACM,MAAMC,IAAI,CAAC,KAAK,UAAU;YAC9C,MAAMC,eAAe,IAAIC;YAEzB,MAAMC,YAAYV,UAAU,CAACM,MAAMC,IAAI,CAAC,CAACG,SAAS,CAACN,MAAM,CAAC,CAACO,KAAKC;gBAC9D,IAAI,CAACJ,aAAaK,GAAG,CAACD,SAASE,KAAK,GAAG;oBACrCN,aAAaO,GAAG,CAACH,SAASE,KAAK;oBAC/B,OAAO;2BACFH;wBACH;4BACE,GAAGC,QAAQ;4BACXI,OAAOb,KAAKc,CAAC,CAAC,CAAC,UAAU,EAAEL,SAASI,KAAK,CAAC,CAAC;wBAC7C;qBACD;gBACH;gBACA,OAAOL;YACT,GAAG,EAAE;YAEL,MAAMO,iBAAiB;gBACrBF,OAAOV,MAAMa,KAAK;gBAClBL,OAAOR,MAAMc,IAAI;gBACjB,GAAGpB,UAAU,CAACM,MAAMC,IAAI,CAAC;gBACzBG;gBACAW,OAAO;oBACL,GAAGf,KAAK;oBACR,GAAIA,OAAOgB,aAAa,CAAC,CAAC;gBAC5B;YACF;YAEA,OAAO;mBAAIjB;gBAASa;aAAe;QACrC;QAEA,OAAOb;IACT,GAAG,EAAE,EAAC"}
@@ -20,7 +20,7 @@ import React from 'react';
20
20
  */ export function withMergedProps({ Component, toMergeIntoProps }) {
21
21
  // A wrapper around the args.Component to inject the args.toMergeArgs as props, which are merged with the passed props
22
22
  const MergedPropsComponent = (passedProps)=>{
23
- const mergedProps = deepMerge(toMergeIntoProps, passedProps);
23
+ const mergedProps = deepMerge(passedProps, toMergeIntoProps);
24
24
  return /*#__PURE__*/ React.createElement(Component, mergedProps);
25
25
  };
26
26
  return MergedPropsComponent;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/withMergedProps/index.tsx"],"sourcesContent":["import { deepMerge } from 'payload/utilities'\nimport React from 'react'\n\n/**\n * Creates a higher-order component (HOC) that merges predefined properties (`toMergeIntoProps`)\n * with any properties passed to the resulting component.\n *\n * Use this when you want to pre-specify some props for a component, while also allowing users to\n * pass in their own props. The HOC ensures the passed props and predefined props are combined before\n * rendering the original component.\n *\n * @example\n * const PredefinedComponent = getMergedPropsComponent({\n * Component: OriginalComponent,\n * toMergeIntoProps: { someExtraValue: 5 }\n * });\n * // Using <PredefinedComponent customProp=\"value\" /> will result in\n * // <OriginalComponent customProp=\"value\" someExtraValue={5} />\n *\n * @returns A higher-order component with combined properties.\n */\nexport function withMergedProps<ToMergeIntoProps, CompleteReturnProps>({\n Component,\n toMergeIntoProps,\n}: {\n Component: React.FC<CompleteReturnProps>\n toMergeIntoProps: ToMergeIntoProps\n}): React.FC<CompleteReturnProps> {\n // A wrapper around the args.Component to inject the args.toMergeArgs as props, which are merged with the passed props\n const MergedPropsComponent: React.FC<CompleteReturnProps> = (passedProps) => {\n const mergedProps = deepMerge(toMergeIntoProps, passedProps)\n return <Component {...mergedProps} />\n }\n\n return MergedPropsComponent\n}\n"],"names":["deepMerge","React","withMergedProps","Component","toMergeIntoProps","MergedPropsComponent","passedProps","mergedProps"],"mappings":"AAAA,SAASA,SAAS,QAAQ,oBAAmB;AAC7C,OAAOC,WAAW,QAAO;AAEzB;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,SAASC,gBAAuD,EACrEC,SAAS,EACTC,gBAAgB,EAIjB;IACC,sHAAsH;IACtH,MAAMC,uBAAsD,CAACC;QAC3D,MAAMC,cAAcP,UAAUI,kBAAkBE;QAChD,qBAAO,oBAACH,WAAcI;IACxB;IAEA,OAAOF;AACT"}
1
+ {"version":3,"sources":["../../../src/elements/withMergedProps/index.tsx"],"sourcesContent":["import { deepMerge } from 'payload/utilities'\nimport React from 'react'\n\n/**\n * Creates a higher-order component (HOC) that merges predefined properties (`toMergeIntoProps`)\n * with any properties passed to the resulting component.\n *\n * Use this when you want to pre-specify some props for a component, while also allowing users to\n * pass in their own props. The HOC ensures the passed props and predefined props are combined before\n * rendering the original component.\n *\n * @example\n * const PredefinedComponent = getMergedPropsComponent({\n * Component: OriginalComponent,\n * toMergeIntoProps: { someExtraValue: 5 }\n * });\n * // Using <PredefinedComponent customProp=\"value\" /> will result in\n * // <OriginalComponent customProp=\"value\" someExtraValue={5} />\n *\n * @returns A higher-order component with combined properties.\n */\nexport function withMergedProps<ToMergeIntoProps, CompleteReturnProps>({\n Component,\n toMergeIntoProps,\n}: {\n Component: React.FC<CompleteReturnProps>\n toMergeIntoProps: ToMergeIntoProps\n}): React.FC<CompleteReturnProps> {\n // A wrapper around the args.Component to inject the args.toMergeArgs as props, which are merged with the passed props\n const MergedPropsComponent: React.FC<CompleteReturnProps> = (passedProps) => {\n const mergedProps = deepMerge(passedProps, toMergeIntoProps)\n return <Component {...mergedProps} />\n }\n\n return MergedPropsComponent\n}\n"],"names":["deepMerge","React","withMergedProps","Component","toMergeIntoProps","MergedPropsComponent","passedProps","mergedProps"],"mappings":"AAAA,SAASA,SAAS,QAAQ,oBAAmB;AAC7C,OAAOC,WAAW,QAAO;AAEzB;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,SAASC,gBAAuD,EACrEC,SAAS,EACTC,gBAAgB,EAIjB;IACC,sHAAsH;IACtH,MAAMC,uBAAsD,CAACC;QAC3D,MAAMC,cAAcP,UAAUM,aAAaF;QAC3C,qBAAO,oBAACD,WAAcI;IACxB;IAEA,OAAOF;AACT"}
@@ -8,6 +8,7 @@ type ArrayRowProps = UseDraggableSortableReturn & {
8
8
  CustomRowLabel?: React.ReactNode;
9
9
  addRow: (rowIndex: number) => void;
10
10
  duplicateRow: (rowIndex: number) => void;
11
+ errorCount: number;
11
12
  fieldMap: FieldMap;
12
13
  forceRender?: boolean;
13
14
  hasMaxRows?: boolean;
@@ -21,6 +22,7 @@ type ArrayRowProps = UseDraggableSortableReturn & {
21
22
  row: Row;
22
23
  rowCount: number;
23
24
  rowIndex: number;
25
+ schemaPath: string;
24
26
  setCollapse: (rowID: string, collapsed: boolean) => void;
25
27
  };
26
28
  export declare const ArrayRow: React.FC<ArrayRowProps>;