@payloadcms/ui 3.49.0-canary.7 → 3.49.0

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 (288) hide show
  1. package/dist/elements/ColumnSelector/index.js +1 -1
  2. package/dist/elements/ColumnSelector/index.js.map +1 -1
  3. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  4. package/dist/elements/DeleteDocument/index.js +65 -47
  5. package/dist/elements/DeleteDocument/index.js.map +1 -1
  6. package/dist/elements/DeleteDocument/index.scss +10 -0
  7. package/dist/elements/DeleteMany/index.d.ts +17 -2
  8. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  9. package/dist/elements/DeleteMany/index.js +162 -49
  10. package/dist/elements/DeleteMany/index.js.map +1 -1
  11. package/dist/elements/DeleteMany/index.scss +13 -0
  12. package/dist/elements/DocumentControls/index.d.ts +3 -0
  13. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  14. package/dist/elements/DocumentControls/index.js +24 -5
  15. package/dist/elements/DocumentControls/index.js.map +1 -1
  16. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  17. package/dist/elements/DocumentDrawer/DrawerContent.js +4 -2
  18. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  19. package/dist/elements/DocumentDrawer/Provider.d.ts +4 -0
  20. package/dist/elements/DocumentDrawer/Provider.d.ts.map +1 -1
  21. package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
  22. package/dist/elements/DocumentDrawer/types.d.ts +1 -0
  23. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  24. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  25. package/dist/elements/DocumentFields/index.d.ts +1 -0
  26. package/dist/elements/DocumentFields/index.d.ts.map +1 -1
  27. package/dist/elements/DocumentFields/index.js +3 -1
  28. package/dist/elements/DocumentFields/index.js.map +1 -1
  29. package/dist/elements/EditMany/DrawerContent.d.ts +2 -0
  30. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  31. package/dist/elements/EditMany/DrawerContent.js +7 -3
  32. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  33. package/dist/elements/EditMany/index.d.ts +7 -2
  34. package/dist/elements/EditMany/index.d.ts.map +1 -1
  35. package/dist/elements/EditMany/index.js +39 -34
  36. package/dist/elements/EditMany/index.js.map +1 -1
  37. package/dist/elements/FolderView/Cell/index.client.d.ts +3 -2
  38. package/dist/elements/FolderView/Cell/index.client.d.ts.map +1 -1
  39. package/dist/elements/FolderView/Cell/index.client.js +3 -1
  40. package/dist/elements/FolderView/Cell/index.client.js.map +1 -1
  41. package/dist/elements/FolderView/Cell/index.server.d.ts.map +1 -1
  42. package/dist/elements/FolderView/Cell/index.server.js +2 -1
  43. package/dist/elements/FolderView/Cell/index.server.js.map +1 -1
  44. package/dist/elements/GroupByBuilder/index.d.ts +9 -0
  45. package/dist/elements/GroupByBuilder/index.d.ts.map +1 -0
  46. package/dist/elements/GroupByBuilder/index.js +112 -0
  47. package/dist/elements/GroupByBuilder/index.js.map +1 -0
  48. package/dist/elements/GroupByBuilder/index.scss +39 -0
  49. package/dist/elements/LeaveWithoutSaving/index.d.ts +6 -1
  50. package/dist/elements/LeaveWithoutSaving/index.d.ts.map +1 -1
  51. package/dist/elements/LeaveWithoutSaving/index.js +69 -49
  52. package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
  53. package/dist/elements/ListControls/index.d.ts.map +1 -1
  54. package/dist/elements/ListControls/index.js +28 -4
  55. package/dist/elements/ListControls/index.js.map +1 -1
  56. package/dist/elements/ListControls/index.scss +4 -2
  57. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  58. package/dist/elements/ListDrawer/DrawerContent.js +34 -15
  59. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  60. package/dist/elements/ListDrawer/Provider.d.ts +9 -3
  61. package/dist/elements/ListDrawer/Provider.d.ts.map +1 -1
  62. package/dist/elements/ListDrawer/Provider.js.map +1 -1
  63. package/dist/elements/ListDrawer/index.d.ts +19 -0
  64. package/dist/elements/ListDrawer/index.d.ts.map +1 -1
  65. package/dist/elements/ListDrawer/index.js +19 -0
  66. package/dist/elements/ListDrawer/index.js.map +1 -1
  67. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts +7 -0
  68. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -0
  69. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +164 -0
  70. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -0
  71. package/dist/elements/ListHeader/TitleActions/index.d.ts +1 -0
  72. package/dist/elements/ListHeader/TitleActions/index.d.ts.map +1 -1
  73. package/dist/elements/ListHeader/TitleActions/index.js +1 -0
  74. package/dist/elements/ListHeader/TitleActions/index.js.map +1 -1
  75. package/dist/elements/ListHeaderTabs/ByFolderPill.d.ts +10 -0
  76. package/dist/elements/ListHeaderTabs/ByFolderPill.d.ts.map +1 -0
  77. package/dist/elements/ListHeaderTabs/ByFolderPill.js +70 -0
  78. package/dist/elements/ListHeaderTabs/ByFolderPill.js.map +1 -0
  79. package/dist/elements/ListHeaderTabs/DefaultListPill.d.ts +9 -0
  80. package/dist/elements/ListHeaderTabs/DefaultListPill.d.ts.map +1 -0
  81. package/dist/elements/ListHeaderTabs/DefaultListPill.js +68 -0
  82. package/dist/elements/ListHeaderTabs/DefaultListPill.js.map +1 -0
  83. package/dist/elements/ListHeaderTabs/TrashPill.d.ts +6 -0
  84. package/dist/elements/ListHeaderTabs/TrashPill.d.ts.map +1 -0
  85. package/dist/elements/ListHeaderTabs/TrashPill.js +53 -0
  86. package/dist/elements/ListHeaderTabs/TrashPill.js.map +1 -0
  87. package/dist/elements/{ListFolderPills → ListHeaderTabs}/index.scss +1 -2
  88. package/dist/elements/ListSelection/index.scss +1 -1
  89. package/dist/elements/PageControls/GroupByPageControls.d.ts +16 -0
  90. package/dist/elements/PageControls/GroupByPageControls.d.ts.map +1 -0
  91. package/dist/elements/PageControls/GroupByPageControls.js +83 -0
  92. package/dist/elements/PageControls/GroupByPageControls.js.map +1 -0
  93. package/dist/elements/PageControls/index.d.ts +17 -0
  94. package/dist/elements/PageControls/index.d.ts.map +1 -0
  95. package/dist/elements/PageControls/index.js +70 -0
  96. package/dist/elements/PageControls/index.js.map +1 -0
  97. package/dist/elements/PageControls/index.scss +40 -0
  98. package/dist/elements/Pagination/ClickableArrow/index.scss +3 -3
  99. package/dist/elements/Pagination/index.js +1 -1
  100. package/dist/elements/Pagination/index.js.map +1 -1
  101. package/dist/elements/Pagination/index.scss +4 -4
  102. package/dist/elements/PermanentlyDeleteButton/index.d.ts +14 -0
  103. package/dist/elements/PermanentlyDeleteButton/index.d.ts.map +1 -0
  104. package/dist/elements/PermanentlyDeleteButton/index.js +147 -0
  105. package/dist/elements/PermanentlyDeleteButton/index.js.map +1 -0
  106. package/dist/elements/PublishMany/DrawerContent.d.ts +2 -0
  107. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  108. package/dist/elements/PublishMany/DrawerContent.js +7 -3
  109. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  110. package/dist/elements/PublishMany/index.d.ts +6 -1
  111. package/dist/elements/PublishMany/index.d.ts.map +1 -1
  112. package/dist/elements/PublishMany/index.js +38 -33
  113. package/dist/elements/PublishMany/index.js.map +1 -1
  114. package/dist/elements/ReactSelect/types.d.ts +1 -0
  115. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  116. package/dist/elements/ReactSelect/types.js.map +1 -1
  117. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  118. package/dist/elements/RelationshipTable/index.js +16 -11
  119. package/dist/elements/RelationshipTable/index.js.map +1 -1
  120. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  121. package/dist/elements/RenderTitle/index.js +1 -0
  122. package/dist/elements/RenderTitle/index.js.map +1 -1
  123. package/dist/elements/RestoreButton/index.d.ts +15 -0
  124. package/dist/elements/RestoreButton/index.d.ts.map +1 -0
  125. package/dist/elements/RestoreButton/index.js +171 -0
  126. package/dist/elements/RestoreButton/index.js.map +1 -0
  127. package/dist/elements/RestoreButton/index.scss +25 -0
  128. package/dist/elements/RestoreMany/index.d.ts +9 -0
  129. package/dist/elements/RestoreMany/index.d.ts.map +1 -0
  130. package/dist/elements/RestoreMany/index.js +193 -0
  131. package/dist/elements/RestoreMany/index.js.map +1 -0
  132. package/dist/elements/RestoreMany/index.scss +25 -0
  133. package/dist/elements/Status/index.d.ts.map +1 -1
  134. package/dist/elements/Status/index.js +6 -4
  135. package/dist/elements/Status/index.js.map +1 -1
  136. package/dist/elements/StickyToolbar/index.d.ts +6 -0
  137. package/dist/elements/StickyToolbar/index.d.ts.map +1 -0
  138. package/dist/elements/StickyToolbar/index.js +11 -0
  139. package/dist/elements/StickyToolbar/index.js.map +1 -0
  140. package/dist/elements/StickyToolbar/index.scss +27 -0
  141. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  142. package/dist/elements/Table/DefaultCell/index.js +10 -8
  143. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  144. package/dist/elements/Table/OrderableTable.d.ts +2 -0
  145. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  146. package/dist/elements/Table/OrderableTable.js +4 -3
  147. package/dist/elements/Table/OrderableTable.js.map +1 -1
  148. package/dist/elements/Table/index.d.ts +1 -0
  149. package/dist/elements/Table/index.d.ts.map +1 -1
  150. package/dist/elements/Table/index.js +5 -4
  151. package/dist/elements/Table/index.js.map +1 -1
  152. package/dist/elements/TrashBanner/index.d.ts +4 -0
  153. package/dist/elements/TrashBanner/index.d.ts.map +1 -0
  154. package/dist/elements/TrashBanner/index.js +37 -0
  155. package/dist/elements/TrashBanner/index.js.map +1 -0
  156. package/dist/elements/TrashBanner/index.scss +20 -0
  157. package/dist/elements/UnpublishMany/DrawerContent.d.ts +2 -0
  158. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  159. package/dist/elements/UnpublishMany/DrawerContent.js +6 -2
  160. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  161. package/dist/elements/UnpublishMany/index.d.ts +6 -1
  162. package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
  163. package/dist/elements/UnpublishMany/index.js +38 -33
  164. package/dist/elements/UnpublishMany/index.js.map +1 -1
  165. package/dist/elements/WhereBuilder/index.js +3 -3
  166. package/dist/elements/WhereBuilder/index.js.map +1 -1
  167. package/dist/exports/client/index.d.ts +2 -0
  168. package/dist/exports/client/index.d.ts.map +1 -1
  169. package/dist/exports/client/index.js +24 -22
  170. package/dist/exports/client/index.js.map +4 -4
  171. package/dist/fields/Blocks/index.d.ts.map +1 -1
  172. package/dist/fields/Blocks/index.js +1 -0
  173. package/dist/fields/Blocks/index.js.map +1 -1
  174. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  175. package/dist/fields/Checkbox/Input.js +2 -0
  176. package/dist/fields/Checkbox/Input.js.map +1 -1
  177. package/dist/fields/Select/Input.d.ts +1 -0
  178. package/dist/fields/Select/Input.d.ts.map +1 -1
  179. package/dist/fields/Select/Input.js +48 -45
  180. package/dist/fields/Select/Input.js.map +1 -1
  181. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts +1 -0
  182. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  183. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +7 -0
  184. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  185. package/dist/forms/fieldSchemasToFormState/index.d.ts +2 -1
  186. package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
  187. package/dist/forms/fieldSchemasToFormState/index.js +2 -0
  188. package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
  189. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts +2 -1
  190. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
  191. package/dist/forms/fieldSchemasToFormState/iterateFields.js +2 -0
  192. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  193. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  194. package/dist/forms/fieldSchemasToFormState/renderField.js +2 -1
  195. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  196. package/dist/forms/fieldSchemasToFormState/types.d.ts +1 -0
  197. package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
  198. package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
  199. package/dist/icons/Trash/index.d.ts +6 -0
  200. package/dist/icons/Trash/index.d.ts.map +1 -0
  201. package/dist/icons/Trash/index.js +22 -0
  202. package/dist/icons/Trash/index.js.map +1 -0
  203. package/dist/icons/Trash/index.scss +6 -0
  204. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  205. package/dist/providers/DocumentInfo/index.js +6 -0
  206. package/dist/providers/DocumentInfo/index.js.map +1 -1
  207. package/dist/providers/DocumentInfo/types.d.ts +7 -0
  208. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  209. package/dist/providers/DocumentInfo/types.js.map +1 -1
  210. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  211. package/dist/providers/ListQuery/index.js +24 -13
  212. package/dist/providers/ListQuery/index.js.map +1 -1
  213. package/dist/providers/ListQuery/mergeQuery.d.ts.map +1 -1
  214. package/dist/providers/ListQuery/mergeQuery.js +15 -1
  215. package/dist/providers/ListQuery/mergeQuery.js.map +1 -1
  216. package/dist/providers/ListQuery/types.d.ts +7 -3
  217. package/dist/providers/ListQuery/types.d.ts.map +1 -1
  218. package/dist/providers/ListQuery/types.js.map +1 -1
  219. package/dist/providers/Selection/index.d.ts +6 -2
  220. package/dist/providers/Selection/index.d.ts.map +1 -1
  221. package/dist/providers/Selection/index.js +37 -19
  222. package/dist/providers/Selection/index.js.map +1 -1
  223. package/dist/providers/ServerFunctions/index.d.ts +1 -0
  224. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  225. package/dist/providers/ServerFunctions/index.js.map +1 -1
  226. package/dist/providers/TableColumns/buildColumnState/index.d.ts +2 -1
  227. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  228. package/dist/providers/TableColumns/buildColumnState/index.js +4 -2
  229. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  230. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts +3 -2
  231. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
  232. package/dist/providers/TableColumns/buildColumnState/renderCell.js +4 -2
  233. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  234. package/dist/styles.css +1 -1
  235. package/dist/utilities/buildFormState.d.ts.map +1 -1
  236. package/dist/utilities/buildFormState.js +2 -0
  237. package/dist/utilities/buildFormState.js.map +1 -1
  238. package/dist/utilities/buildTableState.js +5 -7
  239. package/dist/utilities/buildTableState.js.map +1 -1
  240. package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
  241. package/dist/utilities/copyDataFromLocale.js +29 -19
  242. package/dist/utilities/copyDataFromLocale.js.map +1 -1
  243. package/dist/{elements/WhereBuilder/reduceFields.d.ts → utilities/reduceFieldsToOptions.d.ts} +3 -3
  244. package/dist/utilities/reduceFieldsToOptions.d.ts.map +1 -0
  245. package/dist/{elements/WhereBuilder/reduceFields.js → utilities/reduceFieldsToOptions.js} +11 -11
  246. package/dist/utilities/reduceFieldsToOptions.js.map +1 -0
  247. package/dist/utilities/renderTable.d.ts +9 -3
  248. package/dist/utilities/renderTable.d.ts.map +1 -1
  249. package/dist/utilities/renderTable.js +63 -22
  250. package/dist/utilities/renderTable.js.map +1 -1
  251. package/dist/views/CollectionFolder/ListSelection/index.d.ts.map +1 -1
  252. package/dist/views/CollectionFolder/ListSelection/index.js.map +1 -1
  253. package/dist/views/CollectionFolder/index.d.ts.map +1 -1
  254. package/dist/views/CollectionFolder/index.js +15 -5
  255. package/dist/views/CollectionFolder/index.js.map +1 -1
  256. package/dist/views/Edit/Auth/index.js +5 -4
  257. package/dist/views/Edit/Auth/index.js.map +1 -1
  258. package/dist/views/Edit/SetDocumentStepNav/index.d.ts +1 -0
  259. package/dist/views/Edit/SetDocumentStepNav/index.d.ts.map +1 -1
  260. package/dist/views/Edit/SetDocumentStepNav/index.js +26 -15
  261. package/dist/views/Edit/SetDocumentStepNav/index.js.map +1 -1
  262. package/dist/views/Edit/index.d.ts.map +1 -1
  263. package/dist/views/Edit/index.js +59 -35
  264. package/dist/views/Edit/index.js.map +1 -1
  265. package/dist/views/List/GroupByHeader/index.d.ts +10 -0
  266. package/dist/views/List/GroupByHeader/index.d.ts.map +1 -0
  267. package/dist/views/List/GroupByHeader/index.js +29 -0
  268. package/dist/views/List/GroupByHeader/index.js.map +1 -0
  269. package/dist/views/List/GroupByHeader/index.scss +17 -0
  270. package/dist/views/List/ListHeader/index.d.ts +4 -2
  271. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  272. package/dist/views/List/ListHeader/index.js +30 -10
  273. package/dist/views/List/ListHeader/index.js.map +1 -1
  274. package/dist/views/List/ListSelection/index.d.ts +5 -1
  275. package/dist/views/List/ListSelection/index.d.ts.map +1 -1
  276. package/dist/views/List/ListSelection/index.js +53 -30
  277. package/dist/views/List/ListSelection/index.js.map +1 -1
  278. package/dist/views/List/index.d.ts.map +1 -1
  279. package/dist/views/List/index.js +122 -170
  280. package/dist/views/List/index.js.map +1 -1
  281. package/dist/views/List/index.scss +12 -35
  282. package/package.json +5 -5
  283. package/dist/elements/ListFolderPills/index.d.ts +0 -10
  284. package/dist/elements/ListFolderPills/index.d.ts.map +0 -1
  285. package/dist/elements/ListFolderPills/index.js +0 -97
  286. package/dist/elements/ListFolderPills/index.js.map +0 -1
  287. package/dist/elements/WhereBuilder/reduceFields.d.ts.map +0 -1
  288. package/dist/elements/WhereBuilder/reduceFields.js.map +0 -1
@@ -0,0 +1,112 @@
1
+ 'use client';
2
+
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ import './index.scss';
5
+ import React, { useMemo } from 'react';
6
+ import { SelectInput } from '../../fields/Select/Input.js';
7
+ import { useListQuery } from '../../providers/ListQuery/index.js';
8
+ import { useTranslation } from '../../providers/Translation/index.js';
9
+ import { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js';
10
+ import { ReactSelect } from '../ReactSelect/index.js';
11
+ const baseClass = 'group-by-builder';
12
+ /**
13
+ * Note: Some fields are already omitted from the list of fields:
14
+ * - fields with nested field, e.g. `tabs`, `groups`, etc.
15
+ * - fields that don't affect data, i.e. `row`, `collapsible`, `ui`, etc.
16
+ * So we don't technically need to omit them here, but do anyway.
17
+ * But some remaining fields still need an additional check, e.g. `richText`, etc.
18
+ */
19
+ const supportedFieldTypes = ['text', 'textarea', 'number', 'select', 'relationship', 'date', 'checkbox', 'radio', 'email', 'number', 'upload'];
20
+ export const GroupByBuilder = ({
21
+ collectionSlug,
22
+ fields
23
+ }) => {
24
+ const {
25
+ i18n,
26
+ t
27
+ } = useTranslation();
28
+ const reducedFields = useMemo(() => reduceFieldsToOptions({
29
+ fields,
30
+ i18n
31
+ }), [fields, i18n]);
32
+ const {
33
+ query,
34
+ refineListData
35
+ } = useListQuery();
36
+ const groupByFieldName = query.groupBy?.replace(/^-/, '');
37
+ const groupByField = reducedFields.find(field => field.value === groupByFieldName);
38
+ return /*#__PURE__*/_jsxs("div", {
39
+ className: baseClass,
40
+ children: [/*#__PURE__*/_jsxs("div", {
41
+ className: `${baseClass}__header`,
42
+ children: [/*#__PURE__*/_jsx("p", {
43
+ children: t('general:groupByLabel', {
44
+ label: ''
45
+ })
46
+ }), query.groupBy && /*#__PURE__*/_jsx("button", {
47
+ className: `${baseClass}__clear-button`,
48
+ id: "group-by--reset",
49
+ onClick: async () => {
50
+ await refineListData({
51
+ groupBy: ''
52
+ });
53
+ },
54
+ type: "button",
55
+ children: t('general:clear')
56
+ })]
57
+ }), /*#__PURE__*/_jsxs("div", {
58
+ className: `${baseClass}__inputs`,
59
+ children: [/*#__PURE__*/_jsx(ReactSelect, {
60
+ filterOption: (option, inputValue) => (option?.data?.plainTextLabel || option.label).toLowerCase().includes(inputValue.toLowerCase()),
61
+ id: "group-by--field-select",
62
+ isClearable: true,
63
+ isMulti: false,
64
+ onChange: async v => {
65
+ const value = v === null ? undefined : v.value;
66
+ // value is being cleared
67
+ if (v === null) {
68
+ await refineListData({
69
+ groupBy: '',
70
+ page: 1
71
+ });
72
+ }
73
+ await refineListData({
74
+ groupBy: value ? query.groupBy?.startsWith('-') ? `-${value}` : value : undefined,
75
+ page: 1
76
+ });
77
+ },
78
+ options: reducedFields.filter(field_0 => !field_0.field.admin.disableListFilter && field_0.value !== 'id' && supportedFieldTypes.includes(field_0.field.type)),
79
+ value: {
80
+ label: groupByField?.label || t('general:selectValue'),
81
+ value: groupByFieldName || ''
82
+ }
83
+ }), /*#__PURE__*/_jsx(SelectInput, {
84
+ id: "group-by--sort",
85
+ isClearable: false,
86
+ name: "direction",
87
+ onChange: async ({
88
+ value: value_0
89
+ }) => {
90
+ if (!groupByFieldName) {
91
+ return;
92
+ }
93
+ await refineListData({
94
+ groupBy: value_0 === 'asc' ? groupByFieldName : `-${groupByFieldName}`,
95
+ page: 1
96
+ });
97
+ },
98
+ options: [{
99
+ label: t('general:ascending'),
100
+ value: 'asc'
101
+ }, {
102
+ label: t('general:descending'),
103
+ value: 'desc'
104
+ }],
105
+ path: "direction",
106
+ readOnly: !groupByFieldName,
107
+ value: !query.groupBy ? 'asc' : typeof query.groupBy === 'string' ? `${query.groupBy.startsWith('-') ? 'desc' : 'asc'}` : ''
108
+ })]
109
+ })]
110
+ });
111
+ };
112
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["React","useMemo","SelectInput","useListQuery","useTranslation","reduceFieldsToOptions","ReactSelect","baseClass","supportedFieldTypes","GroupByBuilder","collectionSlug","fields","i18n","t","reducedFields","query","refineListData","groupByFieldName","groupBy","replace","groupByField","find","field","value","_jsxs","className","_jsx","label","id","onClick","type","filterOption","option","inputValue","data","plainTextLabel","toLowerCase","includes","isClearable","isMulti","onChange","v","undefined","page","startsWith","options","filter","admin","disableListFilter","name","path","readOnly"],"sources":["../../../src/elements/GroupByBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Field, SanitizedCollectionConfig } from 'payload'\n\nimport './index.scss'\n\nimport React, { useMemo } from 'react'\n\nimport { SelectInput } from '../../fields/Select/Input.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { ReactSelect } from '../ReactSelect/index.js'\n\nexport type Props = {\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n fields: ClientField[]\n}\n\nconst baseClass = 'group-by-builder'\n\n/**\n * Note: Some fields are already omitted from the list of fields:\n * - fields with nested field, e.g. `tabs`, `groups`, etc.\n * - fields that don't affect data, i.e. `row`, `collapsible`, `ui`, etc.\n * So we don't technically need to omit them here, but do anyway.\n * But some remaining fields still need an additional check, e.g. `richText`, etc.\n */\nconst supportedFieldTypes: Field['type'][] = [\n 'text',\n 'textarea',\n 'number',\n 'select',\n 'relationship',\n 'date',\n 'checkbox',\n 'radio',\n 'email',\n 'number',\n 'upload',\n]\n\nexport const GroupByBuilder: React.FC<Props> = ({ collectionSlug, fields }) => {\n const { i18n, t } = useTranslation()\n\n const reducedFields = useMemo(() => reduceFieldsToOptions({ fields, i18n }), [fields, i18n])\n\n const { query, refineListData } = useListQuery()\n\n const groupByFieldName = query.groupBy?.replace(/^-/, '')\n\n const groupByField = reducedFields.find((field) => field.value === groupByFieldName)\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <p>\n {t('general:groupByLabel', {\n label: '',\n })}\n </p>\n {query.groupBy && (\n <button\n className={`${baseClass}__clear-button`}\n id=\"group-by--reset\"\n onClick={async () => {\n await refineListData({\n groupBy: '',\n })\n }}\n type=\"button\"\n >\n {t('general:clear')}\n </button>\n )}\n </div>\n <div className={`${baseClass}__inputs`}>\n <ReactSelect\n filterOption={(option, inputValue) =>\n ((option?.data?.plainTextLabel as string) || option.label)\n .toLowerCase()\n .includes(inputValue.toLowerCase())\n }\n id=\"group-by--field-select\"\n isClearable\n isMulti={false}\n onChange={async (v: { value: string } | null) => {\n const value = v === null ? undefined : v.value\n\n // value is being cleared\n if (v === null) {\n await refineListData({\n groupBy: '',\n page: 1,\n })\n }\n\n await refineListData({\n groupBy: value ? (query.groupBy?.startsWith('-') ? `-${value}` : value) : undefined,\n page: 1,\n })\n }}\n options={reducedFields.filter(\n (field) =>\n !field.field.admin.disableListFilter &&\n field.value !== 'id' &&\n supportedFieldTypes.includes(field.field.type),\n )}\n value={{\n label: groupByField?.label || t('general:selectValue'),\n value: groupByFieldName || '',\n }}\n />\n <SelectInput\n id=\"group-by--sort\"\n isClearable={false}\n name=\"direction\"\n onChange={async ({ value }: { value: string }) => {\n if (!groupByFieldName) {\n return\n }\n\n await refineListData({\n groupBy: value === 'asc' ? groupByFieldName : `-${groupByFieldName}`,\n page: 1,\n })\n }}\n options={[\n { label: t('general:ascending'), value: 'asc' },\n { label: t('general:descending'), value: 'desc' },\n ]}\n path=\"direction\"\n readOnly={!groupByFieldName}\n value={\n !query.groupBy\n ? 'asc'\n : typeof query.groupBy === 'string'\n ? `${query.groupBy.startsWith('-') ? 'desc' : 'asc'}`\n : ''\n }\n />\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ @import '../../scss/styles.scss';
2
+
3
+ @layer payload-default {
4
+ .group-by-builder {
5
+ background: var(--theme-elevation-50);
6
+ padding: var(--base);
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: calc(var(--base) / 2);
10
+
11
+ &__header {
12
+ width: 100%;
13
+ display: flex;
14
+ justify-content: space-between;
15
+ }
16
+
17
+ &__clear-button {
18
+ background: transparent;
19
+ border: none;
20
+ color: var(--theme-elevation-500);
21
+ line-height: inherit;
22
+ cursor: pointer;
23
+ font-size: inherit;
24
+ padding: 0;
25
+ text-decoration: underline;
26
+ }
27
+
28
+ &__inputs {
29
+ width: 100%;
30
+ display: flex;
31
+ gap: base(1);
32
+
33
+ & > * {
34
+ flex-grow: 1;
35
+ width: 50%;
36
+ }
37
+ }
38
+ }
39
+ }
@@ -1,3 +1,8 @@
1
1
  import React from 'react';
2
- export declare const LeaveWithoutSaving: React.FC;
2
+ type LeaveWithoutSavingProps = {
3
+ onConfirm?: () => Promise<void> | void;
4
+ onPrevent?: (nextHref: null | string) => void;
5
+ };
6
+ export declare const LeaveWithoutSaving: React.FC<LeaveWithoutSavingProps>;
7
+ export {};
3
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAa1C,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAuCtC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAa1C,KAAK,uBAAuB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;CAC9C,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAkDhE,CAAA"}
@@ -10,8 +10,12 @@ import { ConfirmationModal } from '../ConfirmationModal/index.js';
10
10
  import { useModal } from '../Modal/index.js';
11
11
  import { usePreventLeave } from './usePreventLeave.js';
12
12
  const modalSlug = 'leave-without-saving';
13
- export const LeaveWithoutSaving = () => {
14
- const $ = _c(15);
13
+ export const LeaveWithoutSaving = t0 => {
14
+ const $ = _c(18);
15
+ const {
16
+ onConfirm,
17
+ onPrevent
18
+ } = t0;
15
19
  const {
16
20
  closeModal,
17
21
  openModal
@@ -28,83 +32,99 @@ export const LeaveWithoutSaving = () => {
28
32
  t
29
33
  } = useTranslation();
30
34
  const prevent = Boolean((modified || !isValid) && user);
31
- let t0;
32
- if ($[0] !== openModal) {
33
- t0 = () => {
35
+ let t1;
36
+ if ($[0] !== onPrevent || $[1] !== openModal) {
37
+ t1 = () => {
38
+ const activeHref = document.activeElement?.href || null;
39
+ if (onPrevent) {
40
+ onPrevent(activeHref);
41
+ }
34
42
  openModal(modalSlug);
35
43
  };
36
- $[0] = openModal;
37
- $[1] = t0;
44
+ $[0] = onPrevent;
45
+ $[1] = openModal;
46
+ $[2] = t1;
38
47
  } else {
39
- t0 = $[1];
48
+ t1 = $[2];
40
49
  }
41
- const onPrevent = t0;
42
- let t1;
43
- if ($[2] !== closeModal) {
44
- t1 = () => {
50
+ const handlePrevent = t1;
51
+ let t2;
52
+ if ($[3] !== closeModal) {
53
+ t2 = () => {
45
54
  closeModal(modalSlug);
46
55
  };
47
- $[2] = closeModal;
48
- $[3] = t1;
56
+ $[3] = closeModal;
57
+ $[4] = t2;
49
58
  } else {
50
- t1 = $[3];
59
+ t2 = $[4];
51
60
  }
52
- const handleAccept = t1;
53
- let t2;
54
- if ($[4] !== handleAccept || $[5] !== hasAccepted || $[6] !== onPrevent || $[7] !== prevent) {
55
- t2 = {
61
+ const handleAccept = t2;
62
+ let t3;
63
+ if ($[5] !== handleAccept || $[6] !== handlePrevent || $[7] !== hasAccepted || $[8] !== prevent) {
64
+ t3 = {
56
65
  hasAccepted,
57
66
  onAccept: handleAccept,
58
- onPrevent,
67
+ onPrevent: handlePrevent,
59
68
  prevent
60
69
  };
61
- $[4] = handleAccept;
62
- $[5] = hasAccepted;
63
- $[6] = onPrevent;
64
- $[7] = prevent;
65
- $[8] = t2;
70
+ $[5] = handleAccept;
71
+ $[6] = handlePrevent;
72
+ $[7] = hasAccepted;
73
+ $[8] = prevent;
74
+ $[9] = t3;
66
75
  } else {
67
- t2 = $[8];
76
+ t3 = $[9];
68
77
  }
69
- usePreventLeave(t2);
70
- let t3;
71
- if ($[9] !== closeModal) {
72
- t3 = () => {
73
- closeModal(modalSlug);
74
- };
75
- $[9] = closeModal;
76
- $[10] = t3;
77
- } else {
78
- t3 = $[10];
79
- }
80
- const onCancel = t3;
78
+ usePreventLeave(t3);
81
79
  let t4;
82
- if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
80
+ if ($[10] !== closeModal) {
83
81
  t4 = () => {
84
- setHasAccepted(true);
82
+ closeModal(modalSlug);
85
83
  };
84
+ $[10] = closeModal;
86
85
  $[11] = t4;
87
86
  } else {
88
87
  t4 = $[11];
89
88
  }
90
- const onConfirm = t4;
89
+ const onCancel = t4;
91
90
  let t5;
92
- if ($[12] !== onCancel || $[13] !== t) {
93
- t5 = _jsx(ConfirmationModal, {
91
+ if ($[12] !== onConfirm) {
92
+ t5 = async () => {
93
+ if (onConfirm) {
94
+ ;
95
+ try {
96
+ await onConfirm();
97
+ } catch (t6) {
98
+ const err = t6;
99
+ console.error("Error in LeaveWithoutSaving onConfirm:", err);
100
+ }
101
+ }
102
+ setHasAccepted(true);
103
+ };
104
+ $[12] = onConfirm;
105
+ $[13] = t5;
106
+ } else {
107
+ t5 = $[13];
108
+ }
109
+ const handleConfirm = t5;
110
+ let t6;
111
+ if ($[14] !== handleConfirm || $[15] !== onCancel || $[16] !== t) {
112
+ t6 = _jsx(ConfirmationModal, {
94
113
  body: t("general:changesNotSaved"),
95
114
  cancelLabel: t("general:stayOnThisPage"),
96
115
  confirmLabel: t("general:leaveAnyway"),
97
116
  heading: t("general:leaveWithoutSaving"),
98
117
  modalSlug,
99
118
  onCancel,
100
- onConfirm
119
+ onConfirm: handleConfirm
101
120
  });
102
- $[12] = onCancel;
103
- $[13] = t;
104
- $[14] = t5;
121
+ $[14] = handleConfirm;
122
+ $[15] = onCancel;
123
+ $[16] = t;
124
+ $[17] = t6;
105
125
  } else {
106
- t5 = $[14];
126
+ t6 = $[17];
107
127
  }
108
- return t5;
128
+ return t6;
109
129
  };
110
130
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","useCallback","useForm","useFormModified","useAuth","useTranslation","ConfirmationModal","useModal","usePreventLeave","modalSlug","LeaveWithoutSaving","$","closeModal","openModal","modified","isValid","user","hasAccepted","setHasAccepted","useState","t","prevent","Boolean","t0","onPrevent","t1","handleAccept","t2","onAccept","t3","onCancel","t4","Symbol","for","onConfirm","t5","_jsx","body","cancelLabel","confirmLabel","heading"],"sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback } from 'react'\n\nimport type { OnCancel } from '../ConfirmationModal/index.js'\n\nimport { useForm, useFormModified } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { useModal } from '../Modal/index.js'\nimport { usePreventLeave } from './usePreventLeave.js'\n\nconst modalSlug = 'leave-without-saving'\n\nexport const LeaveWithoutSaving: React.FC = () => {\n const { closeModal, openModal } = useModal()\n const modified = useFormModified()\n const { isValid } = useForm()\n const { user } = useAuth()\n const [hasAccepted, setHasAccepted] = React.useState(false)\n const { t } = useTranslation()\n\n const prevent = Boolean((modified || !isValid) && user)\n\n const onPrevent = useCallback(() => {\n openModal(modalSlug)\n }, [openModal])\n\n const handleAccept = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal])\n\n usePreventLeave({ hasAccepted, onAccept: handleAccept, onPrevent, prevent })\n\n const onCancel: OnCancel = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal])\n\n const onConfirm = useCallback(() => {\n setHasAccepted(true)\n }, [])\n\n return (\n <ConfirmationModal\n body={t('general:changesNotSaved')}\n cancelLabel={t('general:stayOnThisPage')}\n confirmLabel={t('general:leaveAnyway')}\n heading={t('general:leaveWithoutSaving')}\n modalSlug={modalSlug}\n onCancel={onCancel}\n onConfirm={onConfirm}\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,OAAOC,KAAA,IAASC,WAAW,QAAQ;AAInC,SAASC,OAAO,EAAEC,eAAe,QAAQ;AACzC,SAASC,OAAO,QAAQ;AACxB,SAASC,cAAc,QAAQ;AAC/B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,QAAQ,QAAQ;AACzB,SAASC,eAAe,QAAQ;AAEhC,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,kBAAA,GAA+BA,CAAA;EAAA,MAAAC,CAAA,GAAAZ,EAAA;EAC1C;IAAAa,UAAA;IAAAC;EAAA,IAAkCN,QAAA;EAClC,MAAAO,QAAA,GAAiBX,eAAA;EACjB;IAAAY;EAAA,IAAoBb,OAAA;EACpB;IAAAc;EAAA,IAAiBZ,OAAA;EACjB,OAAAa,WAAA,EAAAC,cAAA,IAAsClB,KAAA,CAAAmB,QAAA,MAAe;EACrD;IAAAC;EAAA,IAAcf,cAAA;EAEd,MAAAgB,OAAA,GAAgBC,OAAA,CAAQ,CAACR,QAAA,KAAaC,OAAM,KAAMC,IAAA;EAAA,IAAAO,EAAA;EAAA,IAAAZ,CAAA,QAAAE,SAAA;IAEpBU,EAAA,GAAAA,CAAA;MAC5BV,SAAA,CAAAJ,SAAU;IAAA;IACZE,CAAA,MAAAE,SAAA;IAAAF,CAAA,MAAAY,EAAA;EAAA;IAAAA,EAAA,GAAAZ,CAAA;EAAA;EAFA,MAAAa,SAAA,GAAkBD,EAEJ;EAAA,IAAAE,EAAA;EAAA,IAAAd,CAAA,QAAAC,UAAA;IAEmBa,EAAA,GAAAA,CAAA;MAC/Bb,UAAA,CAAAH,SAAW;IAAA;IACbE,CAAA,MAAAC,UAAA;IAAAD,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EAFA,MAAAe,YAAA,GAAqBD,EAEN;EAAA,IAAAE,EAAA;EAAA,IAAAhB,CAAA,QAAAe,YAAA,IAAAf,CAAA,QAAAM,WAAA,IAAAN,CAAA,QAAAa,SAAA,IAAAb,CAAA,QAAAU,OAAA;IAECM,EAAA;MAAAV,WAAA;MAAAW,QAAA,EAAyBF,YAAA;MAAAF,SAAA;MAAAH;IAAA;IAAiCV,CAAA,MAAAe,YAAA;IAAAf,CAAA,MAAAM,WAAA;IAAAN,CAAA,MAAAa,SAAA;IAAAb,CAAA,MAAAU,OAAA;IAAAV,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EAA1EH,eAAA,CAAgBmB,EAA0D;EAAA,IAAAE,EAAA;EAAA,IAAAlB,CAAA,QAAAC,UAAA;IAEnCiB,EAAA,GAAAA,CAAA;MACrCjB,UAAA,CAAAH,SAAW;IAAA;IACbE,CAAA,MAAAC,UAAA;IAAAD,CAAA,OAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAFA,MAAAmB,QAAA,GAA2BD,EAEZ;EAAA,IAAAE,EAAA;EAAA,IAAApB,CAAA,SAAAqB,MAAA,CAAAC,GAAA;IAEeF,EAAA,GAAAA,CAAA;MAC5Bb,cAAA,KAAe;IAAA;IACjBP,CAAA,OAAAoB,EAAA;EAAA;IAAAA,EAAA,GAAApB,CAAA;EAAA;EAFA,MAAAuB,SAAA,GAAkBH,EAEb;EAAA,IAAAI,EAAA;EAAA,IAAAxB,CAAA,SAAAmB,QAAA,IAAAnB,CAAA,SAAAS,CAAA;IAGHe,EAAA,GAAAC,IAAA,CAAA9B,iBAAA;MAAA+B,IAAA,EACQjB,CAAA,CAAE;MAAAkB,WAAA,EACKlB,CAAA,CAAE;MAAAmB,YAAA,EACDnB,CAAA,CAAE;MAAAoB,OAAA,EACPpB,CAAA,CAAE;MAAAX,SAAA;MAAAqB,QAAA;MAAAI;IAAA,C;;;;;;;SAJbC,E;CAUJ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","useCallback","useForm","useFormModified","useAuth","useTranslation","ConfirmationModal","useModal","usePreventLeave","modalSlug","LeaveWithoutSaving","t0","$","onConfirm","onPrevent","closeModal","openModal","modified","isValid","user","hasAccepted","setHasAccepted","useState","t","prevent","Boolean","t1","activeHref","document","activeElement","href","handlePrevent","t2","handleAccept","t3","onAccept","t4","onCancel","t5","t6","err","console","error","handleConfirm","_jsx","body","cancelLabel","confirmLabel","heading"],"sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback } from 'react'\n\nimport type { OnCancel } from '../ConfirmationModal/index.js'\n\nimport { useForm, useFormModified } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { useModal } from '../Modal/index.js'\nimport { usePreventLeave } from './usePreventLeave.js'\n\nconst modalSlug = 'leave-without-saving'\n\ntype LeaveWithoutSavingProps = {\n onConfirm?: () => Promise<void> | void\n onPrevent?: (nextHref: null | string) => void\n}\n\nexport const LeaveWithoutSaving: React.FC<LeaveWithoutSavingProps> = ({ onConfirm, onPrevent }) => {\n const { closeModal, openModal } = useModal()\n const modified = useFormModified()\n const { isValid } = useForm()\n const { user } = useAuth()\n const [hasAccepted, setHasAccepted] = React.useState(false)\n const { t } = useTranslation()\n\n const prevent = Boolean((modified || !isValid) && user)\n\n const handlePrevent = useCallback(() => {\n const activeHref = (document.activeElement as HTMLAnchorElement)?.href || null\n if (onPrevent) {\n onPrevent(activeHref)\n }\n openModal(modalSlug)\n }, [openModal, onPrevent])\n\n const handleAccept = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal])\n\n usePreventLeave({ hasAccepted, onAccept: handleAccept, onPrevent: handlePrevent, prevent })\n\n const onCancel: OnCancel = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal])\n\n const handleConfirm = useCallback(async () => {\n if (onConfirm) {\n try {\n await onConfirm()\n } catch (err) {\n console.error('Error in LeaveWithoutSaving onConfirm:', err)\n }\n }\n setHasAccepted(true)\n }, [onConfirm])\n\n return (\n <ConfirmationModal\n body={t('general:changesNotSaved')}\n cancelLabel={t('general:stayOnThisPage')}\n confirmLabel={t('general:leaveAnyway')}\n heading={t('general:leaveWithoutSaving')}\n modalSlug={modalSlug}\n onCancel={onCancel}\n onConfirm={handleConfirm}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAgD,MAAM,OAAO,CAAA;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAiBnD,OAAO,cAAc,CAAA;AAIrB;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyOpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAgD,MAAM,OAAO,CAAA;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAkBnD,OAAO,cAAc,CAAA;AAIrB;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyQpD,CAAA"}
@@ -14,6 +14,7 @@ import { useListQuery } from '../../providers/ListQuery/index.js';
14
14
  import { useTranslation } from '../../providers/Translation/index.js';
15
15
  import { AnimateHeight } from '../AnimateHeight/index.js';
16
16
  import { ColumnSelector } from '../ColumnSelector/index.js';
17
+ import { GroupByBuilder } from '../GroupByBuilder/index.js';
17
18
  import { Pill } from '../Pill/index.js';
18
19
  import { SearchFilter } from '../SearchFilter/index.js';
19
20
  import { WhereBuilder } from '../WhereBuilder/index.js';
@@ -106,7 +107,7 @@ export const ListControls = props => {
106
107
  }
107
108
  }, [t, listSearchableFields, i18n, searchLabel]);
108
109
  let listMenuItems = listMenuItemsFromProps;
109
- if (collectionConfig?.enableQueryPresets && !disableQueryPresets && queryPresetMenuItems?.length > 0) {
110
+ if (collectionConfig.enableQueryPresets && !disableQueryPresets && queryPresetMenuItems?.length > 0) {
110
111
  // Cannot push or unshift into `listMenuItemsFromProps` as it will mutate the original array
111
112
  listMenuItems = [...queryPresetMenuItems, listMenuItemsFromProps?.length > 0 ? /*#__PURE__*/_jsx(PopupList.Divider, {}, "divider") : null, ...(listMenuItemsFromProps || [])];
112
113
  }
@@ -117,7 +118,6 @@ export const ListControls = props => {
117
118
  className: `${baseClass}__wrap`,
118
119
  children: [/*#__PURE__*/_jsx(SearchIcon, {}), /*#__PURE__*/_jsx(SearchFilter, {
119
120
  handleChange: handleSearchChange,
120
- // eslint-disable-next-line react-compiler/react-compiler -- TODO: fix
121
121
  label: searchLabelTranslated.current,
122
122
  searchQueryParam: query?.search
123
123
  }, collectionSlug), activePreset && hasModifiedPreset ? /*#__PURE__*/_jsx("div", {
@@ -136,6 +136,7 @@ export const ListControls = props => {
136
136
  icon: /*#__PURE__*/_jsx(ChevronIcon, {
137
137
  direction: visibleDrawer === 'columns' ? 'up' : 'down'
138
138
  }),
139
+ id: "toggle-columns",
139
140
  onClick: () => setVisibleDrawer(visibleDrawer !== 'columns' ? 'columns' : undefined),
140
141
  pillStyle: "light",
141
142
  size: "small",
@@ -147,6 +148,7 @@ export const ListControls = props => {
147
148
  icon: /*#__PURE__*/_jsx(ChevronIcon, {
148
149
  direction: visibleDrawer === 'where' ? 'up' : 'down'
149
150
  }),
151
+ id: "toggle-list-filters",
150
152
  onClick: () => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined),
151
153
  pillStyle: "light",
152
154
  size: "small",
@@ -164,6 +166,20 @@ export const ListControls = props => {
164
166
  activePreset: activePreset,
165
167
  openPresetListDrawer: openPresetListDrawer,
166
168
  resetPreset: resetPreset
169
+ }), collectionConfig.admin.groupBy && /*#__PURE__*/_jsx(Pill, {
170
+ "aria-controls": `${baseClass}-group-by`,
171
+ "aria-expanded": visibleDrawer === 'group-by',
172
+ className: `${baseClass}__toggle-group-by`,
173
+ icon: /*#__PURE__*/_jsx(ChevronIcon, {
174
+ direction: visibleDrawer === 'group-by' ? 'up' : 'down'
175
+ }),
176
+ id: "toggle-group-by",
177
+ onClick: () => setVisibleDrawer(visibleDrawer !== 'group-by' ? 'group-by' : undefined),
178
+ pillStyle: "light",
179
+ size: "small",
180
+ children: t('general:groupByLabel', {
181
+ label: ''
182
+ })
167
183
  }), listMenuItems && Array.isArray(listMenuItems) && listMenuItems.length > 0 && /*#__PURE__*/_jsx(Popup, {
168
184
  button: /*#__PURE__*/_jsx(Dots, {
169
185
  ariaLabel: t('general:moreOptions')
@@ -191,12 +207,20 @@ export const ListControls = props => {
191
207
  height: visibleDrawer === 'where' ? 'auto' : 0,
192
208
  id: `${baseClass}-where`,
193
209
  children: /*#__PURE__*/_jsx(WhereBuilder, {
194
- collectionPluralLabel: collectionConfig?.labels?.plural,
210
+ collectionPluralLabel: collectionConfig.labels?.plural,
195
211
  collectionSlug: collectionConfig.slug,
196
- fields: collectionConfig?.fields,
212
+ fields: collectionConfig.fields,
197
213
  renderedFilters: renderedFilters,
198
214
  resolvedFilterOptions: resolvedFilterOptions
199
215
  })
216
+ }), collectionConfig.admin.groupBy && /*#__PURE__*/_jsx(AnimateHeight, {
217
+ className: `${baseClass}__group-by`,
218
+ height: visibleDrawer === 'group-by' ? 'auto' : 0,
219
+ id: `${baseClass}-group-by`,
220
+ children: /*#__PURE__*/_jsx(GroupByBuilder, {
221
+ collectionSlug: collectionConfig.slug,
222
+ fields: collectionConfig.fields
223
+ })
200
224
  })]
201
225
  }), PresetListDrawer, EditPresetDrawer, CreateNewPresetDrawer, DeletePresetModal]
202
226
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useWindowInfo","getTranslation","validateWhereQuery","React","Fragment","useEffect","useRef","useState","Popup","PopupList","useUseTitleField","ChevronIcon","Dots","SearchIcon","useListQuery","useTranslation","AnimateHeight","ColumnSelector","Pill","SearchFilter","WhereBuilder","ActiveQueryPreset","getTextFieldsToBeSearched","useQueryPresets","baseClass","ListControls","props","beforeActions","collectionConfig","collectionSlug","disableQueryPresets","enableColumns","enableFilters","enableSort","listMenuItems","listMenuItemsFromProps","queryPreset","activePreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","handleSearchChange","query","CreateNewPresetDrawer","DeletePresetModal","EditPresetDrawer","hasModifiedPreset","openPresetListDrawer","PresetListDrawer","queryPresetMenuItems","resetPreset","titleField","i18n","t","breakpoints","s","smallBreak","searchLabel","label","name","listSearchableFields","admin","fields","searchLabelTranslated","hasWhereParam","Boolean","where","shouldInitializeWhereOpened","visibleDrawer","setVisibleDrawer","undefined","current","length","reduce","placeholderText","field","i","enableQueryPresets","_jsx","Divider","_jsxs","className","handleChange","searchQueryParam","search","icon","direction","onClick","pillStyle","size","Array","isArray","button","ariaLabel","horizontalAlign","id","verticalAlign","map","item","height","slug","collectionPluralLabel","labels","plural"],"sources":["../../../src/elements/ListControls/index.tsx"],"sourcesContent":["'use client'\n\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { getTranslation } from '@payloadcms/translations'\nimport { validateWhereQuery } from 'payload/shared'\nimport React, { Fragment, useEffect, useRef, useState } from 'react'\n\nimport type { ListControlsProps } from './types.js'\n\nimport { Popup, PopupList } from '../../elements/Popup/index.js'\nimport { useUseTitleField } from '../../hooks/useUseAsTitle.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { Dots } from '../../icons/Dots/index.js'\nimport { SearchIcon } from '../../icons/Search/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { AnimateHeight } from '../AnimateHeight/index.js'\nimport { ColumnSelector } from '../ColumnSelector/index.js'\nimport { Pill } from '../Pill/index.js'\nimport { SearchFilter } from '../SearchFilter/index.js'\nimport { WhereBuilder } from '../WhereBuilder/index.js'\nimport { ActiveQueryPreset } from './ActiveQueryPreset/index.js'\nimport { getTextFieldsToBeSearched } from './getTextFieldsToBeSearched.js'\nimport { useQueryPresets } from './useQueryPresets.js'\nimport './index.scss'\n\nconst baseClass = 'list-controls'\n\n/**\n * The ListControls component is used to render the controls (search, filter, where)\n * for a collection's list view. You can find those directly above the table which lists\n * the collection's documents.\n */\nexport const ListControls: React.FC<ListControlsProps> = (props) => {\n const {\n beforeActions,\n collectionConfig,\n collectionSlug,\n disableQueryPresets,\n enableColumns = true,\n enableFilters = true,\n enableSort = false,\n listMenuItems: listMenuItemsFromProps,\n queryPreset: activePreset,\n queryPresetPermissions,\n renderedFilters,\n resolvedFilterOptions,\n } = props\n\n const { handleSearchChange, query } = useListQuery()\n\n const {\n CreateNewPresetDrawer,\n DeletePresetModal,\n EditPresetDrawer,\n hasModifiedPreset,\n openPresetListDrawer,\n PresetListDrawer,\n queryPresetMenuItems,\n resetPreset,\n } = useQueryPresets({\n activePreset,\n collectionSlug,\n queryPresetPermissions,\n })\n\n const titleField = useUseTitleField(collectionConfig)\n const { i18n, t } = useTranslation()\n\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n const searchLabel =\n (titleField &&\n getTranslation(\n 'label' in titleField &&\n (typeof titleField.label === 'string' || typeof titleField.label === 'object')\n ? titleField.label\n : 'name' in titleField\n ? titleField.name\n : null,\n i18n,\n )) ??\n 'ID'\n\n const listSearchableFields = getTextFieldsToBeSearched(\n collectionConfig.admin.listSearchableFields,\n collectionConfig.fields,\n i18n,\n )\n\n const searchLabelTranslated = useRef(\n t('general:searchBy', { label: getTranslation(searchLabel, i18n) }),\n )\n\n const hasWhereParam = useRef(Boolean(query?.where))\n\n const shouldInitializeWhereOpened = validateWhereQuery(query?.where)\n const [visibleDrawer, setVisibleDrawer] = useState<'columns' | 'sort' | 'where'>(\n shouldInitializeWhereOpened ? 'where' : undefined,\n )\n\n useEffect(() => {\n if (hasWhereParam.current && !query?.where) {\n hasWhereParam.current = false\n } else if (query?.where) {\n hasWhereParam.current = true\n }\n }, [setVisibleDrawer, query?.where])\n\n useEffect(() => {\n if (listSearchableFields?.length > 0) {\n searchLabelTranslated.current = listSearchableFields.reduce(\n (placeholderText: string, field, i: number) => {\n const label =\n 'label' in field && field.label ? field.label : 'name' in field ? field.name : null\n\n if (i === 0) {\n return `${t('general:searchBy', {\n label: getTranslation(label, i18n),\n })}`\n }\n\n if (i === listSearchableFields.length - 1) {\n return `${placeholderText} ${t('general:or')} ${getTranslation(label, i18n)}`\n }\n\n return `${placeholderText}, ${getTranslation(label, i18n)}`\n },\n '',\n )\n } else {\n searchLabelTranslated.current = t('general:searchBy', {\n label: getTranslation(searchLabel, i18n),\n })\n }\n }, [t, listSearchableFields, i18n, searchLabel])\n\n let listMenuItems: React.ReactNode[] = listMenuItemsFromProps\n\n if (\n collectionConfig?.enableQueryPresets &&\n !disableQueryPresets &&\n queryPresetMenuItems?.length > 0\n ) {\n // Cannot push or unshift into `listMenuItemsFromProps` as it will mutate the original array\n listMenuItems = [\n ...queryPresetMenuItems,\n listMenuItemsFromProps?.length > 0 ? <PopupList.Divider key=\"divider\" /> : null,\n ...(listMenuItemsFromProps || []),\n ]\n }\n\n return (\n <Fragment>\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <SearchIcon />\n <SearchFilter\n handleChange={handleSearchChange}\n key={collectionSlug}\n // eslint-disable-next-line react-compiler/react-compiler -- TODO: fix\n label={searchLabelTranslated.current}\n searchQueryParam={query?.search}\n />\n {activePreset && hasModifiedPreset ? (\n <div className={`${baseClass}__modified`}>Modified</div>\n ) : null}\n <div className={`${baseClass}__buttons`}>\n <div className={`${baseClass}__buttons-wrap`}>\n {!smallBreak && <React.Fragment>{beforeActions && beforeActions}</React.Fragment>}\n {enableColumns && (\n <Pill\n aria-controls={`${baseClass}-columns`}\n aria-expanded={visibleDrawer === 'columns'}\n className={`${baseClass}__toggle-columns`}\n icon={<ChevronIcon direction={visibleDrawer === 'columns' ? 'up' : 'down'} />}\n onClick={() =>\n setVisibleDrawer(visibleDrawer !== 'columns' ? 'columns' : undefined)\n }\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:columns')}\n </Pill>\n )}\n {enableFilters && (\n <Pill\n aria-controls={`${baseClass}-where`}\n aria-expanded={visibleDrawer === 'where'}\n className={`${baseClass}__toggle-where`}\n icon={<ChevronIcon direction={visibleDrawer === 'where' ? 'up' : 'down'} />}\n onClick={() => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined)}\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:filters')}\n </Pill>\n )}\n {enableSort && (\n <Pill\n aria-controls={`${baseClass}-sort`}\n aria-expanded={visibleDrawer === 'sort'}\n className={`${baseClass}__toggle-sort`}\n icon={<ChevronIcon />}\n onClick={() => setVisibleDrawer(visibleDrawer !== 'sort' ? 'sort' : undefined)}\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:sort')}\n </Pill>\n )}\n {!disableQueryPresets && (\n <ActiveQueryPreset\n activePreset={activePreset}\n openPresetListDrawer={openPresetListDrawer}\n resetPreset={resetPreset}\n />\n )}\n {listMenuItems && Array.isArray(listMenuItems) && listMenuItems.length > 0 && (\n <Popup\n button={<Dots ariaLabel={t('general:moreOptions')} />}\n className={`${baseClass}__popup`}\n horizontalAlign=\"right\"\n id=\"list-menu\"\n size=\"medium\"\n verticalAlign=\"bottom\"\n >\n {listMenuItems.map((item, i) => (\n <Fragment key={`list-menu-item-${i}`}>{item}</Fragment>\n ))}\n </Popup>\n )}\n </div>\n </div>\n </div>\n {enableColumns && (\n <AnimateHeight\n className={`${baseClass}__columns`}\n height={visibleDrawer === 'columns' ? 'auto' : 0}\n id={`${baseClass}-columns`}\n >\n <ColumnSelector collectionSlug={collectionConfig.slug} />\n </AnimateHeight>\n )}\n <AnimateHeight\n className={`${baseClass}__where`}\n height={visibleDrawer === 'where' ? 'auto' : 0}\n id={`${baseClass}-where`}\n >\n <WhereBuilder\n collectionPluralLabel={collectionConfig?.labels?.plural}\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig?.fields}\n renderedFilters={renderedFilters}\n resolvedFilterOptions={resolvedFilterOptions}\n />\n </AnimateHeight>\n </div>\n {PresetListDrawer}\n {EditPresetDrawer}\n {CreateNewPresetDrawer}\n {DeletePresetModal}\n </Fragment>\n )\n}\n"],"mappings":"AAAA;;;AAEA,SAASA,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,SAASC,kBAAkB,QAAQ;AACnC,OAAOC,KAAA,IAASC,QAAQ,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAI7D,SAASC,KAAK,EAAEC,SAAS,QAAQ;AACjC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,WAAW,QAAQ;AAC5B,SAASC,IAAI,QAAQ;AACrB,SAASC,UAAU,QAAQ;AAC3B,SAASC,YAAY,QAAQ;AAC7B,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,SAASC,IAAI,QAAQ;AACrB,SAASC,YAAY,QAAQ;AAC7B,SAASC,YAAY,QAAQ;AAC7B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,eAAe,QAAQ;AAChC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB;;;;;AAKA,OAAO,MAAMC,YAAA,GAA6CC,KAAA;EACxD,MAAM;IACJC,aAAa;IACbC,gBAAgB;IAChBC,cAAc;IACdC,mBAAmB;IACnBC,aAAA,GAAgB,IAAI;IACpBC,aAAA,GAAgB,IAAI;IACpBC,UAAA,GAAa,KAAK;IAClBC,aAAA,EAAeC,sBAAsB;IACrCC,WAAA,EAAaC,YAAY;IACzBC,sBAAsB;IACtBC,eAAe;IACfC;EAAqB,CACtB,GAAGd,KAAA;EAEJ,MAAM;IAAEe,kBAAkB;IAAEC;EAAK,CAAE,GAAG5B,YAAA;EAEtC,MAAM;IACJ6B,qBAAqB;IACrBC,iBAAiB;IACjBC,gBAAgB;IAChBC,iBAAiB;IACjBC,oBAAoB;IACpBC,gBAAgB;IAChBC,oBAAoB;IACpBC;EAAW,CACZ,GAAG3B,eAAA,CAAgB;IAClBc,YAAA;IACAR,cAAA;IACAS;EACF;EAEA,MAAMa,UAAA,GAAazC,gBAAA,CAAiBkB,gBAAA;EACpC,MAAM;IAAEwB,IAAI;IAAEC;EAAC,CAAE,GAAGtC,cAAA;EAEpB,MAAM;IACJuC,WAAA,EAAa;MAAEC,CAAA,EAAGC;IAAU;EAAE,CAC/B,GAAGxD,aAAA;EAEJ,MAAMyD,WAAA,GACJ,CAACN,UAAA,IACClD,cAAA,CACE,WAAWkD,UAAA,KACR,OAAOA,UAAA,CAAWO,KAAK,KAAK,YAAY,OAAOP,UAAA,CAAWO,KAAK,KAAK,QAAO,IAC1EP,UAAA,CAAWO,KAAK,GAChB,UAAUP,UAAA,GACRA,UAAA,CAAWQ,IAAI,GACf,MACNP,IAAA,CACF,KACF;EAEF,MAAMQ,oBAAA,GAAuBtC,yBAAA,CAC3BM,gBAAA,CAAiBiC,KAAK,CAACD,oBAAoB,EAC3ChC,gBAAA,CAAiBkC,MAAM,EACvBV,IAAA;EAGF,MAAMW,qBAAA,GAAwBzD,MAAA,CAC5B+C,CAAA,CAAE,oBAAoB;IAAEK,KAAA,EAAOzD,cAAA,CAAewD,WAAA,EAAaL,IAAA;EAAM;EAGnE,MAAMY,aAAA,GAAgB1D,MAAA,CAAO2D,OAAA,CAAQvB,KAAA,EAAOwB,KAAA;EAE5C,MAAMC,2BAAA,GAA8BjE,kBAAA,CAAmBwC,KAAA,EAAOwB,KAAA;EAC9D,MAAM,CAACE,aAAA,EAAeC,gBAAA,CAAiB,GAAG9D,QAAA,CACxC4D,2BAAA,GAA8B,UAAUG,SAAA;EAG1CjE,SAAA,CAAU;IACR,IAAI2D,aAAA,CAAcO,OAAO,IAAI,CAAC7B,KAAA,EAAOwB,KAAA,EAAO;MAC1CF,aAAA,CAAcO,OAAO,GAAG;IAC1B,OAAO,IAAI7B,KAAA,EAAOwB,KAAA,EAAO;MACvBF,aAAA,CAAcO,OAAO,GAAG;IAC1B;EACF,GAAG,CAACF,gBAAA,EAAkB3B,KAAA,EAAOwB,KAAA,CAAM;EAEnC7D,SAAA,CAAU;IACR,IAAIuD,oBAAA,EAAsBY,MAAA,GAAS,GAAG;MACpCT,qBAAA,CAAsBQ,OAAO,GAAGX,oBAAA,CAAqBa,MAAM,CACzD,CAACC,eAAA,EAAyBC,KAAA,EAAOC,CAAA;QAC/B,MAAMlB,KAAA,GACJ,WAAWiB,KAAA,IAASA,KAAA,CAAMjB,KAAK,GAAGiB,KAAA,CAAMjB,KAAK,GAAG,UAAUiB,KAAA,GAAQA,KAAA,CAAMhB,IAAI,GAAG;QAEjF,IAAIiB,CAAA,KAAM,GAAG;UACX,OAAO,GAAGvB,CAAA,CAAE,oBAAoB;YAC9BK,KAAA,EAAOzD,cAAA,CAAeyD,KAAA,EAAON,IAAA;UAC/B,IAAI;QACN;QAEA,IAAIwB,CAAA,KAAMhB,oBAAA,CAAqBY,MAAM,GAAG,GAAG;UACzC,OAAO,GAAGE,eAAA,IAAmBrB,CAAA,CAAE,iBAAiBpD,cAAA,CAAeyD,KAAA,EAAON,IAAA,GAAO;QAC/E;QAEA,OAAO,GAAGsB,eAAA,KAAoBzE,cAAA,CAAeyD,KAAA,EAAON,IAAA,GAAO;MAC7D,GACA;IAEJ,OAAO;MACLW,qBAAA,CAAsBQ,OAAO,GAAGlB,CAAA,CAAE,oBAAoB;QACpDK,KAAA,EAAOzD,cAAA,CAAewD,WAAA,EAAaL,IAAA;MACrC;IACF;EACF,GAAG,CAACC,CAAA,EAAGO,oBAAA,EAAsBR,IAAA,EAAMK,WAAA,CAAY;EAE/C,IAAIvB,aAAA,GAAmCC,sBAAA;EAEvC,IACEP,gBAAA,EAAkBiD,kBAAA,IAClB,CAAC/C,mBAAA,IACDmB,oBAAA,EAAsBuB,MAAA,GAAS,GAC/B;IACA;IACAtC,aAAA,GAAgB,C,GACXe,oBAAA,EACHd,sBAAA,EAAwBqC,MAAA,GAAS,iBAAIM,IAAA,CAACrE,SAAA,CAAUsE,OAAO,MAAK,aAAe,M,IACvE5C,sBAAA,IAA0B,EAAE,EACjC;EACH;EAEA,oBACE6C,KAAA,CAAC5E,QAAA;4BACC4E,KAAA,CAAC;MAAIC,SAAA,EAAWzD,SAAA;8BACdwD,KAAA,CAAC;QAAIC,SAAA,EAAW,GAAGzD,SAAA,QAAiB;gCAClCsD,IAAA,CAACjE,UAAA,O,aACDiE,IAAA,CAAC3D,YAAA;UACC+D,YAAA,EAAczC,kBAAA;UAEd;UACAiB,KAAA,EAAOK,qBAAA,CAAsBQ,OAAO;UACpCY,gBAAA,EAAkBzC,KAAA,EAAO0C;WAHpBvD,cAAA,GAKNQ,YAAA,IAAgBS,iBAAA,gBACfgC,IAAA,CAAC;UAAIG,SAAA,EAAW,GAAGzD,SAAA,YAAqB;oBAAE;aACxC,M,aACJsD,IAAA,CAAC;UAAIG,SAAA,EAAW,GAAGzD,SAAA,WAAoB;oBACrC,aAAAwD,KAAA,CAAC;YAAIC,SAAA,EAAW,GAAGzD,SAAA,gBAAyB;uBACzC,CAACgC,UAAA,iBAAcsB,IAAA,CAAC3E,KAAA,CAAMC,QAAQ;wBAAEuB,aAAA,IAAiBA;gBACjDI,aAAA,iBACC+C,IAAA,CAAC5D,IAAA;cACC,iBAAe,GAAGM,SAAA,UAAmB;cACrC,iBAAe4C,aAAA,KAAkB;cACjCa,SAAA,EAAW,GAAGzD,SAAA,kBAA2B;cACzC6D,IAAA,eAAMP,IAAA,CAACnE,WAAA;gBAAY2E,SAAA,EAAWlB,aAAA,KAAkB,YAAY,OAAO;;cACnEmB,OAAA,EAASA,CAAA,KACPlB,gBAAA,CAAiBD,aAAA,KAAkB,YAAY,YAAYE,SAAA;cAE7DkB,SAAA,EAAU;cACVC,IAAA,EAAK;wBAEJpC,CAAA,CAAE;gBAGNrB,aAAA,iBACC8C,IAAA,CAAC5D,IAAA;cACC,iBAAe,GAAGM,SAAA,QAAiB;cACnC,iBAAe4C,aAAA,KAAkB;cACjCa,SAAA,EAAW,GAAGzD,SAAA,gBAAyB;cACvC6D,IAAA,eAAMP,IAAA,CAACnE,WAAA;gBAAY2E,SAAA,EAAWlB,aAAA,KAAkB,UAAU,OAAO;;cACjEmB,OAAA,EAASA,CAAA,KAAMlB,gBAAA,CAAiBD,aAAA,KAAkB,UAAU,UAAUE,SAAA;cACtEkB,SAAA,EAAU;cACVC,IAAA,EAAK;wBAEJpC,CAAA,CAAE;gBAGNpB,UAAA,iBACC6C,IAAA,CAAC5D,IAAA;cACC,iBAAe,GAAGM,SAAA,OAAgB;cAClC,iBAAe4C,aAAA,KAAkB;cACjCa,SAAA,EAAW,GAAGzD,SAAA,eAAwB;cACtC6D,IAAA,eAAMP,IAAA,CAACnE,WAAA;cACP4E,OAAA,EAASA,CAAA,KAAMlB,gBAAA,CAAiBD,aAAA,KAAkB,SAAS,SAASE,SAAA;cACpEkB,SAAA,EAAU;cACVC,IAAA,EAAK;wBAEJpC,CAAA,CAAE;gBAGN,CAACvB,mBAAA,iBACAgD,IAAA,CAACzD,iBAAA;cACCgB,YAAA,EAAcA,YAAA;cACdU,oBAAA,EAAsBA,oBAAA;cACtBG,WAAA,EAAaA;gBAGhBhB,aAAA,IAAiBwD,KAAA,CAAMC,OAAO,CAACzD,aAAA,KAAkBA,aAAA,CAAcsC,MAAM,GAAG,kBACvEM,IAAA,CAACtE,KAAA;cACCoF,MAAA,eAAQd,IAAA,CAAClE,IAAA;gBAAKiF,SAAA,EAAWxC,CAAA,CAAE;;cAC3B4B,SAAA,EAAW,GAAGzD,SAAA,SAAkB;cAChCsE,eAAA,EAAgB;cAChBC,EAAA,EAAG;cACHN,IAAA,EAAK;cACLO,aAAA,EAAc;wBAEb9D,aAAA,CAAc+D,GAAG,CAAC,CAACC,IAAA,EAAMtB,GAAA,kBACxBE,IAAA,CAAC1E,QAAA;0BAAsC8F;iBAAxB,kBAAkBtB,GAAA,EAAG;;;;UAO/C7C,aAAA,iBACC+C,IAAA,CAAC9D,aAAA;QACCiE,SAAA,EAAW,GAAGzD,SAAA,WAAoB;QAClC2E,MAAA,EAAQ/B,aAAA,KAAkB,YAAY,SAAS;QAC/C2B,EAAA,EAAI,GAAGvE,SAAA,UAAmB;kBAE1B,aAAAsD,IAAA,CAAC7D,cAAA;UAAeY,cAAA,EAAgBD,gBAAA,CAAiBwE;;uBAGrDtB,IAAA,CAAC9D,aAAA;QACCiE,SAAA,EAAW,GAAGzD,SAAA,SAAkB;QAChC2E,MAAA,EAAQ/B,aAAA,KAAkB,UAAU,SAAS;QAC7C2B,EAAA,EAAI,GAAGvE,SAAA,QAAiB;kBAExB,aAAAsD,IAAA,CAAC1D,YAAA;UACCiF,qBAAA,EAAuBzE,gBAAA,EAAkB0E,MAAA,EAAQC,MAAA;UACjD1E,cAAA,EAAgBD,gBAAA,CAAiBwE,IAAI;UACrCtC,MAAA,EAAQlC,gBAAA,EAAkBkC,MAAA;UAC1BvB,eAAA,EAAiBA,eAAA;UACjBC,qBAAA,EAAuBA;;;QAI5BQ,gBAAA,EACAH,gBAAA,EACAF,qBAAA,EACAC,iBAAA;;AAGP","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useWindowInfo","getTranslation","validateWhereQuery","React","Fragment","useEffect","useRef","useState","Popup","PopupList","useUseTitleField","ChevronIcon","Dots","SearchIcon","useListQuery","useTranslation","AnimateHeight","ColumnSelector","GroupByBuilder","Pill","SearchFilter","WhereBuilder","ActiveQueryPreset","getTextFieldsToBeSearched","useQueryPresets","baseClass","ListControls","props","beforeActions","collectionConfig","collectionSlug","disableQueryPresets","enableColumns","enableFilters","enableSort","listMenuItems","listMenuItemsFromProps","queryPreset","activePreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","handleSearchChange","query","CreateNewPresetDrawer","DeletePresetModal","EditPresetDrawer","hasModifiedPreset","openPresetListDrawer","PresetListDrawer","queryPresetMenuItems","resetPreset","titleField","i18n","t","breakpoints","s","smallBreak","searchLabel","label","name","listSearchableFields","admin","fields","searchLabelTranslated","hasWhereParam","Boolean","where","shouldInitializeWhereOpened","visibleDrawer","setVisibleDrawer","undefined","current","length","reduce","placeholderText","field","i","enableQueryPresets","_jsx","Divider","_jsxs","className","handleChange","searchQueryParam","search","icon","direction","id","onClick","pillStyle","size","groupBy","Array","isArray","button","ariaLabel","horizontalAlign","verticalAlign","map","item","height","slug","collectionPluralLabel","labels","plural"],"sources":["../../../src/elements/ListControls/index.tsx"],"sourcesContent":["'use client'\n\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { getTranslation } from '@payloadcms/translations'\nimport { validateWhereQuery } from 'payload/shared'\nimport React, { Fragment, useEffect, useRef, useState } from 'react'\n\nimport type { ListControlsProps } from './types.js'\n\nimport { Popup, PopupList } from '../../elements/Popup/index.js'\nimport { useUseTitleField } from '../../hooks/useUseAsTitle.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { Dots } from '../../icons/Dots/index.js'\nimport { SearchIcon } from '../../icons/Search/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { AnimateHeight } from '../AnimateHeight/index.js'\nimport { ColumnSelector } from '../ColumnSelector/index.js'\nimport { GroupByBuilder } from '../GroupByBuilder/index.js'\nimport { Pill } from '../Pill/index.js'\nimport { SearchFilter } from '../SearchFilter/index.js'\nimport { WhereBuilder } from '../WhereBuilder/index.js'\nimport { ActiveQueryPreset } from './ActiveQueryPreset/index.js'\nimport { getTextFieldsToBeSearched } from './getTextFieldsToBeSearched.js'\nimport { useQueryPresets } from './useQueryPresets.js'\nimport './index.scss'\n\nconst baseClass = 'list-controls'\n\n/**\n * The ListControls component is used to render the controls (search, filter, where)\n * for a collection's list view. You can find those directly above the table which lists\n * the collection's documents.\n */\nexport const ListControls: React.FC<ListControlsProps> = (props) => {\n const {\n beforeActions,\n collectionConfig,\n collectionSlug,\n disableQueryPresets,\n enableColumns = true,\n enableFilters = true,\n enableSort = false,\n listMenuItems: listMenuItemsFromProps,\n queryPreset: activePreset,\n queryPresetPermissions,\n renderedFilters,\n resolvedFilterOptions,\n } = props\n\n const { handleSearchChange, query } = useListQuery()\n\n const {\n CreateNewPresetDrawer,\n DeletePresetModal,\n EditPresetDrawer,\n hasModifiedPreset,\n openPresetListDrawer,\n PresetListDrawer,\n queryPresetMenuItems,\n resetPreset,\n } = useQueryPresets({\n activePreset,\n collectionSlug,\n queryPresetPermissions,\n })\n\n const titleField = useUseTitleField(collectionConfig)\n const { i18n, t } = useTranslation()\n\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n const searchLabel =\n (titleField &&\n getTranslation(\n 'label' in titleField &&\n (typeof titleField.label === 'string' || typeof titleField.label === 'object')\n ? titleField.label\n : 'name' in titleField\n ? titleField.name\n : null,\n i18n,\n )) ??\n 'ID'\n\n const listSearchableFields = getTextFieldsToBeSearched(\n collectionConfig.admin.listSearchableFields,\n collectionConfig.fields,\n i18n,\n )\n\n const searchLabelTranslated = useRef(\n t('general:searchBy', { label: getTranslation(searchLabel, i18n) }),\n )\n\n const hasWhereParam = useRef(Boolean(query?.where))\n\n const shouldInitializeWhereOpened = validateWhereQuery(query?.where)\n\n const [visibleDrawer, setVisibleDrawer] = useState<'columns' | 'group-by' | 'sort' | 'where'>(\n shouldInitializeWhereOpened ? 'where' : undefined,\n )\n\n useEffect(() => {\n if (hasWhereParam.current && !query?.where) {\n hasWhereParam.current = false\n } else if (query?.where) {\n hasWhereParam.current = true\n }\n }, [setVisibleDrawer, query?.where])\n\n useEffect(() => {\n if (listSearchableFields?.length > 0) {\n searchLabelTranslated.current = listSearchableFields.reduce(\n (placeholderText: string, field, i: number) => {\n const label =\n 'label' in field && field.label ? field.label : 'name' in field ? field.name : null\n\n if (i === 0) {\n return `${t('general:searchBy', {\n label: getTranslation(label, i18n),\n })}`\n }\n\n if (i === listSearchableFields.length - 1) {\n return `${placeholderText} ${t('general:or')} ${getTranslation(label, i18n)}`\n }\n\n return `${placeholderText}, ${getTranslation(label, i18n)}`\n },\n '',\n )\n } else {\n searchLabelTranslated.current = t('general:searchBy', {\n label: getTranslation(searchLabel, i18n),\n })\n }\n }, [t, listSearchableFields, i18n, searchLabel])\n\n let listMenuItems: React.ReactNode[] = listMenuItemsFromProps\n\n if (\n collectionConfig.enableQueryPresets &&\n !disableQueryPresets &&\n queryPresetMenuItems?.length > 0\n ) {\n // Cannot push or unshift into `listMenuItemsFromProps` as it will mutate the original array\n listMenuItems = [\n ...queryPresetMenuItems,\n listMenuItemsFromProps?.length > 0 ? <PopupList.Divider key=\"divider\" /> : null,\n ...(listMenuItemsFromProps || []),\n ]\n }\n\n return (\n <Fragment>\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <SearchIcon />\n <SearchFilter\n handleChange={handleSearchChange}\n key={collectionSlug}\n label={searchLabelTranslated.current}\n searchQueryParam={query?.search}\n />\n {activePreset && hasModifiedPreset ? (\n <div className={`${baseClass}__modified`}>Modified</div>\n ) : null}\n <div className={`${baseClass}__buttons`}>\n <div className={`${baseClass}__buttons-wrap`}>\n {!smallBreak && <React.Fragment>{beforeActions && beforeActions}</React.Fragment>}\n {enableColumns && (\n <Pill\n aria-controls={`${baseClass}-columns`}\n aria-expanded={visibleDrawer === 'columns'}\n className={`${baseClass}__toggle-columns`}\n icon={<ChevronIcon direction={visibleDrawer === 'columns' ? 'up' : 'down'} />}\n id=\"toggle-columns\"\n onClick={() =>\n setVisibleDrawer(visibleDrawer !== 'columns' ? 'columns' : undefined)\n }\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:columns')}\n </Pill>\n )}\n {enableFilters && (\n <Pill\n aria-controls={`${baseClass}-where`}\n aria-expanded={visibleDrawer === 'where'}\n className={`${baseClass}__toggle-where`}\n icon={<ChevronIcon direction={visibleDrawer === 'where' ? 'up' : 'down'} />}\n id=\"toggle-list-filters\"\n onClick={() => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined)}\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:filters')}\n </Pill>\n )}\n {enableSort && (\n <Pill\n aria-controls={`${baseClass}-sort`}\n aria-expanded={visibleDrawer === 'sort'}\n className={`${baseClass}__toggle-sort`}\n icon={<ChevronIcon />}\n onClick={() => setVisibleDrawer(visibleDrawer !== 'sort' ? 'sort' : undefined)}\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:sort')}\n </Pill>\n )}\n {!disableQueryPresets && (\n <ActiveQueryPreset\n activePreset={activePreset}\n openPresetListDrawer={openPresetListDrawer}\n resetPreset={resetPreset}\n />\n )}\n {collectionConfig.admin.groupBy && (\n <Pill\n aria-controls={`${baseClass}-group-by`}\n aria-expanded={visibleDrawer === 'group-by'}\n className={`${baseClass}__toggle-group-by`}\n icon={<ChevronIcon direction={visibleDrawer === 'group-by' ? 'up' : 'down'} />}\n id=\"toggle-group-by\"\n onClick={() =>\n setVisibleDrawer(visibleDrawer !== 'group-by' ? 'group-by' : undefined)\n }\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:groupByLabel', {\n label: '',\n })}\n </Pill>\n )}\n {listMenuItems && Array.isArray(listMenuItems) && listMenuItems.length > 0 && (\n <Popup\n button={<Dots ariaLabel={t('general:moreOptions')} />}\n className={`${baseClass}__popup`}\n horizontalAlign=\"right\"\n id=\"list-menu\"\n size=\"medium\"\n verticalAlign=\"bottom\"\n >\n {listMenuItems.map((item, i) => (\n <Fragment key={`list-menu-item-${i}`}>{item}</Fragment>\n ))}\n </Popup>\n )}\n </div>\n </div>\n </div>\n {enableColumns && (\n <AnimateHeight\n className={`${baseClass}__columns`}\n height={visibleDrawer === 'columns' ? 'auto' : 0}\n id={`${baseClass}-columns`}\n >\n <ColumnSelector collectionSlug={collectionConfig.slug} />\n </AnimateHeight>\n )}\n <AnimateHeight\n className={`${baseClass}__where`}\n height={visibleDrawer === 'where' ? 'auto' : 0}\n id={`${baseClass}-where`}\n >\n <WhereBuilder\n collectionPluralLabel={collectionConfig.labels?.plural}\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig.fields}\n renderedFilters={renderedFilters}\n resolvedFilterOptions={resolvedFilterOptions}\n />\n </AnimateHeight>\n {collectionConfig.admin.groupBy && (\n <AnimateHeight\n className={`${baseClass}__group-by`}\n height={visibleDrawer === 'group-by' ? 'auto' : 0}\n id={`${baseClass}-group-by`}\n >\n <GroupByBuilder\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig.fields}\n />\n </AnimateHeight>\n )}\n </div>\n {PresetListDrawer}\n {EditPresetDrawer}\n {CreateNewPresetDrawer}\n {DeletePresetModal}\n </Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -36,7 +36,8 @@
36
36
 
37
37
  .pill-selector,
38
38
  .where-builder,
39
- .sort-complex {
39
+ .sort-complex,
40
+ .group-by-builder {
40
41
  margin-top: base(1);
41
42
  }
42
43
 
@@ -90,7 +91,8 @@
90
91
 
91
92
  &__toggle-columns,
92
93
  &__toggle-where,
93
- &__toggle-sort {
94
+ &__toggle-sort,
95
+ &__toggle-group-by {
94
96
  flex: 1;
95
97
  }
96
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/ListDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAUjD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA0KvD,CAAA"}
1
+ {"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/ListDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAUjD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA8LvD,CAAA"}