@payloadcms/ui 3.24.0-canary.f229d8d → 3.25.0-canary.36940b2

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 (254) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js +143 -108
  3. package/dist/elements/Autosave/index.js.map +1 -1
  4. package/dist/elements/BulkUpload/EditMany/DrawerContent.d.ts.map +1 -1
  5. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +22 -20
  6. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  7. package/dist/elements/Button/index.d.ts.map +1 -1
  8. package/dist/elements/Button/index.js +1 -0
  9. package/dist/elements/Button/index.js.map +1 -1
  10. package/dist/elements/Button/index.scss +21 -5
  11. package/dist/elements/ConfirmationModal/index.d.ts +16 -0
  12. package/dist/elements/ConfirmationModal/index.d.ts.map +1 -0
  13. package/dist/elements/ConfirmationModal/index.js +157 -0
  14. package/dist/elements/ConfirmationModal/index.js.map +1 -0
  15. package/dist/elements/{GenerateConfirmation → ConfirmationModal}/index.scss +1 -1
  16. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  17. package/dist/elements/DatePicker/DatePicker.js +2 -0
  18. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  19. package/dist/elements/DatePicker/types.d.ts +1 -0
  20. package/dist/elements/DatePicker/types.d.ts.map +1 -1
  21. package/dist/elements/DatePicker/types.js.map +1 -1
  22. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  23. package/dist/elements/DeleteDocument/index.js +31 -79
  24. package/dist/elements/DeleteDocument/index.js.map +1 -1
  25. package/dist/elements/DeleteDocument/index.scss +0 -29
  26. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  27. package/dist/elements/DeleteMany/index.js +18 -45
  28. package/dist/elements/DeleteMany/index.js.map +1 -1
  29. package/dist/elements/DeleteMany/index.scss +14 -27
  30. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  31. package/dist/elements/DocumentControls/index.js.map +1 -1
  32. package/dist/elements/DuplicateDocument/index.d.ts +0 -1
  33. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  34. package/dist/elements/DuplicateDocument/index.js +25 -54
  35. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  36. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  37. package/dist/elements/EditMany/DrawerContent.js +3 -2
  38. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  39. package/dist/elements/EditMany/index.d.ts.map +1 -1
  40. package/dist/elements/EditMany/index.js +22 -14
  41. package/dist/elements/EditMany/index.js.map +1 -1
  42. package/dist/elements/EditMany/index.scss +5 -19
  43. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts +1 -0
  44. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts.map +1 -1
  45. package/dist/elements/FileDetails/DraggableFileDetails/index.js +19 -17
  46. package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
  47. package/dist/elements/FileDetails/StaticFileDetails/index.d.ts +1 -0
  48. package/dist/elements/FileDetails/StaticFileDetails/index.d.ts.map +1 -1
  49. package/dist/elements/FileDetails/StaticFileDetails/index.js +2 -1
  50. package/dist/elements/FileDetails/StaticFileDetails/index.js.map +1 -1
  51. package/dist/elements/FileDetails/index.d.ts +1 -0
  52. package/dist/elements/FileDetails/index.d.ts.map +1 -1
  53. package/dist/elements/FileDetails/index.js.map +1 -1
  54. package/dist/elements/GenerateConfirmation/index.d.ts +1 -2
  55. package/dist/elements/GenerateConfirmation/index.d.ts.map +1 -1
  56. package/dist/elements/GenerateConfirmation/index.js +23 -47
  57. package/dist/elements/GenerateConfirmation/index.js.map +1 -1
  58. package/dist/elements/LeaveWithoutSaving/index.d.ts +0 -1
  59. package/dist/elements/LeaveWithoutSaving/index.d.ts.map +1 -1
  60. package/dist/elements/LeaveWithoutSaving/index.js +56 -113
  61. package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
  62. package/dist/elements/ListControls/index.d.ts +9 -0
  63. package/dist/elements/ListControls/index.d.ts.map +1 -1
  64. package/dist/elements/ListControls/index.js +17 -19
  65. package/dist/elements/ListControls/index.js.map +1 -1
  66. package/dist/elements/ListControls/index.scss +5 -0
  67. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  68. package/dist/elements/ListDrawer/DrawerContent.js +4 -1
  69. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  70. package/dist/elements/ListDrawer/Provider.d.ts +8 -1
  71. package/dist/elements/ListDrawer/Provider.d.ts.map +1 -1
  72. package/dist/elements/ListDrawer/Provider.js.map +1 -1
  73. package/dist/elements/ListSelection/index.d.ts +4 -0
  74. package/dist/elements/ListSelection/index.d.ts.map +1 -1
  75. package/dist/elements/ListSelection/index.js +44 -23
  76. package/dist/elements/ListSelection/index.js.map +1 -1
  77. package/dist/elements/ListSelection/index.scss +4 -0
  78. package/dist/elements/Localizer/LocalizerLabel/index.d.ts.map +1 -1
  79. package/dist/elements/Localizer/LocalizerLabel/index.js +11 -8
  80. package/dist/elements/Localizer/LocalizerLabel/index.js.map +1 -1
  81. package/dist/elements/Localizer/index.d.ts.map +1 -1
  82. package/dist/elements/Localizer/index.js +2 -0
  83. package/dist/elements/Localizer/index.js.map +1 -1
  84. package/dist/elements/Popup/index.d.ts +1 -0
  85. package/dist/elements/Popup/index.d.ts.map +1 -1
  86. package/dist/elements/Popup/index.js +2 -0
  87. package/dist/elements/Popup/index.js.map +1 -1
  88. package/dist/elements/PreviewButton/index.d.ts +2 -1
  89. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  90. package/dist/elements/PreviewButton/index.js +2 -2
  91. package/dist/elements/PreviewButton/index.js.map +1 -1
  92. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts +1 -2
  93. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts.map +1 -1
  94. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js.map +1 -1
  95. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts +2 -0
  96. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  97. package/dist/elements/PublishButton/ScheduleDrawer/index.js +6 -2
  98. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  99. package/dist/elements/PublishButton/index.d.ts +2 -3
  100. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  101. package/dist/elements/PublishButton/index.js +20 -17
  102. package/dist/elements/PublishButton/index.js.map +1 -1
  103. package/dist/elements/PublishMany/index.d.ts.map +1 -1
  104. package/dist/elements/PublishMany/index.js +21 -46
  105. package/dist/elements/PublishMany/index.js.map +1 -1
  106. package/dist/elements/PublishMany/index.scss +14 -32
  107. package/dist/elements/RelationshipTable/index.d.ts +7 -2
  108. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  109. package/dist/elements/RelationshipTable/index.js +69 -23
  110. package/dist/elements/RelationshipTable/index.js.map +1 -1
  111. package/dist/elements/RelationshipTable/index.scss +6 -0
  112. package/dist/elements/SaveButton/index.d.ts +2 -3
  113. package/dist/elements/SaveButton/index.d.ts.map +1 -1
  114. package/dist/elements/SaveButton/index.js +3 -3
  115. package/dist/elements/SaveButton/index.js.map +1 -1
  116. package/dist/elements/SaveDraftButton/index.d.ts +2 -1
  117. package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
  118. package/dist/elements/SaveDraftButton/index.js +2 -2
  119. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  120. package/dist/elements/Status/index.d.ts.map +1 -1
  121. package/dist/elements/Status/index.js +173 -154
  122. package/dist/elements/Status/index.js.map +1 -1
  123. package/dist/elements/Status/index.scss +0 -41
  124. package/dist/elements/StayLoggedIn/index.d.ts +0 -1
  125. package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
  126. package/dist/elements/StayLoggedIn/index.js +45 -77
  127. package/dist/elements/StayLoggedIn/index.js.map +1 -1
  128. package/dist/elements/Table/index.d.ts +1 -9
  129. package/dist/elements/Table/index.d.ts.map +1 -1
  130. package/dist/elements/Table/index.js.map +1 -1
  131. package/dist/elements/TableColumns/RenderDefaultCell/index.d.ts.map +1 -1
  132. package/dist/elements/TableColumns/RenderDefaultCell/index.js +1 -0
  133. package/dist/elements/TableColumns/RenderDefaultCell/index.js.map +1 -1
  134. package/dist/elements/TableColumns/buildColumnState.d.ts +1 -2
  135. package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
  136. package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
  137. package/dist/elements/TableColumns/buildPolymorphicColumnState.d.ts +20 -0
  138. package/dist/elements/TableColumns/buildPolymorphicColumnState.d.ts.map +1 -0
  139. package/dist/elements/TableColumns/buildPolymorphicColumnState.js +200 -0
  140. package/dist/elements/TableColumns/buildPolymorphicColumnState.js.map +1 -0
  141. package/dist/elements/TableColumns/index.d.ts +2 -3
  142. package/dist/elements/TableColumns/index.d.ts.map +1 -1
  143. package/dist/elements/TableColumns/index.js +4 -3
  144. package/dist/elements/TableColumns/index.js.map +1 -1
  145. package/dist/elements/UnpublishMany/index.d.ts +1 -1
  146. package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
  147. package/dist/elements/UnpublishMany/index.js +16 -43
  148. package/dist/elements/UnpublishMany/index.js.map +1 -1
  149. package/dist/elements/UnpublishMany/index.scss +14 -32
  150. package/dist/elements/Upload/index.d.ts.map +1 -1
  151. package/dist/elements/Upload/index.js +5 -1
  152. package/dist/elements/Upload/index.js.map +1 -1
  153. package/dist/elements/ViewDescription/index.d.ts +2 -5
  154. package/dist/elements/ViewDescription/index.d.ts.map +1 -1
  155. package/dist/elements/ViewDescription/index.js +2 -2
  156. package/dist/elements/ViewDescription/index.js.map +1 -1
  157. package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
  158. package/dist/elements/WhereBuilder/field-types.js +9 -5
  159. package/dist/elements/WhereBuilder/field-types.js.map +1 -1
  160. package/dist/exports/client/{CodeEditor-L6GW2VQ6.js → CodeEditor-G3Y4UHC4.js} +2 -2
  161. package/dist/exports/client/{CodeEditor-L6GW2VQ6.js.map → CodeEditor-G3Y4UHC4.js.map} +0 -1
  162. package/dist/exports/client/{DatePicker-THCU4KZJ.js → DatePicker-HHQ6TPOW.js} +2 -2
  163. package/dist/exports/client/{DatePicker-THCU4KZJ.js.map → DatePicker-HHQ6TPOW.js.map} +0 -1
  164. package/dist/exports/client/{chunk-ZZDNSFEW.js → chunk-4L367VSB.js} +2 -2
  165. package/dist/exports/client/{chunk-ZZDNSFEW.js.map → chunk-4L367VSB.js.map} +2 -3
  166. package/dist/exports/client/chunk-5LKBKI4T.js.map +0 -1
  167. package/dist/exports/client/{chunk-EG3ZOHFS.js → chunk-IMEQ6NKQ.js} +2 -2
  168. package/dist/exports/client/{chunk-EG3ZOHFS.js.map → chunk-IMEQ6NKQ.js.map} +3 -4
  169. package/dist/exports/client/index.d.ts +46 -4
  170. package/dist/exports/client/index.d.ts.map +1 -1
  171. package/dist/exports/client/index.js +11 -11
  172. package/dist/exports/client/index.js.map +4 -5
  173. package/dist/fields/Blocks/BlocksDrawer/index.d.ts.map +1 -1
  174. package/dist/fields/Blocks/BlocksDrawer/index.js +85 -103
  175. package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
  176. package/dist/fields/Blocks/BlocksDrawer/index.scss +43 -0
  177. package/dist/fields/DateTime/index.d.ts.map +1 -1
  178. package/dist/fields/DateTime/index.js +24 -6
  179. package/dist/fields/DateTime/index.js.map +1 -1
  180. package/dist/fields/Join/index.d.ts.map +1 -1
  181. package/dist/fields/Join/index.js +8 -3
  182. package/dist/fields/Join/index.js.map +1 -1
  183. package/dist/fields/Select/Input.d.ts.map +1 -1
  184. package/dist/fields/Select/Input.js +2 -0
  185. package/dist/fields/Select/Input.js.map +1 -1
  186. package/dist/fields/Tabs/Tab/index.scss +2 -1
  187. package/dist/fields/Upload/Input.d.ts +1 -0
  188. package/dist/fields/Upload/Input.d.ts.map +1 -1
  189. package/dist/fields/Upload/Input.js +13 -13
  190. package/dist/fields/Upload/Input.js.map +1 -1
  191. package/dist/forms/Form/context.d.ts +3 -3
  192. package/dist/forms/Form/context.js +3 -3
  193. package/dist/forms/Form/context.js.map +1 -1
  194. package/dist/forms/Form/index.d.ts.map +1 -1
  195. package/dist/forms/Form/index.js +19 -8
  196. package/dist/forms/Form/index.js.map +1 -1
  197. package/dist/forms/Form/initContextState.d.ts.map +1 -1
  198. package/dist/forms/Form/initContextState.js +2 -0
  199. package/dist/forms/Form/initContextState.js.map +1 -1
  200. package/dist/forms/Form/types.d.ts +6 -0
  201. package/dist/forms/Form/types.d.ts.map +1 -1
  202. package/dist/forms/Form/types.js.map +1 -1
  203. package/dist/forms/useField/index.d.ts +1 -1
  204. package/dist/forms/useField/index.js +1 -1
  205. package/dist/forms/useField/index.js.map +1 -1
  206. package/dist/icons/Dots/index.d.ts +7 -0
  207. package/dist/icons/Dots/index.d.ts.map +1 -0
  208. package/dist/icons/Dots/index.js +12 -0
  209. package/dist/icons/Dots/index.js.map +1 -0
  210. package/dist/icons/Dots/index.scss +27 -0
  211. package/dist/providers/Selection/index.d.ts.map +1 -1
  212. package/dist/providers/Selection/index.js +5 -6
  213. package/dist/providers/Selection/index.js.map +1 -1
  214. package/dist/styles.css +1 -1
  215. package/dist/utilities/buildTableState.d.ts +1 -2
  216. package/dist/utilities/buildTableState.d.ts.map +1 -1
  217. package/dist/utilities/buildTableState.js +72 -20
  218. package/dist/utilities/buildTableState.js.map +1 -1
  219. package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
  220. package/dist/utilities/copyDataFromLocale.js +20 -14
  221. package/dist/utilities/copyDataFromLocale.js.map +1 -1
  222. package/dist/utilities/handleFormStateLocking.d.ts.map +1 -1
  223. package/dist/utilities/handleFormStateLocking.js +3 -6
  224. package/dist/utilities/handleFormStateLocking.js.map +1 -1
  225. package/dist/utilities/renderTable.d.ts +6 -4
  226. package/dist/utilities/renderTable.d.ts.map +1 -1
  227. package/dist/utilities/renderTable.js +49 -17
  228. package/dist/utilities/renderTable.js.map +1 -1
  229. package/dist/utilities/upsertPreferences.d.ts +5 -1
  230. package/dist/utilities/upsertPreferences.d.ts.map +1 -1
  231. package/dist/utilities/upsertPreferences.js +11 -14
  232. package/dist/utilities/upsertPreferences.js.map +1 -1
  233. package/dist/views/Edit/Auth/index.d.ts.map +1 -1
  234. package/dist/views/Edit/Auth/index.js +56 -55
  235. package/dist/views/Edit/Auth/index.js.map +1 -1
  236. package/dist/views/Edit/index.d.ts +2 -2
  237. package/dist/views/Edit/index.d.ts.map +1 -1
  238. package/dist/views/Edit/index.js +3 -3
  239. package/dist/views/Edit/index.js.map +1 -1
  240. package/dist/views/List/ListHeader/index.d.ts +2 -0
  241. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  242. package/dist/views/List/ListHeader/index.js +5 -0
  243. package/dist/views/List/ListHeader/index.js.map +1 -1
  244. package/dist/views/List/index.d.ts +2 -25
  245. package/dist/views/List/index.d.ts.map +1 -1
  246. package/dist/views/List/index.js +17 -23
  247. package/dist/views/List/index.js.map +1 -1
  248. package/dist/views/List/types.d.ts +1 -18
  249. package/dist/views/List/types.d.ts.map +1 -1
  250. package/dist/views/List/types.js.map +1 -1
  251. package/package.json +5 -5
  252. package/dist/elements/DuplicateDocument/index.scss +0 -42
  253. package/dist/elements/LeaveWithoutSaving/index.scss +0 -39
  254. package/dist/elements/StayLoggedIn/index.scss +0 -40
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/Blocks/BlocksDrawer/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAIlD,OAAO,KAA8B,MAAM,OAAO,CAAA;AAOlD,OAAO,cAAc,CAAA;AAGrB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC5E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,CAAA;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAA;AAcD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAqExC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/Blocks/BlocksDrawer/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAIlD,OAAO,KAAuC,MAAM,OAAO,CAAA;AAO3D,OAAO,cAAc,CAAA;AAGrB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC5E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,CAAA;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAA;AAcD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6GxC,CAAA"}
@@ -1,10 +1,9 @@
1
1
  'use client';
2
2
 
3
- import { c as _c } from "react/compiler-runtime";
4
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
4
  import { useModal } from '@faceless-ui/modal';
6
5
  import { getTranslation } from '@payloadcms/translations';
7
- import React, { useEffect, useState } from 'react';
6
+ import React, { useEffect, useMemo, useState } from 'react';
8
7
  import { Drawer } from '../../../elements/Drawer/index.js';
9
8
  import { ThumbnailCard } from '../../../elements/ThumbnailCard/index.js';
10
9
  import { DefaultBlockImage } from '../../../graphics/DefaultBlockImage/index.js';
@@ -23,7 +22,6 @@ const getBlockLabel = (block, i18n) => {
23
22
  return '';
24
23
  };
25
24
  export const BlocksDrawer = props => {
26
- const $ = _c(20);
27
25
  const {
28
26
  addRow,
29
27
  addRowIndex,
@@ -31,7 +29,7 @@ export const BlocksDrawer = props => {
31
29
  drawerSlug,
32
30
  labels
33
31
  } = props;
34
- const [searchTerm, setSearchTerm] = useState("");
32
+ const [searchTerm, setSearchTerm] = useState('');
35
33
  const [filteredBlocks, setFilteredBlocks] = useState(blocks);
36
34
  const {
37
35
  closeModal,
@@ -44,107 +42,91 @@ export const BlocksDrawer = props => {
44
42
  const {
45
43
  config
46
44
  } = useConfig();
47
- let t0;
48
- let t1;
49
- if ($[0] !== drawerSlug || $[1] !== isModalOpen) {
50
- t0 = () => {
51
- if (!isModalOpen(drawerSlug)) {
52
- setSearchTerm("");
53
- }
45
+ const blockGroups = useMemo(() => {
46
+ const groups = {
47
+ _none: []
54
48
  };
55
- t1 = [isModalOpen, drawerSlug];
56
- $[0] = drawerSlug;
57
- $[1] = isModalOpen;
58
- $[2] = t0;
59
- $[3] = t1;
60
- } else {
61
- t0 = $[2];
62
- t1 = $[3];
63
- }
64
- useEffect(t0, t1);
65
- let t2;
66
- let t3;
67
- if ($[4] !== blocks || $[5] !== config.blocksMap || $[6] !== i18n || $[7] !== searchTerm) {
68
- t2 = () => {
69
- const searchTermToUse = searchTerm.toLowerCase();
70
- const matchingBlocks = blocks?.reduce((matchedBlocks, _block) => {
71
- const block = typeof _block === "string" ? config.blocksMap[_block] : _block;
72
- const blockLabel = getBlockLabel(block, i18n);
73
- if (blockLabel.includes(searchTermToUse)) {
74
- matchedBlocks.push(block);
49
+ filteredBlocks.forEach(block => {
50
+ if (typeof block === 'object' && block.admin?.group) {
51
+ const group = block.admin.group;
52
+ const label = typeof group === 'string' ? group : getTranslation(group, i18n);
53
+ if (Object.hasOwn(groups, label)) {
54
+ groups[label].push(block);
55
+ } else {
56
+ groups[label] = [block];
75
57
  }
76
- return matchedBlocks;
77
- }, []);
78
- setFilteredBlocks(matchingBlocks);
79
- };
80
- t3 = [searchTerm, blocks, i18n, config.blocksMap];
81
- $[4] = blocks;
82
- $[5] = config.blocksMap;
83
- $[6] = i18n;
84
- $[7] = searchTerm;
85
- $[8] = t2;
86
- $[9] = t3;
87
- } else {
88
- t2 = $[8];
89
- t3 = $[9];
90
- }
91
- useEffect(t2, t3);
92
- let t4;
93
- if ($[10] !== addRow || $[11] !== addRowIndex || $[12] !== closeModal || $[13] !== config.blocksMap || $[14] !== drawerSlug || $[15] !== filteredBlocks || $[16] !== i18n || $[17] !== labels.singular || $[18] !== t) {
94
- t4 = _jsxs(Drawer, {
95
- slug: drawerSlug,
96
- title: t("fields:addLabel", {
97
- label: getTranslation(labels.singular, i18n)
98
- }),
99
- children: [_jsx(BlockSearch, {
100
- setSearchTerm
101
- }), _jsx("div", {
102
- className: `${baseClass}__blocks-wrapper`,
103
- children: _jsx("ul", {
104
- className: `${baseClass}__blocks`,
105
- children: filteredBlocks?.map((_block_0, index) => {
106
- const block_0 = typeof _block_0 === "string" ? config.blocksMap[_block_0] : _block_0;
107
- const {
108
- slug,
109
- imageAltText,
110
- imageURL,
111
- labels: blockLabels
112
- } = block_0;
113
- return _jsx("li", {
114
- className: `${baseClass}__block`,
115
- children: _jsx(ThumbnailCard, {
116
- alignLabel: "center",
117
- label: getTranslation(blockLabels?.singular, i18n),
118
- onClick: () => {
119
- addRow(addRowIndex, slug);
120
- closeModal(drawerSlug);
121
- },
122
- thumbnail: imageURL ? _jsx("img", {
123
- alt: imageAltText,
124
- src: imageURL
125
- }) : _jsx("div", {
126
- className: `${baseClass}__default-image`,
127
- children: _jsx(DefaultBlockImage, {})
128
- })
129
- })
130
- }, index);
131
- })
132
- })
133
- })]
58
+ } else {
59
+ groups._none.push(block);
60
+ }
134
61
  });
135
- $[10] = addRow;
136
- $[11] = addRowIndex;
137
- $[12] = closeModal;
138
- $[13] = config.blocksMap;
139
- $[14] = drawerSlug;
140
- $[15] = filteredBlocks;
141
- $[16] = i18n;
142
- $[17] = labels.singular;
143
- $[18] = t;
144
- $[19] = t4;
145
- } else {
146
- t4 = $[19];
147
- }
148
- return t4;
62
+ return groups;
63
+ }, [filteredBlocks, i18n]);
64
+ useEffect(() => {
65
+ if (!isModalOpen(drawerSlug)) {
66
+ setSearchTerm('');
67
+ }
68
+ }, [isModalOpen, drawerSlug]);
69
+ useEffect(() => {
70
+ const searchTermToUse = searchTerm.toLowerCase();
71
+ const matchingBlocks = blocks?.reduce((matchedBlocks, _block) => {
72
+ const block_0 = typeof _block === 'string' ? config.blocksMap[_block] : _block;
73
+ const blockLabel = getBlockLabel(block_0, i18n);
74
+ if (blockLabel.includes(searchTermToUse)) {
75
+ matchedBlocks.push(block_0);
76
+ }
77
+ return matchedBlocks;
78
+ }, []);
79
+ setFilteredBlocks(matchingBlocks);
80
+ }, [searchTerm, blocks, i18n, config.blocksMap]);
81
+ return /*#__PURE__*/_jsxs(Drawer, {
82
+ slug: drawerSlug,
83
+ title: t('fields:addLabel', {
84
+ label: getTranslation(labels.singular, i18n)
85
+ }),
86
+ children: [/*#__PURE__*/_jsx(BlockSearch, {
87
+ setSearchTerm: setSearchTerm
88
+ }), /*#__PURE__*/_jsx("div", {
89
+ className: `${baseClass}__blocks-wrapper`,
90
+ children: /*#__PURE__*/_jsx("ul", {
91
+ className: `${baseClass}__block-groups`,
92
+ children: Object.entries(blockGroups).map(([groupLabel, groupBlocks]) => !groupBlocks.length ? null : /*#__PURE__*/_jsxs("li", {
93
+ className: [`${baseClass}__block-group`, groupLabel === '_none' && `${baseClass}__block-group-none`].filter(Boolean).join(' '),
94
+ children: [groupLabel !== '_none' && /*#__PURE__*/_jsx("h3", {
95
+ className: `${baseClass}__block-group-label`,
96
+ children: groupLabel
97
+ }), /*#__PURE__*/_jsx("ul", {
98
+ className: `${baseClass}__blocks`,
99
+ children: groupBlocks.map((_block_0, index) => {
100
+ const block_1 = typeof _block_0 === 'string' ? config.blocksMap[_block_0] : _block_0;
101
+ const {
102
+ slug,
103
+ imageAltText,
104
+ imageURL,
105
+ labels: blockLabels
106
+ } = block_1;
107
+ return /*#__PURE__*/_jsx("li", {
108
+ className: `${baseClass}__block`,
109
+ children: /*#__PURE__*/_jsx(ThumbnailCard, {
110
+ alignLabel: "center",
111
+ label: getTranslation(blockLabels?.singular, i18n),
112
+ onClick: () => {
113
+ void addRow(addRowIndex, slug);
114
+ closeModal(drawerSlug);
115
+ },
116
+ thumbnail: imageURL ? /*#__PURE__*/_jsx("img", {
117
+ alt: imageAltText,
118
+ src: imageURL
119
+ }) : /*#__PURE__*/_jsx("div", {
120
+ className: `${baseClass}__default-image`,
121
+ children: /*#__PURE__*/_jsx(DefaultBlockImage, {})
122
+ })
123
+ })
124
+ }, index);
125
+ })
126
+ })]
127
+ }, groupLabel))
128
+ })
129
+ })]
130
+ });
149
131
  };
150
132
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useModal","getTranslation","React","useEffect","useState","Drawer","ThumbnailCard","DefaultBlockImage","useConfig","useTranslation","BlockSearch","baseClass","getBlockLabel","block","i18n","labels","singular","toLowerCase","BlocksDrawer","props","$","addRow","addRowIndex","blocks","drawerSlug","searchTerm","setSearchTerm","filteredBlocks","setFilteredBlocks","closeModal","isModalOpen","t","config","t0","t1","t2","t3","blocksMap","searchTermToUse","matchingBlocks","reduce","matchedBlocks","_block","blockLabel","includes","push","t4","_jsxs","slug","title","label","children","_jsx","className","map","_block_0","index","block_0","imageAltText","imageURL","blockLabels","alignLabel","onClick","thumbnail","alt","src"],"sources":["../../../../src/fields/Blocks/BlocksDrawer/index.tsx"],"sourcesContent":["'use client'\nimport type { I18nClient } from '@payloadcms/translations'\nimport type { ClientBlock, Labels } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useEffect, useState } from 'react'\n\nimport { Drawer } from '../../../elements/Drawer/index.js'\nimport { ThumbnailCard } from '../../../elements/ThumbnailCard/index.js'\nimport { DefaultBlockImage } from '../../../graphics/DefaultBlockImage/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport './index.scss'\nimport { BlockSearch } from './BlockSearch/index.js'\n\nexport type Props = {\n readonly addRow: (index: number, blockType?: string) => Promise<void> | void\n readonly addRowIndex: number\n readonly blocks: (ClientBlock | string)[]\n readonly drawerSlug: string\n readonly labels: Labels\n}\n\nconst baseClass = 'blocks-drawer'\n\nconst getBlockLabel = (block: ClientBlock, i18n: I18nClient) => {\n if (typeof block.labels.singular === 'string') {\n return block.labels.singular.toLowerCase()\n }\n if (typeof block.labels.singular === 'object') {\n return getTranslation(block.labels.singular, i18n).toLowerCase()\n }\n return ''\n}\n\nexport const BlocksDrawer: React.FC<Props> = (props) => {\n const { addRow, addRowIndex, blocks, drawerSlug, labels } = props\n\n const [searchTerm, setSearchTerm] = useState('')\n const [filteredBlocks, setFilteredBlocks] = useState(blocks)\n const { closeModal, isModalOpen } = useModal()\n const { i18n, t } = useTranslation()\n const { config } = useConfig()\n\n useEffect(() => {\n if (!isModalOpen(drawerSlug)) {\n setSearchTerm('')\n }\n }, [isModalOpen, drawerSlug])\n\n useEffect(() => {\n const searchTermToUse = searchTerm.toLowerCase()\n\n const matchingBlocks = blocks?.reduce((matchedBlocks, _block) => {\n const block = typeof _block === 'string' ? config.blocksMap[_block] : _block\n const blockLabel = getBlockLabel(block, i18n)\n if (blockLabel.includes(searchTermToUse)) {\n matchedBlocks.push(block)\n }\n return matchedBlocks\n }, [])\n\n setFilteredBlocks(matchingBlocks)\n }, [searchTerm, blocks, i18n, config.blocksMap])\n\n return (\n <Drawer\n slug={drawerSlug}\n title={t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n >\n <BlockSearch setSearchTerm={setSearchTerm} />\n <div className={`${baseClass}__blocks-wrapper`}>\n <ul className={`${baseClass}__blocks`}>\n {filteredBlocks?.map((_block, index) => {\n const block = typeof _block === 'string' ? config.blocksMap[_block] : _block\n\n const { slug, imageAltText, imageURL, labels: blockLabels } = block\n\n return (\n <li className={`${baseClass}__block`} key={index}>\n <ThumbnailCard\n alignLabel=\"center\"\n label={getTranslation(blockLabels?.singular, i18n)}\n onClick={() => {\n void addRow(addRowIndex, slug)\n closeModal(drawerSlug)\n }}\n thumbnail={\n imageURL ? (\n <img alt={imageAltText} src={imageURL} />\n ) : (\n <div className={`${baseClass}__default-image`}>\n <DefaultBlockImage />\n </div>\n )\n }\n />\n </li>\n )\n })}\n </ul>\n </div>\n </Drawer>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","getTranslation","React","useEffect","useMemo","useState","Drawer","ThumbnailCard","DefaultBlockImage","useConfig","useTranslation","BlockSearch","baseClass","getBlockLabel","block","i18n","labels","singular","toLowerCase","BlocksDrawer","props","addRow","addRowIndex","blocks","drawerSlug","searchTerm","setSearchTerm","filteredBlocks","setFilteredBlocks","closeModal","isModalOpen","t","config","blockGroups","groups","_none","forEach","admin","group","label","Object","hasOwn","push","searchTermToUse","matchingBlocks","reduce","matchedBlocks","_block","blocksMap","blockLabel","includes","_jsxs","slug","title","_jsx","className","entries","map","groupLabel","groupBlocks","length","filter","Boolean","join","index","imageAltText","imageURL","blockLabels","alignLabel","onClick","thumbnail","alt","src"],"sources":["../../../../src/fields/Blocks/BlocksDrawer/index.tsx"],"sourcesContent":["'use client'\nimport type { I18nClient } from '@payloadcms/translations'\nimport type { ClientBlock, Labels } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { Drawer } from '../../../elements/Drawer/index.js'\nimport { ThumbnailCard } from '../../../elements/ThumbnailCard/index.js'\nimport { DefaultBlockImage } from '../../../graphics/DefaultBlockImage/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport './index.scss'\nimport { BlockSearch } from './BlockSearch/index.js'\n\nexport type Props = {\n readonly addRow: (index: number, blockType?: string) => Promise<void> | void\n readonly addRowIndex: number\n readonly blocks: (ClientBlock | string)[]\n readonly drawerSlug: string\n readonly labels: Labels\n}\n\nconst baseClass = 'blocks-drawer'\n\nconst getBlockLabel = (block: ClientBlock, i18n: I18nClient) => {\n if (typeof block.labels.singular === 'string') {\n return block.labels.singular.toLowerCase()\n }\n if (typeof block.labels.singular === 'object') {\n return getTranslation(block.labels.singular, i18n).toLowerCase()\n }\n return ''\n}\n\nexport const BlocksDrawer: React.FC<Props> = (props) => {\n const { addRow, addRowIndex, blocks, drawerSlug, labels } = props\n\n const [searchTerm, setSearchTerm] = useState('')\n const [filteredBlocks, setFilteredBlocks] = useState(blocks)\n const { closeModal, isModalOpen } = useModal()\n const { i18n, t } = useTranslation()\n const { config } = useConfig()\n\n const blockGroups = useMemo(() => {\n const groups: Record<string, (ClientBlock | string)[]> = {\n _none: [],\n }\n filteredBlocks.forEach((block) => {\n if (typeof block === 'object' && block.admin?.group) {\n const group = block.admin.group\n const label = typeof group === 'string' ? group : getTranslation(group, i18n)\n\n if (Object.hasOwn(groups, label)) {\n groups[label].push(block)\n } else {\n groups[label] = [block]\n }\n } else {\n groups._none.push(block)\n }\n })\n return groups\n }, [filteredBlocks, i18n])\n\n useEffect(() => {\n if (!isModalOpen(drawerSlug)) {\n setSearchTerm('')\n }\n }, [isModalOpen, drawerSlug])\n\n useEffect(() => {\n const searchTermToUse = searchTerm.toLowerCase()\n\n const matchingBlocks = blocks?.reduce((matchedBlocks, _block) => {\n const block = typeof _block === 'string' ? config.blocksMap[_block] : _block\n const blockLabel = getBlockLabel(block, i18n)\n if (blockLabel.includes(searchTermToUse)) {\n matchedBlocks.push(block)\n }\n return matchedBlocks\n }, [])\n\n setFilteredBlocks(matchingBlocks)\n }, [searchTerm, blocks, i18n, config.blocksMap])\n\n return (\n <Drawer\n slug={drawerSlug}\n title={t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n >\n <BlockSearch setSearchTerm={setSearchTerm} />\n <div className={`${baseClass}__blocks-wrapper`}>\n <ul className={`${baseClass}__block-groups`}>\n {Object.entries(blockGroups).map(([groupLabel, groupBlocks]) =>\n !groupBlocks.length ? null : (\n <li\n className={[\n `${baseClass}__block-group`,\n groupLabel === '_none' && `${baseClass}__block-group-none`,\n ]\n .filter(Boolean)\n .join(' ')}\n key={groupLabel}\n >\n {groupLabel !== '_none' && (\n <h3 className={`${baseClass}__block-group-label`}>{groupLabel}</h3>\n )}\n <ul className={`${baseClass}__blocks`}>\n {groupBlocks.map((_block, index) => {\n const block = typeof _block === 'string' ? config.blocksMap[_block] : _block\n\n const { slug, imageAltText, imageURL, labels: blockLabels } = block\n\n return (\n <li className={`${baseClass}__block`} key={index}>\n <ThumbnailCard\n alignLabel=\"center\"\n label={getTranslation(blockLabels?.singular, i18n)}\n onClick={() => {\n void addRow(addRowIndex, slug)\n closeModal(drawerSlug)\n }}\n thumbnail={\n imageURL ? (\n <img alt={imageAltText} src={imageURL} />\n ) : (\n <div className={`${baseClass}__default-image`}>\n <DefaultBlockImage />\n </div>\n )\n }\n />\n </li>\n )\n })}\n </ul>\n </li>\n ),\n )}\n </ul>\n </div>\n </Drawer>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -21,6 +21,32 @@
21
21
  padding-top: base(0.75);
22
22
  }
23
23
 
24
+ &__block-groups {
25
+ padding: 0;
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: base(1.5);
29
+ }
30
+
31
+ &__block-group {
32
+ list-style: none;
33
+ }
34
+
35
+ &__block-group-label {
36
+ padding-bottom: base(0.5);
37
+ }
38
+
39
+ &__block-group-none {
40
+ order: 1;
41
+ padding-top: base(1.5);
42
+ border-top: 1px solid var(--theme-border-color);
43
+
44
+ &:only-child {
45
+ padding-top: 0;
46
+ border-top: 0;
47
+ }
48
+ }
49
+
24
50
  @include large-break {
25
51
  &__blocks {
26
52
  grid-template-columns: repeat(5, 1fr);
@@ -31,10 +57,19 @@
31
57
  &__blocks-wrapper {
32
58
  padding-top: base(1.75);
33
59
  }
60
+
34
61
  &__blocks {
35
62
  grid-template-columns: repeat(3, 1fr);
36
63
  gap: base(0.5);
37
64
  }
65
+
66
+ &__block-groups {
67
+ gap: base(1.75);
68
+ }
69
+
70
+ &__block-group-none {
71
+ padding-top: base(1.75);
72
+ }
38
73
  }
39
74
 
40
75
  @include small-break {
@@ -45,6 +80,14 @@
45
80
  &__blocks {
46
81
  grid-template-columns: repeat(2, 1fr);
47
82
  }
83
+
84
+ &__block-groups {
85
+ gap: base(0.75);
86
+ }
87
+
88
+ &__block-group-none {
89
+ padding-top: base(0.75);
90
+ }
48
91
  }
49
92
  }
50
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/DateTime/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA4B,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAe5E,OAAO,cAAc,CAAA;AA0KrB,eAAO,MAAM,aAAa;;;;;+EAAwC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/DateTime/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA4B,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAe5E,OAAO,cAAc,CAAA;AA4LrB,eAAO,MAAM,aAAa;;;;;+EAAwC,CAAA"}
@@ -39,6 +39,7 @@ const DateTimeFieldComponent = props => {
39
39
  readOnly,
40
40
  validate
41
41
  } = props;
42
+ const pickerAppearance = datePickerProps?.pickerAppearance || 'default';
42
43
  // Get the user timezone so we can adjust the displayed value against it
43
44
  const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
44
45
  const {
@@ -77,6 +78,11 @@ const DateTimeFieldComponent = props => {
77
78
  const timezonePath = path + '_tz';
78
79
  const timezoneField = useFormFields(([fields, _]) => fields?.[timezonePath]);
79
80
  const supportedTimezones = config.admin.timezones.supportedTimezones;
81
+ /**
82
+ * Date appearance doesn't include timestamps,
83
+ * which means we need to pin the time to always 12:00 for the selected date
84
+ */
85
+ const isDateOnly = ['dayOnly', 'default', 'monthOnly'].includes(pickerAppearance);
80
86
  const selectedTimezone = timezoneField?.value;
81
87
  // The displayed value should be the original value, adjusted to the user's timezone
82
88
  const displayedValue = useMemo(() => {
@@ -99,12 +105,24 @@ const DateTimeFieldComponent = props => {
99
105
  if (!readOnly) {
100
106
  if (timezone && selectedTimezone && incomingDate) {
101
107
  // Create TZDate instances for the selected timezone
102
- const tzDateWithUTC = TZDate.tz(selectedTimezone);
103
- // Creates a TZDate instance for the user's timezone — this is default behaviour of TZDate as it wraps the Date constructor
104
- const dateToUserTz = new TZDate(incomingDate);
105
- // Transpose the date to the selected timezone
106
- const dateWithTimezone_0 = transpose(dateToUserTz, tzDateWithUTC);
107
- setValue(dateWithTimezone_0.toISOString() || null);
108
+ const TZDateWithSelectedTz = TZDate.tz(selectedTimezone);
109
+ if (isDateOnly) {
110
+ // We need to offset this hardcoded hour offset from the DatePicker elemenent
111
+ // this can be removed in 4.0 when we remove the hardcoded offset as it is a breaking change
112
+ // const tzOffset = incomingDate.getTimezoneOffset() / 60
113
+ const incomingOffset = incomingDate.getTimezoneOffset() / 60;
114
+ const originalHour = incomingDate.getHours() + incomingOffset;
115
+ incomingDate.setHours(originalHour);
116
+ // Convert the original date as picked into the desired timezone.
117
+ const dateToSelectedTz = transpose(incomingDate, TZDateWithSelectedTz);
118
+ setValue(dateToSelectedTz.toISOString() || null);
119
+ } else {
120
+ // Creates a TZDate instance for the user's timezone — this is default behaviour of TZDate as it wraps the Date constructor
121
+ const dateToUserTz = new TZDate(incomingDate);
122
+ // Transpose the date to the selected timezone
123
+ const dateWithTimezone_0 = transpose(dateToUserTz, TZDateWithSelectedTz);
124
+ setValue(dateWithTimezone_0.toISOString() || null);
125
+ }
108
126
  } else {
109
127
  setValue(incomingDate?.toISOString() || null);
110
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["TZDateMini","TZDate","getTranslation","transpose","useCallback","useMemo","DatePickerField","RenderCustomComponent","TimezonePicker","FieldDescription","FieldError","FieldLabel","useForm","useFormFields","useField","withCondition","useConfig","useTranslation","mergeFieldStyles","fieldBaseClass","baseClass","DateTimeFieldComponent","props","field","admin","className","date","datePickerProps","description","placeholder","label","localized","required","timezone","path","readOnly","validate","userTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","config","i18n","dispatchFields","setModified","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","setValue","showError","timezonePath","timezoneField","fields","_","supportedTimezones","timezones","selectedTimezone","displayedValue","DateWithOriginalTz","tz","DateWithUserTz","modifiedDate","withTimeZone","dateWithTimezone","dateWithUserTimezone","toISOString","styles","onChange","incomingDate","tzDateWithUTC","dateToUserTz","onChangeTimezone","type","_jsxs","filter","Boolean","join","style","_jsx","CustomComponent","Fallback","id","replace","overrides","length","DateTimeField"],"sources":["../../../src/fields/DateTime/index.tsx"],"sourcesContent":["'use client'\nimport type { DateFieldClientComponent, DateFieldValidation } from 'payload'\n\nimport { TZDateMini as TZDate } from '@date-fns/tz/date/mini'\nimport { getTranslation } from '@payloadcms/translations'\nimport { transpose } from 'date-fns'\nimport { useCallback, useMemo } from 'react'\n\nimport { DatePickerField } from '../../elements/DatePicker/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { TimezonePicker } from '../../elements/TimezonePicker/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useForm, useFormFields } from '../../forms/Form/context.js'\nimport { useField } from '../../forms/useField/index.js'\nimport './index.scss'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { fieldBaseClass } from '../shared/index.js'\n\nconst baseClass = 'date-time-field'\n\nconst DateTimeFieldComponent: DateFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: { className, date: datePickerProps, description, placeholder } = {},\n label,\n localized,\n required,\n timezone,\n },\n path,\n readOnly,\n validate,\n } = props\n\n // Get the user timezone so we can adjust the displayed value against it\n const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone\n\n const { config } = useConfig()\n const { i18n } = useTranslation()\n const { dispatchFields, setModified } = useForm()\n\n const memoizedValidate: DateFieldValidation = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n setValue,\n showError,\n value,\n } = useField<Date>({\n path,\n validate: memoizedValidate,\n })\n\n const timezonePath = path + '_tz'\n const timezoneField = useFormFields(([fields, _]) => fields?.[timezonePath])\n const supportedTimezones = config.admin.timezones.supportedTimezones\n\n const selectedTimezone = timezoneField?.value as string\n\n // The displayed value should be the original value, adjusted to the user's timezone\n const displayedValue = useMemo(() => {\n if (timezone && selectedTimezone && userTimezone && value) {\n // Create TZDate instances for the selected timezone and the user's timezone\n // These instances allow us to transpose the date between timezones while keeping the same time value\n const DateWithOriginalTz = TZDate.tz(selectedTimezone)\n const DateWithUserTz = TZDate.tz(userTimezone)\n\n const modifiedDate = new TZDate(value).withTimeZone(selectedTimezone)\n\n // Transpose the date to the selected timezone\n const dateWithTimezone = transpose(modifiedDate, DateWithOriginalTz)\n\n // Transpose the date to the user's timezone - this is necessary because the react-datepicker component insists on displaying the date in the user's timezone\n const dateWithUserTimezone = transpose(dateWithTimezone, DateWithUserTz)\n\n return dateWithUserTimezone.toISOString()\n }\n\n return value\n }, [timezone, selectedTimezone, value, userTimezone])\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n const onChange = useCallback(\n (incomingDate: Date) => {\n if (!readOnly) {\n if (timezone && selectedTimezone && incomingDate) {\n // Create TZDate instances for the selected timezone\n const tzDateWithUTC = TZDate.tz(selectedTimezone)\n\n // Creates a TZDate instance for the user's timezone — this is default behaviour of TZDate as it wraps the Date constructor\n const dateToUserTz = new TZDate(incomingDate)\n\n // Transpose the date to the selected timezone\n const dateWithTimezone = transpose(dateToUserTz, tzDateWithUTC)\n\n setValue(dateWithTimezone.toISOString() || null)\n } else {\n setValue(incomingDate?.toISOString() || null)\n }\n }\n },\n [readOnly, setValue, timezone, selectedTimezone],\n )\n\n const onChangeTimezone = useCallback(\n (timezone: string) => {\n if (timezonePath) {\n dispatchFields({\n type: 'UPDATE',\n path: timezonePath,\n value: timezone,\n })\n\n setModified(true)\n }\n },\n [dispatchFields, setModified, timezonePath],\n )\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && `${baseClass}--has-error`,\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n style={styles}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={<FieldLabel label={label} localized={localized} required={required} />}\n />\n <div className={`${fieldBaseClass}__wrap`} id={`field-${path.replace(/\\./g, '__')}`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n {BeforeInput}\n <DatePickerField\n {...datePickerProps}\n onChange={onChange}\n overrides={{\n ...datePickerProps?.overrides,\n }}\n placeholder={getTranslation(placeholder, i18n)}\n readOnly={readOnly}\n value={displayedValue}\n />\n {timezone && supportedTimezones.length > 0 && (\n <TimezonePicker\n id={`${path}-timezone-picker`}\n onChange={onChangeTimezone}\n options={supportedTimezones}\n required={required}\n selectedTimezone={selectedTimezone}\n />\n )}\n\n {AfterInput}\n </div>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n\nexport const DateTimeField = withCondition(DateTimeFieldComponent)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["TZDateMini","TZDate","getTranslation","transpose","useCallback","useMemo","DatePickerField","RenderCustomComponent","TimezonePicker","FieldDescription","FieldError","FieldLabel","useForm","useFormFields","useField","withCondition","useConfig","useTranslation","mergeFieldStyles","fieldBaseClass","baseClass","DateTimeFieldComponent","props","field","admin","className","date","datePickerProps","description","placeholder","label","localized","required","timezone","path","readOnly","validate","pickerAppearance","userTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","config","i18n","dispatchFields","setModified","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","setValue","showError","timezonePath","timezoneField","fields","_","supportedTimezones","timezones","isDateOnly","includes","selectedTimezone","displayedValue","DateWithOriginalTz","tz","DateWithUserTz","modifiedDate","withTimeZone","dateWithTimezone","dateWithUserTimezone","toISOString","styles","onChange","incomingDate","TZDateWithSelectedTz","incomingOffset","getTimezoneOffset","originalHour","getHours","setHours","dateToSelectedTz","dateToUserTz","onChangeTimezone","type","_jsxs","filter","Boolean","join","style","_jsx","CustomComponent","Fallback","id","replace","overrides","length","DateTimeField"],"sources":["../../../src/fields/DateTime/index.tsx"],"sourcesContent":["'use client'\nimport type { DateFieldClientComponent, DateFieldValidation } from 'payload'\n\nimport { TZDateMini as TZDate } from '@date-fns/tz/date/mini'\nimport { getTranslation } from '@payloadcms/translations'\nimport { transpose } from 'date-fns'\nimport { useCallback, useMemo } from 'react'\n\nimport { DatePickerField } from '../../elements/DatePicker/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { TimezonePicker } from '../../elements/TimezonePicker/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useForm, useFormFields } from '../../forms/Form/context.js'\nimport { useField } from '../../forms/useField/index.js'\nimport './index.scss'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { fieldBaseClass } from '../shared/index.js'\n\nconst baseClass = 'date-time-field'\n\nconst DateTimeFieldComponent: DateFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: { className, date: datePickerProps, description, placeholder } = {},\n label,\n localized,\n required,\n timezone,\n },\n path,\n readOnly,\n validate,\n } = props\n\n const pickerAppearance = datePickerProps?.pickerAppearance || 'default'\n\n // Get the user timezone so we can adjust the displayed value against it\n const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone\n\n const { config } = useConfig()\n const { i18n } = useTranslation()\n const { dispatchFields, setModified } = useForm()\n\n const memoizedValidate: DateFieldValidation = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n setValue,\n showError,\n value,\n } = useField<string>({\n path,\n validate: memoizedValidate,\n })\n\n const timezonePath = path + '_tz'\n const timezoneField = useFormFields(([fields, _]) => fields?.[timezonePath])\n const supportedTimezones = config.admin.timezones.supportedTimezones\n /**\n * Date appearance doesn't include timestamps,\n * which means we need to pin the time to always 12:00 for the selected date\n */\n const isDateOnly = ['dayOnly', 'default', 'monthOnly'].includes(pickerAppearance)\n const selectedTimezone = timezoneField?.value as string\n\n // The displayed value should be the original value, adjusted to the user's timezone\n const displayedValue = useMemo(() => {\n if (timezone && selectedTimezone && userTimezone && value) {\n // Create TZDate instances for the selected timezone and the user's timezone\n // These instances allow us to transpose the date between timezones while keeping the same time value\n const DateWithOriginalTz = TZDate.tz(selectedTimezone)\n const DateWithUserTz = TZDate.tz(userTimezone)\n\n const modifiedDate = new TZDate(value).withTimeZone(selectedTimezone)\n\n // Transpose the date to the selected timezone\n const dateWithTimezone = transpose(modifiedDate, DateWithOriginalTz)\n\n // Transpose the date to the user's timezone - this is necessary because the react-datepicker component insists on displaying the date in the user's timezone\n const dateWithUserTimezone = transpose(dateWithTimezone, DateWithUserTz)\n\n return dateWithUserTimezone.toISOString()\n }\n\n return value\n }, [timezone, selectedTimezone, value, userTimezone])\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n const onChange = useCallback(\n (incomingDate: Date) => {\n if (!readOnly) {\n if (timezone && selectedTimezone && incomingDate) {\n // Create TZDate instances for the selected timezone\n const TZDateWithSelectedTz = TZDate.tz(selectedTimezone)\n\n if (isDateOnly) {\n // We need to offset this hardcoded hour offset from the DatePicker elemenent\n // this can be removed in 4.0 when we remove the hardcoded offset as it is a breaking change\n // const tzOffset = incomingDate.getTimezoneOffset() / 60\n const incomingOffset = incomingDate.getTimezoneOffset() / 60\n const originalHour = incomingDate.getHours() + incomingOffset\n incomingDate.setHours(originalHour)\n\n // Convert the original date as picked into the desired timezone.\n const dateToSelectedTz = transpose(incomingDate, TZDateWithSelectedTz)\n\n setValue(dateToSelectedTz.toISOString() || null)\n } else {\n // Creates a TZDate instance for the user's timezone — this is default behaviour of TZDate as it wraps the Date constructor\n const dateToUserTz = new TZDate(incomingDate)\n // Transpose the date to the selected timezone\n const dateWithTimezone = transpose(dateToUserTz, TZDateWithSelectedTz)\n\n setValue(dateWithTimezone.toISOString() || null)\n }\n } else {\n setValue(incomingDate?.toISOString() || null)\n }\n }\n },\n [readOnly, setValue, timezone, selectedTimezone],\n )\n\n const onChangeTimezone = useCallback(\n (timezone: string) => {\n if (timezonePath) {\n dispatchFields({\n type: 'UPDATE',\n path: timezonePath,\n value: timezone,\n })\n\n setModified(true)\n }\n },\n [dispatchFields, setModified, timezonePath],\n )\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && `${baseClass}--has-error`,\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n style={styles}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={<FieldLabel label={label} localized={localized} required={required} />}\n />\n <div className={`${fieldBaseClass}__wrap`} id={`field-${path.replace(/\\./g, '__')}`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n {BeforeInput}\n <DatePickerField\n {...datePickerProps}\n onChange={onChange}\n overrides={{\n ...datePickerProps?.overrides,\n }}\n placeholder={getTranslation(placeholder, i18n)}\n readOnly={readOnly}\n value={displayedValue}\n />\n {timezone && supportedTimezones.length > 0 && (\n <TimezonePicker\n id={`${path}-timezone-picker`}\n onChange={onChangeTimezone}\n options={supportedTimezones}\n required={required}\n selectedTimezone={selectedTimezone}\n />\n )}\n {AfterInput}\n </div>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n\nexport const DateTimeField = withCondition(DateTimeFieldComponent)\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Join/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAIhB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAkB,MAAM,OAAO,CAAA;AAuNtC,eAAO,MAAM,SAAS;;;;+EAAoC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Join/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAIhB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAkB,MAAM,OAAO,CAAA;AAoOtC,eAAO,MAAM,SAAS;;;;+EAAoC,CAAA"}
@@ -136,7 +136,7 @@ const JoinFieldComponent = props => {
136
136
  value: value_0
137
137
  };
138
138
  }
139
- const where = {
139
+ const where = Array.isArray(collection) ? {} : {
140
140
  [on]: {
141
141
  equals: value_0
142
142
  }
@@ -147,10 +147,10 @@ const JoinFieldComponent = props => {
147
147
  };
148
148
  }
149
149
  return where;
150
- }, [docID, field.targetField.relationTo, field.where, on, docConfig?.slug]);
150
+ }, [docID, collection, field.targetField.relationTo, field.where, on, docConfig?.slug]);
151
151
  const initialDrawerData = useMemo(() => {
152
152
  const relatedCollection = getEntityConfig({
153
- collectionSlug: field.collection
153
+ collectionSlug: Array.isArray(field.collection) ? field.collection[0] : field.collection
154
154
  });
155
155
  return getInitialDrawerData({
156
156
  collectionSlug: docConfig?.slug,
@@ -194,6 +194,11 @@ const JoinFieldComponent = props => {
194
194
  required: required
195
195
  })
196
196
  }),
197
+ parent: Array.isArray(collection) ? {
198
+ id: docID,
199
+ collectionSlug: docConfig.slug,
200
+ joinPath: path
201
+ } : undefined,
197
202
  relationTo: collection
198
203
  }), /*#__PURE__*/_jsx(RenderCustomComponent, {
199
204
  CustomComponent: Description,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ObjectIdImport","flattenTopLevelFields","React","useMemo","RelationshipTable","RenderCustomComponent","useField","withCondition","useConfig","useDocumentInfo","FieldDescription","FieldError","FieldLabel","fieldBaseClass","ObjectId","default","getInitialDrawerData","collectionSlug","config","docID","fields","segments","flattenedFields","path","field","find","name","type","value","Array","isArray","relationTo","hasMany","nextSegments","slice","length","initialData","id","toHexString","_block","blockReferences","blocks","block","blocksMap","blockInitialData","blockType","slug","JoinFieldComponent","props","admin","allowCreate","description","collection","label","localized","on","required","docConfig","getEntityConfig","customComponents","AfterInput","BeforeInput","Description","Error","Label","showError","filterOptions","targetField","where","equals","and","initialDrawerData","relatedCollection","split","_jsxs","className","filter","Boolean","join","replace","_jsx","CustomComponent","Fallback","disableTable","docs","style","margin","JoinField"],"sources":["../../../src/fields/Join/index.tsx"],"sourcesContent":["'use client'\n\nimport type {\n ClientConfig,\n ClientField,\n JoinFieldClient,\n JoinFieldClientComponent,\n PaginatedDocs,\n Where,\n} from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { flattenTopLevelFields } from 'payload/shared'\nimport React, { useMemo } from 'react'\n\nimport { RelationshipTable } from '../../elements/RelationshipTable/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\nimport { fieldBaseClass } from '../index.js'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\n/**\n * Recursively builds the default data for joined collection\n */\nconst getInitialDrawerData = ({\n collectionSlug,\n config,\n docID,\n fields,\n segments,\n}: {\n collectionSlug: string\n config: ClientConfig\n docID: number | string\n fields: ClientField[]\n segments: string[]\n}) => {\n const flattenedFields = flattenTopLevelFields(fields)\n\n const path = segments[0]\n\n const field = flattenedFields.find((field) => field.name === path)\n\n if (!field) {\n return null\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n let value: { relationTo: string; value: number | string } | number | string = docID\n if (Array.isArray(field.relationTo)) {\n value = {\n relationTo: collectionSlug,\n value: docID,\n }\n }\n return {\n [field.name]: field.hasMany ? [value] : value,\n }\n }\n\n const nextSegments = segments.slice(1, segments.length)\n\n if (field.type === 'tab' || field.type === 'group') {\n return {\n [field.name]: getInitialDrawerData({\n collectionSlug,\n config,\n docID,\n fields: field.fields,\n segments: nextSegments,\n }),\n }\n }\n\n if (field.type === 'array') {\n const initialData = getInitialDrawerData({\n collectionSlug,\n config,\n docID,\n fields: field.fields,\n segments: nextSegments,\n })\n\n initialData.id = ObjectId().toHexString()\n\n return {\n [field.name]: [initialData],\n }\n }\n\n if (field.type === 'blocks') {\n for (const _block of field.blockReferences ?? field.blocks) {\n const block = typeof _block === 'string' ? config.blocksMap[_block] : _block\n\n const blockInitialData = getInitialDrawerData({\n collectionSlug,\n config,\n docID,\n fields: block.fields,\n segments: nextSegments,\n })\n\n if (blockInitialData) {\n blockInitialData.id = ObjectId().toHexString()\n blockInitialData.blockType = block.slug\n\n return {\n [field.name]: [blockInitialData],\n }\n }\n }\n }\n}\n\nconst JoinFieldComponent: JoinFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: { allowCreate, description },\n collection,\n label,\n localized,\n on,\n required,\n },\n path,\n } = props\n\n const { id: docID, docConfig } = useDocumentInfo()\n\n const { config, getEntityConfig } = useConfig()\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n showError,\n value,\n } = useField<PaginatedDocs>({\n path,\n })\n\n const filterOptions: null | Where = useMemo(() => {\n if (!docID) {\n return null\n }\n\n let value: { relationTo: string; value: number | string } | number | string = docID\n\n if (Array.isArray(field.targetField.relationTo)) {\n value = {\n relationTo: docConfig.slug,\n value,\n }\n }\n\n const where = {\n [on]: {\n equals: value,\n },\n }\n\n if (field.where) {\n return {\n and: [where, field.where],\n }\n }\n\n return where\n }, [docID, field.targetField.relationTo, field.where, on, docConfig?.slug])\n\n const initialDrawerData = useMemo(() => {\n const relatedCollection = getEntityConfig({ collectionSlug: field.collection })\n\n return getInitialDrawerData({\n collectionSlug: docConfig?.slug,\n config,\n docID,\n fields: relatedCollection.fields,\n segments: field.on.split('.'),\n })\n }, [getEntityConfig, field.collection, field.on, docConfig?.slug, docID, config])\n\n if (!docConfig) {\n return null\n }\n\n return (\n <div\n className={[fieldBaseClass, showError && 'error', 'join'].filter(Boolean).join(' ')}\n id={`field-${path?.replace(/\\./g, '__')}`}\n >\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n <RelationshipTable\n AfterInput={AfterInput}\n allowCreate={typeof docID !== 'undefined' && allowCreate}\n BeforeInput={BeforeInput}\n disableTable={filterOptions === null}\n field={field as JoinFieldClient}\n filterOptions={filterOptions}\n initialData={docID && value ? value : ({ docs: [] } as PaginatedDocs)}\n initialDrawerData={initialDrawerData}\n Label={\n <h4 style={{ margin: 0 }}>\n {Label || (\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n )}\n </h4>\n }\n relationTo={collection}\n />\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n\nexport const JoinField = withCondition(JoinFieldComponent)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["ObjectIdImport","flattenTopLevelFields","React","useMemo","RelationshipTable","RenderCustomComponent","useField","withCondition","useConfig","useDocumentInfo","FieldDescription","FieldError","FieldLabel","fieldBaseClass","ObjectId","default","getInitialDrawerData","collectionSlug","config","docID","fields","segments","flattenedFields","path","field","find","name","type","value","Array","isArray","relationTo","hasMany","nextSegments","slice","length","initialData","id","toHexString","_block","blockReferences","blocks","block","blocksMap","blockInitialData","blockType","slug","JoinFieldComponent","props","admin","allowCreate","description","collection","label","localized","on","required","docConfig","getEntityConfig","customComponents","AfterInput","BeforeInput","Description","Error","Label","showError","filterOptions","targetField","where","equals","and","initialDrawerData","relatedCollection","split","_jsxs","className","filter","Boolean","join","replace","_jsx","CustomComponent","Fallback","disableTable","docs","style","margin","parent","joinPath","undefined","JoinField"],"sources":["../../../src/fields/Join/index.tsx"],"sourcesContent":["'use client'\n\nimport type {\n ClientConfig,\n ClientField,\n JoinFieldClient,\n JoinFieldClientComponent,\n PaginatedDocs,\n Where,\n} from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { flattenTopLevelFields } from 'payload/shared'\nimport React, { useMemo } from 'react'\n\nimport { RelationshipTable } from '../../elements/RelationshipTable/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\nimport { fieldBaseClass } from '../index.js'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\n/**\n * Recursively builds the default data for joined collection\n */\nconst getInitialDrawerData = ({\n collectionSlug,\n config,\n docID,\n fields,\n segments,\n}: {\n collectionSlug: string\n config: ClientConfig\n docID: number | string\n fields: ClientField[]\n segments: string[]\n}) => {\n const flattenedFields = flattenTopLevelFields(fields)\n\n const path = segments[0]\n\n const field = flattenedFields.find((field) => field.name === path)\n\n if (!field) {\n return null\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n let value: { relationTo: string; value: number | string } | number | string = docID\n if (Array.isArray(field.relationTo)) {\n value = {\n relationTo: collectionSlug,\n value: docID,\n }\n }\n return {\n [field.name]: field.hasMany ? [value] : value,\n }\n }\n\n const nextSegments = segments.slice(1, segments.length)\n\n if (field.type === 'tab' || field.type === 'group') {\n return {\n [field.name]: getInitialDrawerData({\n collectionSlug,\n config,\n docID,\n fields: field.fields,\n segments: nextSegments,\n }),\n }\n }\n\n if (field.type === 'array') {\n const initialData = getInitialDrawerData({\n collectionSlug,\n config,\n docID,\n fields: field.fields,\n segments: nextSegments,\n })\n\n initialData.id = ObjectId().toHexString()\n\n return {\n [field.name]: [initialData],\n }\n }\n\n if (field.type === 'blocks') {\n for (const _block of field.blockReferences ?? field.blocks) {\n const block = typeof _block === 'string' ? config.blocksMap[_block] : _block\n\n const blockInitialData = getInitialDrawerData({\n collectionSlug,\n config,\n docID,\n fields: block.fields,\n segments: nextSegments,\n })\n\n if (blockInitialData) {\n blockInitialData.id = ObjectId().toHexString()\n blockInitialData.blockType = block.slug\n\n return {\n [field.name]: [blockInitialData],\n }\n }\n }\n }\n}\n\nconst JoinFieldComponent: JoinFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: { allowCreate, description },\n collection,\n label,\n localized,\n on,\n required,\n },\n path,\n } = props\n\n const { id: docID, docConfig } = useDocumentInfo()\n\n const { config, getEntityConfig } = useConfig()\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n showError,\n value,\n } = useField<PaginatedDocs>({\n path,\n })\n\n const filterOptions: null | Where = useMemo(() => {\n if (!docID) {\n return null\n }\n\n let value: { relationTo: string; value: number | string } | number | string = docID\n\n if (Array.isArray(field.targetField.relationTo)) {\n value = {\n relationTo: docConfig.slug,\n value,\n }\n }\n\n const where = Array.isArray(collection)\n ? {}\n : {\n [on]: {\n equals: value,\n },\n }\n\n if (field.where) {\n return {\n and: [where, field.where],\n }\n }\n\n return where\n }, [docID, collection, field.targetField.relationTo, field.where, on, docConfig?.slug])\n\n const initialDrawerData = useMemo(() => {\n const relatedCollection = getEntityConfig({\n collectionSlug: Array.isArray(field.collection) ? field.collection[0] : field.collection,\n })\n\n return getInitialDrawerData({\n collectionSlug: docConfig?.slug,\n config,\n docID,\n fields: relatedCollection.fields,\n segments: field.on.split('.'),\n })\n }, [getEntityConfig, field.collection, field.on, docConfig?.slug, docID, config])\n\n if (!docConfig) {\n return null\n }\n\n return (\n <div\n className={[fieldBaseClass, showError && 'error', 'join'].filter(Boolean).join(' ')}\n id={`field-${path?.replace(/\\./g, '__')}`}\n >\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n <RelationshipTable\n AfterInput={AfterInput}\n allowCreate={typeof docID !== 'undefined' && allowCreate}\n BeforeInput={BeforeInput}\n disableTable={filterOptions === null}\n field={field as JoinFieldClient}\n filterOptions={filterOptions}\n initialData={docID && value ? value : ({ docs: [] } as PaginatedDocs)}\n initialDrawerData={initialDrawerData}\n Label={\n <h4 style={{ margin: 0 }}>\n {Label || (\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n )}\n </h4>\n }\n parent={\n Array.isArray(collection)\n ? {\n id: docID,\n collectionSlug: docConfig.slug,\n joinPath: path,\n }\n : undefined\n }\n relationTo={collection}\n />\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n\nexport const JoinField = withCondition(JoinFieldComponent)\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Select/Input.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG3E,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AASlF,OAAO,cAAc,CAAA;AAErB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAA;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAA;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA6FlD,CAAA"}
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Select/Input.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG3E,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AASlF,OAAO,cAAc,CAAA;AAErB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAA;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAA;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAgGlD,CAAA"}
@@ -91,6 +91,8 @@ export const SelectInput = props => {
91
91
  label: t4,
92
92
  value: matchingOption_0?.value ?? value
93
93
  };
94
+ } else {
95
+ valueToRender = null;
94
96
  }
95
97
  }
96
98
  const t4 = showError && "error";