@payloadcms/ui 3.49.0-canary.8 → 3.49.1

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 (197) hide show
  1. package/dist/elements/AddNewRelation/index.d.ts.map +1 -1
  2. package/dist/elements/AddNewRelation/index.js +1 -1
  3. package/dist/elements/AddNewRelation/index.js.map +1 -1
  4. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  5. package/dist/elements/DeleteDocument/index.js +65 -47
  6. package/dist/elements/DeleteDocument/index.js.map +1 -1
  7. package/dist/elements/DeleteDocument/index.scss +10 -0
  8. package/dist/elements/DeleteMany/index.d.ts +6 -2
  9. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  10. package/dist/elements/DeleteMany/index.js +153 -51
  11. package/dist/elements/DeleteMany/index.js.map +1 -1
  12. package/dist/elements/DeleteMany/index.scss +13 -0
  13. package/dist/elements/DocumentControls/index.d.ts +3 -0
  14. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  15. package/dist/elements/DocumentControls/index.js +24 -5
  16. package/dist/elements/DocumentControls/index.js.map +1 -1
  17. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  18. package/dist/elements/DocumentDrawer/DrawerContent.js +4 -2
  19. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  20. package/dist/elements/DocumentDrawer/Provider.d.ts +5 -1
  21. package/dist/elements/DocumentDrawer/Provider.d.ts.map +1 -1
  22. package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
  23. package/dist/elements/DocumentDrawer/index.d.ts +19 -0
  24. package/dist/elements/DocumentDrawer/index.d.ts.map +1 -1
  25. package/dist/elements/DocumentDrawer/index.js +28 -9
  26. package/dist/elements/DocumentDrawer/index.js.map +1 -1
  27. package/dist/elements/DocumentDrawer/types.d.ts +26 -12
  28. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  29. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  30. package/dist/elements/DocumentFields/index.d.ts +1 -0
  31. package/dist/elements/DocumentFields/index.d.ts.map +1 -1
  32. package/dist/elements/DocumentFields/index.js +3 -1
  33. package/dist/elements/DocumentFields/index.js.map +1 -1
  34. package/dist/elements/FolderView/Cell/index.client.d.ts +3 -2
  35. package/dist/elements/FolderView/Cell/index.client.d.ts.map +1 -1
  36. package/dist/elements/FolderView/Cell/index.client.js +3 -1
  37. package/dist/elements/FolderView/Cell/index.client.js.map +1 -1
  38. package/dist/elements/FolderView/Cell/index.server.d.ts.map +1 -1
  39. package/dist/elements/FolderView/Cell/index.server.js +2 -1
  40. package/dist/elements/FolderView/Cell/index.server.js.map +1 -1
  41. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts +7 -0
  42. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -0
  43. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +164 -0
  44. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -0
  45. package/dist/elements/ListHeader/TitleActions/index.d.ts +1 -0
  46. package/dist/elements/ListHeader/TitleActions/index.d.ts.map +1 -1
  47. package/dist/elements/ListHeader/TitleActions/index.js +1 -0
  48. package/dist/elements/ListHeader/TitleActions/index.js.map +1 -1
  49. package/dist/elements/ListHeaderTabs/ByFolderPill.d.ts +10 -0
  50. package/dist/elements/ListHeaderTabs/ByFolderPill.d.ts.map +1 -0
  51. package/dist/elements/ListHeaderTabs/ByFolderPill.js +70 -0
  52. package/dist/elements/ListHeaderTabs/ByFolderPill.js.map +1 -0
  53. package/dist/elements/ListHeaderTabs/DefaultListPill.d.ts +9 -0
  54. package/dist/elements/ListHeaderTabs/DefaultListPill.d.ts.map +1 -0
  55. package/dist/elements/ListHeaderTabs/DefaultListPill.js +68 -0
  56. package/dist/elements/ListHeaderTabs/DefaultListPill.js.map +1 -0
  57. package/dist/elements/ListHeaderTabs/TrashPill.d.ts +6 -0
  58. package/dist/elements/ListHeaderTabs/TrashPill.d.ts.map +1 -0
  59. package/dist/elements/ListHeaderTabs/TrashPill.js +53 -0
  60. package/dist/elements/ListHeaderTabs/TrashPill.js.map +1 -0
  61. package/dist/elements/{ListFolderPills → ListHeaderTabs}/index.scss +1 -2
  62. package/dist/elements/ListSelection/index.scss +1 -1
  63. package/dist/elements/PermanentlyDeleteButton/index.d.ts +14 -0
  64. package/dist/elements/PermanentlyDeleteButton/index.d.ts.map +1 -0
  65. package/dist/elements/PermanentlyDeleteButton/index.js +147 -0
  66. package/dist/elements/PermanentlyDeleteButton/index.js.map +1 -0
  67. package/dist/elements/RelationshipTable/cells/DrawerLink/index.d.ts +3 -3
  68. package/dist/elements/RelationshipTable/cells/DrawerLink/index.d.ts.map +1 -1
  69. package/dist/elements/RelationshipTable/cells/DrawerLink/index.js +19 -70
  70. package/dist/elements/RelationshipTable/cells/DrawerLink/index.js.map +1 -1
  71. package/dist/elements/RelationshipTable/cells/DrawerLink/index.scss +10 -0
  72. package/dist/elements/RelationshipTable/index.d.ts +1 -0
  73. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  74. package/dist/elements/RelationshipTable/index.js +61 -40
  75. package/dist/elements/RelationshipTable/index.js.map +1 -1
  76. package/dist/elements/RestoreButton/index.d.ts +15 -0
  77. package/dist/elements/RestoreButton/index.d.ts.map +1 -0
  78. package/dist/elements/RestoreButton/index.js +171 -0
  79. package/dist/elements/RestoreButton/index.js.map +1 -0
  80. package/dist/elements/RestoreButton/index.scss +25 -0
  81. package/dist/elements/RestoreMany/index.d.ts +9 -0
  82. package/dist/elements/RestoreMany/index.d.ts.map +1 -0
  83. package/dist/elements/RestoreMany/index.js +193 -0
  84. package/dist/elements/RestoreMany/index.js.map +1 -0
  85. package/dist/elements/RestoreMany/index.scss +25 -0
  86. package/dist/elements/Status/index.d.ts.map +1 -1
  87. package/dist/elements/Status/index.js +6 -4
  88. package/dist/elements/Status/index.js.map +1 -1
  89. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  90. package/dist/elements/Table/DefaultCell/index.js +12 -9
  91. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  92. package/dist/elements/Toasts/fieldErrors.d.ts.map +1 -1
  93. package/dist/elements/Toasts/fieldErrors.js +4 -1
  94. package/dist/elements/Toasts/fieldErrors.js.map +1 -1
  95. package/dist/elements/TrashBanner/index.d.ts +4 -0
  96. package/dist/elements/TrashBanner/index.d.ts.map +1 -0
  97. package/dist/elements/TrashBanner/index.js +37 -0
  98. package/dist/elements/TrashBanner/index.js.map +1 -0
  99. package/dist/elements/TrashBanner/index.scss +20 -0
  100. package/dist/exports/client/index.js +24 -22
  101. package/dist/exports/client/index.js.map +4 -4
  102. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  103. package/dist/fields/Checkbox/Input.js +2 -0
  104. package/dist/fields/Checkbox/Input.js.map +1 -1
  105. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  106. package/dist/fields/Relationship/Input.js.map +1 -1
  107. package/dist/fields/Relationship/index.d.ts.map +1 -1
  108. package/dist/fields/Relationship/index.js +8 -8
  109. package/dist/fields/Relationship/index.js.map +1 -1
  110. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts +1 -0
  111. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  112. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +7 -0
  113. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  114. package/dist/forms/fieldSchemasToFormState/index.d.ts +2 -1
  115. package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
  116. package/dist/forms/fieldSchemasToFormState/index.js +2 -0
  117. package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
  118. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts +2 -1
  119. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
  120. package/dist/forms/fieldSchemasToFormState/iterateFields.js +2 -0
  121. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  122. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  123. package/dist/forms/fieldSchemasToFormState/renderField.js +2 -1
  124. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  125. package/dist/forms/fieldSchemasToFormState/types.d.ts +1 -0
  126. package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
  127. package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
  128. package/dist/{elements/AddNewRelation → hooks}/useRelatedCollections.d.ts +3 -0
  129. package/dist/hooks/useRelatedCollections.d.ts.map +1 -0
  130. package/dist/{elements/AddNewRelation → hooks}/useRelatedCollections.js +4 -1
  131. package/dist/hooks/useRelatedCollections.js.map +1 -0
  132. package/dist/icons/Trash/index.d.ts +6 -0
  133. package/dist/icons/Trash/index.d.ts.map +1 -0
  134. package/dist/icons/Trash/index.js +22 -0
  135. package/dist/icons/Trash/index.js.map +1 -0
  136. package/dist/icons/Trash/index.scss +6 -0
  137. package/dist/providers/DocumentInfo/types.d.ts +2 -0
  138. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  139. package/dist/providers/DocumentInfo/types.js.map +1 -1
  140. package/dist/providers/ServerFunctions/index.d.ts +1 -0
  141. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  142. package/dist/providers/ServerFunctions/index.js.map +1 -1
  143. package/dist/providers/TableColumns/buildColumnState/index.d.ts +2 -1
  144. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  145. package/dist/providers/TableColumns/buildColumnState/index.js +4 -2
  146. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  147. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts +3 -2
  148. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
  149. package/dist/providers/TableColumns/buildColumnState/renderCell.js +4 -2
  150. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  151. package/dist/styles.css +1 -1
  152. package/dist/utilities/buildFormState.d.ts.map +1 -1
  153. package/dist/utilities/buildFormState.js +2 -0
  154. package/dist/utilities/buildFormState.js.map +1 -1
  155. package/dist/utilities/getDisplayedFieldValue.d.ts.map +1 -1
  156. package/dist/utilities/getDisplayedFieldValue.js +2 -2
  157. package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
  158. package/dist/utilities/hasOptionLabelJSXElement.js +2 -2
  159. package/dist/utilities/hasOptionLabelJSXElement.js.map +1 -1
  160. package/dist/utilities/isValidReactElement.d.ts +7 -0
  161. package/dist/utilities/isValidReactElement.d.ts.map +1 -0
  162. package/dist/utilities/isValidReactElement.js +10 -0
  163. package/dist/utilities/isValidReactElement.js.map +1 -0
  164. package/dist/utilities/renderTable.d.ts +4 -3
  165. package/dist/utilities/renderTable.d.ts.map +1 -1
  166. package/dist/utilities/renderTable.js +15 -13
  167. package/dist/utilities/renderTable.js.map +1 -1
  168. package/dist/views/CollectionFolder/index.d.ts.map +1 -1
  169. package/dist/views/CollectionFolder/index.js +15 -5
  170. package/dist/views/CollectionFolder/index.js.map +1 -1
  171. package/dist/views/Edit/Auth/index.js +5 -4
  172. package/dist/views/Edit/Auth/index.js.map +1 -1
  173. package/dist/views/Edit/SetDocumentStepNav/index.d.ts +1 -0
  174. package/dist/views/Edit/SetDocumentStepNav/index.d.ts.map +1 -1
  175. package/dist/views/Edit/SetDocumentStepNav/index.js +26 -15
  176. package/dist/views/Edit/SetDocumentStepNav/index.js.map +1 -1
  177. package/dist/views/Edit/index.d.ts.map +1 -1
  178. package/dist/views/Edit/index.js +11 -3
  179. package/dist/views/Edit/index.js.map +1 -1
  180. package/dist/views/List/ListHeader/index.d.ts +4 -2
  181. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  182. package/dist/views/List/ListHeader/index.js +24 -9
  183. package/dist/views/List/ListHeader/index.js.map +1 -1
  184. package/dist/views/List/ListSelection/index.d.ts +2 -1
  185. package/dist/views/List/ListSelection/index.d.ts.map +1 -1
  186. package/dist/views/List/ListSelection/index.js +26 -17
  187. package/dist/views/List/ListSelection/index.js.map +1 -1
  188. package/dist/views/List/index.d.ts.map +1 -1
  189. package/dist/views/List/index.js +28 -13
  190. package/dist/views/List/index.js.map +1 -1
  191. package/package.json +7 -7
  192. package/dist/elements/AddNewRelation/useRelatedCollections.d.ts.map +0 -1
  193. package/dist/elements/AddNewRelation/useRelatedCollections.js.map +0 -1
  194. package/dist/elements/ListFolderPills/index.d.ts +0 -10
  195. package/dist/elements/ListFolderPills/index.d.ts.map +0 -1
  196. package/dist/elements/ListFolderPills/index.js +0 -97
  197. package/dist/elements/ListFolderPills/index.js.map +0 -1
@@ -9,6 +9,7 @@ import { mergeListSearchAndWhere } from 'payload/shared';
9
9
  import * as qs from 'qs-esm';
10
10
  import React from 'react';
11
11
  import { toast } from 'sonner';
12
+ import { CheckboxInput } from '../../fields/Checkbox/Input.js';
12
13
  import { useAuth } from '../../providers/Auth/index.js';
13
14
  import { useConfig } from '../../providers/Config/index.js';
14
15
  import { useLocale } from '../../providers/Locale/index.js';
@@ -19,8 +20,13 @@ import { requests } from '../../utilities/api.js';
19
20
  import { parseSearchParams } from '../../utilities/parseSearchParams.js';
20
21
  import { ConfirmationModal } from '../ConfirmationModal/index.js';
21
22
  import { ListSelectionButton } from '../ListSelection/index.js';
23
+ import { Translation } from '../Translation/index.js';
24
+ import './index.scss';
22
25
  export const DeleteMany = props => {
23
- const $ = _c(20);
26
+ const $ = _c(24);
27
+ const {
28
+ viewType
29
+ } = props;
24
30
  const {
25
31
  collection: t0,
26
32
  modalPrefix
@@ -34,7 +40,8 @@ export const DeleteMany = props => {
34
40
  t1 = $[1];
35
41
  }
36
42
  const {
37
- slug
43
+ slug,
44
+ trash
38
45
  } = t1;
39
46
  const {
40
47
  permissions
@@ -67,31 +74,39 @@ export const DeleteMany = props => {
67
74
  return null;
68
75
  }
69
76
  let t3;
70
- if ($[5] !== clearRouteCache || $[6] !== router || $[7] !== searchParams || $[8] !== selectAll || $[9] !== toggleAll) {
71
- t3 = () => {
72
- toggleAll();
73
- router.replace(qs.stringify({
74
- ...parseSearchParams(searchParams),
75
- page: selectAll ? "1" : undefined
76
- }, {
77
- addQueryPrefix: true
78
- }));
79
- clearRouteCache();
80
- };
81
- $[5] = clearRouteCache;
82
- $[6] = router;
83
- $[7] = searchParams;
84
- $[8] = selectAll;
85
- $[9] = toggleAll;
86
- $[10] = t3;
87
- } else {
88
- t3 = $[10];
89
- }
90
- let t4;
91
- if ($[11] !== count || $[12] !== ids || $[13] !== modalPrefix || $[14] !== searchParams || $[15] !== selectAll || $[16] !== selectingAll || $[17] !== slug || $[18] !== t3) {
92
- t4 = _jsx(React.Fragment, {
77
+ if ($[5] !== clearRouteCache || $[6] !== count || $[7] !== ids || $[8] !== modalPrefix || $[9] !== router || $[10] !== searchParams || $[11] !== selectAll || $[12] !== selectingAll || $[13] !== slug || $[14] !== toggleAll || $[15] !== trash || $[16] !== viewType) {
78
+ const baseWhere = parseSearchParams(searchParams)?.where;
79
+ const finalWhere = viewType === "trash" ? {
80
+ and: [...(Array.isArray(baseWhere?.and) ? baseWhere.and : baseWhere ? [baseWhere] : []), {
81
+ deletedAt: {
82
+ exists: true
83
+ }
84
+ }]
85
+ } : baseWhere;
86
+ let t4;
87
+ if ($[18] !== clearRouteCache || $[19] !== router || $[20] !== searchParams || $[21] !== selectAll || $[22] !== toggleAll) {
88
+ t4 = () => {
89
+ toggleAll();
90
+ router.replace(qs.stringify({
91
+ ...parseSearchParams(searchParams),
92
+ page: selectAll ? "1" : undefined
93
+ }, {
94
+ addQueryPrefix: true
95
+ }));
96
+ clearRouteCache();
97
+ };
98
+ $[18] = clearRouteCache;
99
+ $[19] = router;
100
+ $[20] = searchParams;
101
+ $[21] = selectAll;
102
+ $[22] = toggleAll;
103
+ $[23] = t4;
104
+ } else {
105
+ t4 = $[23];
106
+ }
107
+ t3 = _jsx(React.Fragment, {
93
108
  children: _jsx(DeleteMany_v4, {
94
- afterDelete: t3,
109
+ afterDelete: t4,
95
110
  modalPrefix,
96
111
  search: parseSearchParams(searchParams)?.search,
97
112
  selections: {
@@ -101,22 +116,28 @@ export const DeleteMany = props => {
101
116
  totalCount: selectingAll ? count : ids.length
102
117
  }
103
118
  },
104
- where: parseSearchParams(searchParams)?.where
119
+ trash,
120
+ viewType,
121
+ where: finalWhere
105
122
  })
106
123
  });
107
- $[11] = count;
108
- $[12] = ids;
109
- $[13] = modalPrefix;
110
- $[14] = searchParams;
111
- $[15] = selectAll;
112
- $[16] = selectingAll;
113
- $[17] = slug;
114
- $[18] = t3;
115
- $[19] = t4;
124
+ $[5] = clearRouteCache;
125
+ $[6] = count;
126
+ $[7] = ids;
127
+ $[8] = modalPrefix;
128
+ $[9] = router;
129
+ $[10] = searchParams;
130
+ $[11] = selectAll;
131
+ $[12] = selectingAll;
132
+ $[13] = slug;
133
+ $[14] = toggleAll;
134
+ $[15] = trash;
135
+ $[16] = viewType;
136
+ $[17] = t3;
116
137
  } else {
117
- t4 = $[19];
138
+ t3 = $[17];
118
139
  }
119
- return t4;
140
+ return t3;
120
141
  };
121
142
  /**
122
143
  * Handles polymorphic document delete operations.
@@ -128,6 +149,8 @@ export function DeleteMany_v4({
128
149
  modalPrefix,
129
150
  search,
130
151
  selections,
152
+ trash,
153
+ viewType,
131
154
  where
132
155
  }) {
133
156
  const {
@@ -151,6 +174,7 @@ export function DeleteMany_v4({
151
174
  const {
152
175
  openModal
153
176
  } = useModal();
177
+ const [deletePermanently, setDeletePermanently] = React.useState(false);
154
178
  const confirmManyDeleteDrawerSlug = `${modalPrefix ? `${modalPrefix}-` : ''}confirm-delete-many-docs`;
155
179
  const handleDelete = React.useCallback(async () => {
156
180
  const deletingOneCollection = Object.keys(selections).length === 1;
@@ -167,9 +191,25 @@ export function DeleteMany_v4({
167
191
  if (all) {
168
192
  // selecting all documents with optional where filter
169
193
  if (deletingOneCollection && where) {
170
- whereConstraint = where;
194
+ whereConstraint = viewType === 'trash' ? {
195
+ and: [...(Array.isArray(where.and) ? where.and : [where]), {
196
+ deletedAt: {
197
+ exists: true
198
+ }
199
+ }]
200
+ } : where;
171
201
  } else {
172
- whereConstraint = {
202
+ whereConstraint = viewType === 'trash' ? {
203
+ and: [{
204
+ id: {
205
+ not_equals: ''
206
+ }
207
+ }, {
208
+ deletedAt: {
209
+ exists: true
210
+ }
211
+ }]
212
+ } : {
173
213
  id: {
174
214
  not_equals: ''
175
215
  }
@@ -178,22 +218,40 @@ export function DeleteMany_v4({
178
218
  } else {
179
219
  // selecting specific documents
180
220
  whereConstraint = {
181
- id: {
182
- in: ids
183
- }
221
+ and: [{
222
+ id: {
223
+ in: ids
224
+ }
225
+ }, ...(viewType === 'trash' ? [{
226
+ deletedAt: {
227
+ exists: true
228
+ }
229
+ }] : [])]
184
230
  };
185
231
  }
186
- const deleteManyResponse = await requests.delete(`${serverURL}${api}/${relationTo}${qs.stringify({
232
+ const url = `${serverURL}${api}/${relationTo}${qs.stringify({
187
233
  limit: 0,
188
234
  locale,
189
235
  where: mergeListSearchAndWhere({
190
236
  collectionConfig,
191
237
  search,
192
238
  where: whereConstraint
193
- })
239
+ }),
240
+ ...(viewType === 'trash' ? {
241
+ trash: true
242
+ } : {})
194
243
  }, {
195
244
  addQueryPrefix: true
196
- })}`, {
245
+ })}`;
246
+ const deleteManyResponse = viewType === 'trash' || deletePermanently || !collectionConfig.trash ? await requests.delete(url, {
247
+ headers: {
248
+ 'Accept-Language': i18n.language,
249
+ 'Content-Type': 'application/json'
250
+ }
251
+ }) : await requests.patch(url, {
252
+ body: JSON.stringify({
253
+ deletedAt: new Date().toISOString()
254
+ }),
197
255
  headers: {
198
256
  'Accept-Language': i18n.language,
199
257
  'Content-Type': 'application/json'
@@ -208,7 +266,16 @@ export function DeleteMany_v4({
208
266
  const deletedDocs = json?.docs.length || 0;
209
267
  const successLabel = deletedDocs > 1 ? plural : singular;
210
268
  if (deleteManyResponse.status < 400 || deletedDocs > 0) {
211
- toast.success(t('general:deletedCountSuccessfully', {
269
+ const wasTrashed = collectionConfig.trash && !deletePermanently && viewType !== 'trash';
270
+ let successKey;
271
+ if (wasTrashed) {
272
+ successKey = 'general:trashedCountSuccessfully';
273
+ } else if (viewType === 'trash' || deletePermanently) {
274
+ successKey = 'general:permanentlyDeletedCountSuccessfully';
275
+ } else {
276
+ successKey = 'general:deletedCountSuccessfully';
277
+ }
278
+ toast.success(t(successKey, {
212
279
  count: deletedDocs,
213
280
  label: getTranslation(successLabel, i18n)
214
281
  }));
@@ -244,7 +311,7 @@ export function DeleteMany_v4({
244
311
  if (typeof afterDelete === 'function') {
245
312
  afterDelete(result);
246
313
  }
247
- }, [selections, afterDelete, collections, locale, search, serverURL, api, i18n, where, t]);
314
+ }, [selections, afterDelete, collections, deletePermanently, locale, search, serverURL, api, i18n, viewType, where, t]);
248
315
  const {
249
316
  label: labelString,
250
317
  labelCount: labelCount_0
@@ -282,9 +349,44 @@ export function DeleteMany_v4({
282
349
  },
283
350
  children: t('general:delete')
284
351
  }), /*#__PURE__*/_jsx(ConfirmationModal, {
285
- body: t('general:aboutToDeleteCount', {
286
- count: labelCount_0,
287
- label: labelString
352
+ body: /*#__PURE__*/_jsxs(React.Fragment, {
353
+ children: [/*#__PURE__*/_jsx("p", {
354
+ children: trash ? viewType === 'trash' ? /*#__PURE__*/_jsx(Translation, {
355
+ elements: {
356
+ '0': ({
357
+ children
358
+ }) => /*#__PURE__*/_jsx("strong", {
359
+ children: children
360
+ }),
361
+ '1': ({
362
+ children: children_0
363
+ }) => /*#__PURE__*/_jsx("strong", {
364
+ children: children_0
365
+ })
366
+ },
367
+ i18nKey: "general:aboutToPermanentlyDeleteTrash",
368
+ t: t,
369
+ variables: {
370
+ count: labelCount_0 ?? 0,
371
+ label: labelString
372
+ }
373
+ }) : t('general:aboutToTrashCount', {
374
+ count: labelCount_0,
375
+ label: labelString
376
+ }) : t('general:aboutToDeleteCount', {
377
+ count: labelCount_0,
378
+ label: labelString
379
+ })
380
+ }), trash && viewType !== 'trash' && /*#__PURE__*/_jsx("div", {
381
+ className: "delete-documents__checkbox",
382
+ children: /*#__PURE__*/_jsx(CheckboxInput, {
383
+ checked: deletePermanently,
384
+ id: "delete-forever",
385
+ label: t('general:deletePermanently'),
386
+ name: "delete-forever",
387
+ onToggle: e => setDeletePermanently(e.target.checked)
388
+ })
389
+ })]
288
390
  }),
289
391
  confirmingLabel: t('general:deleting'),
290
392
  heading: t('general:confirmDeletion'),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useModal","getTranslation","useRouter","useSearchParams","mergeListSearchAndWhere","qs","React","toast","useAuth","useConfig","useLocale","useRouteCache","SelectAllStatus","useSelection","useTranslation","requests","parseSearchParams","ConfirmationModal","ListSelectionButton","DeleteMany","props","$","collection","t0","modalPrefix","t1","undefined","slug","permissions","count","selectAll","selectedIDs","toggleAll","router","searchParams","clearRouteCache","collectionPermissions","collections","hasDeletePermission","delete","selectingAll","AllAvailable","t2","ids","None","t3","replace","stringify","page","addQueryPrefix","t4","_jsx","Fragment","children","DeleteMany_v4","afterDelete","search","selections","all","totalCount","length","where","t","config","routes","api","serverURL","code","locale","i18n","openModal","confirmManyDeleteDrawerSlug","handleDelete","useCallback","deletingOneCollection","Object","keys","result","relationTo","entries","collectionConfig","find","whereConstraint","id","not_equals","in","deleteManyResponse","limit","headers","language","plural","singular","labels","json","deletedDocs","docs","successLabel","status","success","label","errors","error","message","description","map","join","deletedCount","doc","totalDocs","_err","labelString","labelCount","reduce","acc","key","value","index","array","collectionLabel","newLabel","_jsxs","className","onClick","body","confirmingLabel","heading","modalSlug","onConfirm"],"sources":["../../../src/elements/DeleteMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { mergeListSearchAndWhere } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { ListSelectionButton } from '../ListSelection/index.js'\n\nexport type Props = {\n collection: ClientCollectionConfig\n /**\n * When multiple DeleteMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n /**\n * When multiple PublishMany components are rendered on the page, this will differentiate them.\n */\n title?: string\n}\n\nexport const DeleteMany: React.FC<Props> = (props) => {\n const { collection: { slug } = {}, modalPrefix } = props\n\n const { permissions } = useAuth()\n const { count, selectAll, selectedIDs, toggleAll } = useSelection()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { clearRouteCache } = useRouteCache()\n\n const collectionPermissions = permissions?.collections?.[slug]\n const hasDeletePermission = collectionPermissions?.delete\n\n const selectingAll = selectAll === SelectAllStatus.AllAvailable\n\n const ids = selectingAll ? [] : selectedIDs\n\n if (selectAll === SelectAllStatus.None || !hasDeletePermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <DeleteMany_v4\n afterDelete={() => {\n toggleAll()\n\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n\n clearRouteCache()\n }}\n modalPrefix={modalPrefix}\n search={parseSearchParams(searchParams)?.search as string}\n selections={{\n [slug]: {\n all: selectAll === SelectAllStatus.AllAvailable,\n ids,\n totalCount: selectingAll ? count : ids.length,\n },\n }}\n where={parseSearchParams(searchParams)?.where as Where}\n />\n </React.Fragment>\n )\n}\n\ntype AfterDeleteResult = {\n [relationTo: string]: {\n deletedCount: number\n errors: unknown[]\n ids: (number | string)[]\n totalCount: number\n }\n}\ntype DeleteMany_v4Props = {\n /**\n * A callback function to be called after the delete request is completed.\n */\n afterDelete?: (result: AfterDeleteResult) => void\n /**\n * When multiple DeleteMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n /**\n * Optionally pass a search string to filter the documents to be deleted.\n *\n * This is intentionally passed as a prop so modals could pass in their own\n * search string that may not be stored in the URL.\n */\n search?: string\n /**\n * An object containing the relationTo as the key and an object with the following properties:\n * - all: boolean\n * - totalCount: number\n * - ids: (string | number)[]\n */\n selections: {\n [relationTo: string]: {\n all?: boolean\n ids?: (number | string)[]\n totalCount?: number\n }\n }\n /**\n * Optionally pass a where clause to filter the documents to be deleted.\n * This will be ignored if multiple relations are selected.\n *\n * This is intentionally passed as a prop so modals could pass in their own\n * where clause that may not be stored in the URL.\n */\n where?: Where\n}\n\n/**\n * Handles polymorphic document delete operations.\n *\n * If you are deleting monomorphic documents, shape your `selections` to match the polymorphic structure.\n */\nexport function DeleteMany_v4({\n afterDelete,\n modalPrefix,\n search,\n selections,\n where,\n}: DeleteMany_v4Props) {\n const { t } = useTranslation()\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const { code: locale } = useLocale()\n const { i18n } = useTranslation()\n const { openModal } = useModal()\n\n const confirmManyDeleteDrawerSlug = `${modalPrefix ? `${modalPrefix}-` : ''}confirm-delete-many-docs`\n\n const handleDelete = React.useCallback(async () => {\n const deletingOneCollection = Object.keys(selections).length === 1\n const result: AfterDeleteResult = {}\n\n for (const [relationTo, { all, ids = [] }] of Object.entries(selections)) {\n const collectionConfig = collections.find(({ slug }) => slug === relationTo)\n\n if (collectionConfig) {\n let whereConstraint: Where\n\n if (all) {\n // selecting all documents with optional where filter\n if (deletingOneCollection && where) {\n whereConstraint = where\n } else {\n whereConstraint = {\n id: {\n not_equals: '',\n },\n }\n }\n } else {\n // selecting specific documents\n whereConstraint = {\n id: {\n in: ids,\n },\n }\n }\n\n const deleteManyResponse = await requests.delete(\n `${serverURL}${api}/${relationTo}${qs.stringify(\n {\n limit: 0,\n locale,\n where: mergeListSearchAndWhere({\n collectionConfig,\n search,\n where: whereConstraint,\n }),\n },\n { addQueryPrefix: true },\n )}`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n },\n )\n\n try {\n const { plural, singular } = collectionConfig.labels\n const json = await deleteManyResponse.json()\n\n const deletedDocs = json?.docs.length || 0\n const successLabel = deletedDocs > 1 ? plural : singular\n\n if (deleteManyResponse.status < 400 || deletedDocs > 0) {\n toast.success(\n t('general:deletedCountSuccessfully', {\n count: deletedDocs,\n label: getTranslation(successLabel, i18n),\n }),\n )\n }\n\n if (json?.errors.length > 0) {\n toast.error(json.message, {\n description: json.errors.map((error) => error.message).join('\\n'),\n })\n }\n\n result[relationTo] = {\n deletedCount: deletedDocs,\n errors: json?.errors || null,\n ids: json?.docs.map((doc) => doc.id) || [],\n totalCount: json.totalDocs,\n }\n\n if (deleteManyResponse.status > 400 && json?.errors.length === 0) {\n toast.error(t('error:unknown'))\n result[relationTo].errors = [t('error:unknown')]\n }\n\n continue\n } catch (_err) {\n toast.error(t('error:unknown'))\n result[relationTo] = {\n deletedCount: 0,\n errors: [_err],\n ids: [],\n totalCount: 0,\n }\n continue\n }\n }\n }\n\n if (typeof afterDelete === 'function') {\n afterDelete(result)\n }\n }, [selections, afterDelete, collections, locale, search, serverURL, api, i18n, where, t])\n\n const { label: labelString, labelCount } = Object.entries(selections).reduce(\n (acc, [key, value], index, array) => {\n const collectionConfig = collections.find(({ slug }) => slug === key)\n if (collectionConfig) {\n const labelCount = acc.labelCount === undefined ? value.totalCount : acc.labelCount\n const collectionLabel = `${acc.labelCount !== undefined ? `${value.totalCount} ` : ''}${getTranslation(\n value.totalCount > 1 ? collectionConfig.labels.plural : collectionConfig.labels.singular,\n i18n,\n )}`\n\n let newLabel\n\n if (index === array.length - 1 && index !== 0) {\n newLabel = `${acc.label} and ${collectionLabel}`\n } else if (index > 0) {\n newLabel = `${acc.label}, ${collectionLabel}`\n } else {\n newLabel = collectionLabel\n }\n\n return {\n label: newLabel,\n labelCount,\n }\n }\n return acc\n },\n {\n label: '',\n labelCount: undefined,\n },\n )\n\n return (\n <React.Fragment>\n <ListSelectionButton\n aria-label={t('general:delete')}\n className=\"delete-documents__toggle\"\n onClick={() => {\n openModal(confirmManyDeleteDrawerSlug)\n }}\n >\n {t('general:delete')}\n </ListSelectionButton>\n <ConfirmationModal\n body={t('general:aboutToDeleteCount', {\n count: labelCount,\n label: labelString,\n })}\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={confirmManyDeleteDrawerSlug}\n onConfirm={handleDelete}\n />\n </React.Fragment>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,EAAEC,eAAe,QAAQ;AAC3C,SAASC,uBAAuB,QAAQ;AACxC,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,MAAW;AAClB,SAASC,KAAK,QAAQ;AAEtB,SAASC,OAAO,QAAQ;AACxB,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,aAAa,QAAQ;AAC9B,SAASC,eAAe,EAAEC,YAAY,QAAQ;AAC9C,SAASC,cAAc,QAAQ;AAC/B,SAASC,QAAQ,QAAQ;AACzB,SAASC,iBAAiB,QAAQ;AAClC,SAASC,iBAAiB,QAAQ;AAClC,SAASC,mBAAmB,QAAQ;AAcpC,OAAO,MAAMC,UAAA,GAA8BC,KAAA;EAAA,MAAAC,CAAA,GAAAtB,EAAA;EACzC;IAAAuB,UAAA,EAAAC,EAAA;IAAAC;EAAA,IAAmDJ,KAAA;EAAA,IAAAK,EAAA;EAAA,IAAAJ,CAAA,QAAAE,EAAA;IAA/BE,EAAA,GAAAF,EAAa,KAAAG,SAAA,QAAbH,EAAa;IAAAF,CAAA,MAAAE,EAAA;IAAAF,CAAA,MAAAI,EAAA;EAAA;IAAAA,EAAA,GAAAJ,CAAA;EAAA;EAAb;IAAAM;EAAA,IAAAF,EAAa;EAEjC;IAAAG;EAAA,IAAwBpB,OAAA;EACxB;IAAAqB,KAAA;IAAAC,SAAA;IAAAC,WAAA;IAAAC;EAAA,IAAqDnB,YAAA;EACrD,MAAAoB,MAAA,GAAe/B,SAAA;EACf,MAAAgC,YAAA,GAAqB/B,eAAA;EACrB;IAAAgC;EAAA,IAA4BxB,aAAA;EAE5B,MAAAyB,qBAAA,GAA8BR,WAAA,EAAAS,WAAA,GAA2BV,IAAA;EACzD,MAAAW,mBAAA,GAA4BF,qBAAA,EAAAG,MAAA;EAE5B,MAAAC,YAAA,GAAqBV,SAAA,KAAAlB,eAAA,CAAA6B,YAA0C;EAAA,IAAAC,EAAA;EAAA,IAAArB,CAAA,QAAAU,WAAA,IAAAV,CAAA,QAAAmB,YAAA;IAEnDE,EAAA,GAAAF,YAAA,QAAoBT,WAAA;IAAAV,CAAA,MAAAU,WAAA;IAAAV,CAAA,MAAAmB,YAAA;IAAAnB,CAAA,MAAAqB,EAAA;EAAA;IAAAA,EAAA,GAAArB,CAAA;EAAA;EAAhC,MAAAsB,GAAA,GAAYD,EAAoB;EAAA,IAE5BZ,SAAA,KAAAlB,eAAA,CAAAgC,IAAkC,KAAKN,mBAAA;IAAA;EAAA;EAAA,IAAAO,EAAA;EAAA,IAAAxB,CAAA,QAAAc,eAAA,IAAAd,CAAA,QAAAY,MAAA,IAAAZ,CAAA,QAAAa,YAAA,IAAAb,CAAA,QAAAS,SAAA,IAAAT,CAAA,QAAAW,SAAA;IAOxBa,EAAA,GAAAA,CAAA;MACXb,SAAA;MAEAC,MAAA,CAAAa,OAAA,CACEzC,EAAA,CAAA0C,SAAA;QAAA,GAEO/B,iBAAA,CAAkBkB,YAAA,CAAa;QAAAc,IAAA,EAC5BlB,SAAA,GAAY,MAAAJ;MAAM;QAAAuB,cAAA;MAAA,CAEH;MAI3Bd,eAAA;IAAA;IACFd,CAAA,MAAAc,eAAA;IAAAd,CAAA,MAAAY,MAAA;IAAAZ,CAAA,MAAAa,YAAA;IAAAb,CAAA,MAAAS,SAAA;IAAAT,CAAA,MAAAW,SAAA;IAAAX,CAAA,OAAAwB,EAAA;EAAA;IAAAA,EAAA,GAAAxB,CAAA;EAAA;EAAA,IAAA6B,EAAA;EAAA,IAAA7B,CAAA,SAAAQ,KAAA,IAAAR,CAAA,SAAAsB,GAAA,IAAAtB,CAAA,SAAAG,WAAA,IAAAH,CAAA,SAAAa,YAAA,IAAAb,CAAA,SAAAS,SAAA,IAAAT,CAAA,SAAAmB,YAAA,IAAAnB,CAAA,SAAAM,IAAA,IAAAN,CAAA,SAAAwB,EAAA;IAhBJK,EAAA,GAAAC,IAAA,CAAA7C,KAAA,CAAA8C,QAAA;MAAAC,QAAA,EACEF,IAAA,CAAAG,aAAA;QAAAC,WAAA,EACeV,EAcb;QAAArB,WAAA;QAAAgC,MAAA,EAEQxC,iBAAA,CAAkBkB,YAAA,GAAAsB,MAAA;QAAAC,UAAA;UAAA,CAEvB9B,IAAA;YAAA+B,GAAA,EACM5B,SAAA,KAAAlB,eAAA,CAAA6B,YAA0C;YAAAE,GAAA;YAAAgB,UAAA,EAEnCnB,YAAA,GAAeX,KAAA,GAAQc,GAAA,CAAAiB;UAAU;QAAA;QAAAC,KAAA,EAG1C7C,iBAAA,CAAkBkB,YAAA,GAAA2B;MAAA,C;;;;;;;;;;;;;;SA1B7BX,E;CA8BJ;AAiDA;;;;;AAKA,OAAO,SAASI,cAAc;EAC5BC,WAAW;EACX/B,WAAW;EACXgC,MAAM;EACNC,UAAU;EACVI;AAAK,CACc;EACnB,MAAM;IAAEC;EAAC,CAAE,GAAGhD,cAAA;EAEd,MAAM;IACJiD,MAAA,EAAQ;MACN1B,WAAW;MACX2B,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS;EACV,CACF,GAAGzD,SAAA;EAEJ,MAAM;IAAE0D,IAAA,EAAMC;EAAM,CAAE,GAAG1D,SAAA;EACzB,MAAM;IAAE2D;EAAI,CAAE,GAAGvD,cAAA;EACjB,MAAM;IAAEwD;EAAS,CAAE,GAAGtE,QAAA;EAEtB,MAAMuE,2BAAA,GAA8B,GAAG/C,WAAA,GAAc,GAAGA,WAAA,GAAc,GAAG,4BAA4B;EAErG,MAAMgD,YAAA,GAAelE,KAAA,CAAMmE,WAAW,CAAC;IACrC,MAAMC,qBAAA,GAAwBC,MAAA,CAAOC,IAAI,CAACnB,UAAA,EAAYG,MAAM,KAAK;IACjE,MAAMiB,MAAA,GAA4B,CAAC;IAEnC,KAAK,MAAM,CAACC,UAAA,EAAY;MAAEpB,GAAG;MAAEf,GAAA,GAAM;IAAE,CAAE,CAAC,IAAIgC,MAAA,CAAOI,OAAO,CAACtB,UAAA,GAAa;MACxE,MAAMuB,gBAAA,GAAmB3C,WAAA,CAAY4C,IAAI,CAAC,CAAC;QAAEtD;MAAI,CAAE,KAAKA,IAAA,KAASmD,UAAA;MAEjE,IAAIE,gBAAA,EAAkB;QACpB,IAAIE,eAAA;QAEJ,IAAIxB,GAAA,EAAK;UACP;UACA,IAAIgB,qBAAA,IAAyBb,KAAA,EAAO;YAClCqB,eAAA,GAAkBrB,KAAA;UACpB,OAAO;YACLqB,eAAA,GAAkB;cAChBC,EAAA,EAAI;gBACFC,UAAA,EAAY;cACd;YACF;UACF;QACF,OAAO;UACL;UACAF,eAAA,GAAkB;YAChBC,EAAA,EAAI;cACFE,EAAA,EAAI1C;YACN;UACF;QACF;QAEA,MAAM2C,kBAAA,GAAqB,MAAMvE,QAAA,CAASwB,MAAM,CAC9C,GAAG2B,SAAA,GAAYD,GAAA,IAAOa,UAAA,GAAazE,EAAA,CAAG0C,SAAS,CAC7C;UACEwC,KAAA,EAAO;UACPnB,MAAA;UACAP,KAAA,EAAOzD,uBAAA,CAAwB;YAC7B4E,gBAAA;YACAxB,MAAA;YACAK,KAAA,EAAOqB;UACT;QACF,GACA;UAAEjC,cAAA,EAAgB;QAAK,IACtB,EACH;UACEuC,OAAA,EAAS;YACP,mBAAmBnB,IAAA,CAAKoB,QAAQ;YAChC,gBAAgB;UAClB;QACF;QAGF,IAAI;UACF,MAAM;YAAEC,MAAM;YAAEC;UAAQ,CAAE,GAAGX,gBAAA,CAAiBY,MAAM;UACpD,MAAMC,IAAA,GAAO,MAAMP,kBAAA,CAAmBO,IAAI;UAE1C,MAAMC,WAAA,GAAcD,IAAA,EAAME,IAAA,CAAKnC,MAAA,IAAU;UACzC,MAAMoC,YAAA,GAAeF,WAAA,GAAc,IAAIJ,MAAA,GAASC,QAAA;UAEhD,IAAIL,kBAAA,CAAmBW,MAAM,GAAG,OAAOH,WAAA,GAAc,GAAG;YACtDvF,KAAA,CAAM2F,OAAO,CACXpC,CAAA,CAAE,oCAAoC;cACpCjC,KAAA,EAAOiE,WAAA;cACPK,KAAA,EAAOlG,cAAA,CAAe+F,YAAA,EAAc3B,IAAA;YACtC;UAEJ;UAEA,IAAIwB,IAAA,EAAMO,MAAA,CAAOxC,MAAA,GAAS,GAAG;YAC3BrD,KAAA,CAAM8F,KAAK,CAACR,IAAA,CAAKS,OAAO,EAAE;cACxBC,WAAA,EAAaV,IAAA,CAAKO,MAAM,CAACI,GAAG,CAAEH,KAAA,IAAUA,KAAA,CAAMC,OAAO,EAAEG,IAAI,CAAC;YAC9D;UACF;UAEA5B,MAAM,CAACC,UAAA,CAAW,GAAG;YACnB4B,YAAA,EAAcZ,WAAA;YACdM,MAAA,EAAQP,IAAA,EAAMO,MAAA,IAAU;YACxBzD,GAAA,EAAKkD,IAAA,EAAME,IAAA,CAAKS,GAAA,CAAKG,GAAA,IAAQA,GAAA,CAAIxB,EAAE,KAAK,EAAE;YAC1CxB,UAAA,EAAYkC,IAAA,CAAKe;UACnB;UAEA,IAAItB,kBAAA,CAAmBW,MAAM,GAAG,OAAOJ,IAAA,EAAMO,MAAA,CAAOxC,MAAA,KAAW,GAAG;YAChErD,KAAA,CAAM8F,KAAK,CAACvC,CAAA,CAAE;YACde,MAAM,CAACC,UAAA,CAAW,CAACsB,MAAM,GAAG,CAACtC,CAAA,CAAE,iBAAiB;UAClD;UAEA;QACF,EAAE,OAAO+C,IAAA,EAAM;UACbtG,KAAA,CAAM8F,KAAK,CAACvC,CAAA,CAAE;UACde,MAAM,CAACC,UAAA,CAAW,GAAG;YACnB4B,YAAA,EAAc;YACdN,MAAA,EAAQ,CAACS,IAAA,CAAK;YACdlE,GAAA,EAAK,EAAE;YACPgB,UAAA,EAAY;UACd;UACA;QACF;MACF;IACF;IAEA,IAAI,OAAOJ,WAAA,KAAgB,YAAY;MACrCA,WAAA,CAAYsB,MAAA;IACd;EACF,GAAG,CAACpB,UAAA,EAAYF,WAAA,EAAalB,WAAA,EAAa+B,MAAA,EAAQZ,MAAA,EAAQU,SAAA,EAAWD,GAAA,EAAKI,IAAA,EAAMR,KAAA,EAAOC,CAAA,CAAE;EAEzF,MAAM;IAAEqC,KAAA,EAAOW,WAAW;IAAEC,UAAU,EAAVA;EAAU,CAAE,GAAGpC,MAAA,CAAOI,OAAO,CAACtB,UAAA,EAAYuD,MAAM,CAC1E,CAACC,GAAA,EAAK,CAACC,GAAA,EAAKC,KAAA,CAAM,EAAEC,KAAA,EAAOC,KAAA;IACzB,MAAMrC,kBAAA,GAAmB3C,WAAA,CAAY4C,IAAI,CAAC,CAAC;MAAEtD,IAAI,EAAJA;IAAI,CAAE,KAAKA,MAAA,KAASuF,GAAA;IACjE,IAAIlC,kBAAA,EAAkB;MACpB,MAAM+B,UAAA,GAAaE,GAAA,CAAIF,UAAU,KAAKrF,SAAA,GAAYyF,KAAA,CAAMxD,UAAU,GAAGsD,GAAA,CAAIF,UAAU;MACnF,MAAMO,eAAA,GAAkB,GAAGL,GAAA,CAAIF,UAAU,KAAKrF,SAAA,GAAY,GAAGyF,KAAA,CAAMxD,UAAU,GAAG,GAAG,KAAK1D,cAAA,CACtFkH,KAAA,CAAMxD,UAAU,GAAG,IAAIqB,kBAAA,CAAiBY,MAAM,CAACF,MAAM,GAAGV,kBAAA,CAAiBY,MAAM,CAACD,QAAQ,EACxFtB,IAAA,GACC;MAEH,IAAIkD,QAAA;MAEJ,IAAIH,KAAA,KAAUC,KAAA,CAAMzD,MAAM,GAAG,KAAKwD,KAAA,KAAU,GAAG;QAC7CG,QAAA,GAAW,GAAGN,GAAA,CAAId,KAAK,QAAQmB,eAAA,EAAiB;MAClD,OAAO,IAAIF,KAAA,GAAQ,GAAG;QACpBG,QAAA,GAAW,GAAGN,GAAA,CAAId,KAAK,KAAKmB,eAAA,EAAiB;MAC/C,OAAO;QACLC,QAAA,GAAWD,eAAA;MACb;MAEA,OAAO;QACLnB,KAAA,EAAOoB,QAAA;QACPR;MACF;IACF;IACA,OAAOE,GAAA;EACT,GACA;IACEd,KAAA,EAAO;IACPY,UAAA,EAAYrF;EACd;EAGF,oBACE8F,KAAA,CAAClH,KAAA,CAAM8C,QAAQ;4BACbD,IAAA,CAACjC,mBAAA;MACC,cAAY4C,CAAA,CAAE;MACd2D,SAAA,EAAU;MACVC,OAAA,EAASA,CAAA;QACPpD,SAAA,CAAUC,2BAAA;MACZ;gBAECT,CAAA,CAAE;qBAELX,IAAA,CAAClC,iBAAA;MACC0G,IAAA,EAAM7D,CAAA,CAAE,8BAA8B;QACpCjC,KAAA,EAAOkF,YAAA;QACPZ,KAAA,EAAOW;MACT;MACAc,eAAA,EAAiB9D,CAAA,CAAE;MACnB+D,OAAA,EAAS/D,CAAA,CAAE;MACXgE,SAAA,EAAWvD,2BAAA;MACXwD,SAAA,EAAWvD;;;AAInB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useModal","getTranslation","useRouter","useSearchParams","mergeListSearchAndWhere","qs","React","toast","CheckboxInput","useAuth","useConfig","useLocale","useRouteCache","SelectAllStatus","useSelection","useTranslation","requests","parseSearchParams","ConfirmationModal","ListSelectionButton","Translation","DeleteMany","props","$","viewType","collection","t0","modalPrefix","t1","undefined","slug","trash","permissions","count","selectAll","selectedIDs","toggleAll","router","searchParams","clearRouteCache","collectionPermissions","collections","hasDeletePermission","delete","selectingAll","AllAvailable","t2","ids","None","t3","baseWhere","where","finalWhere","and","Array","isArray","deletedAt","exists","t4","replace","stringify","page","addQueryPrefix","_jsx","Fragment","children","DeleteMany_v4","afterDelete","search","selections","all","totalCount","length","t","config","routes","api","serverURL","code","locale","i18n","openModal","deletePermanently","setDeletePermanently","useState","confirmManyDeleteDrawerSlug","handleDelete","useCallback","deletingOneCollection","Object","keys","result","relationTo","entries","collectionConfig","find","whereConstraint","id","not_equals","in","url","limit","deleteManyResponse","headers","language","patch","body","JSON","Date","toISOString","plural","singular","labels","json","deletedDocs","docs","successLabel","status","wasTrashed","successKey","success","label","errors","error","message","description","map","join","deletedCount","doc","totalDocs","_err","labelString","labelCount","reduce","acc","key","value","index","array","collectionLabel","newLabel","_jsxs","className","onClick","elements","0","1","i18nKey","variables","checked","name","onToggle","e","target","confirmingLabel","heading","modalSlug","onConfirm"],"sources":["../../../src/elements/DeleteMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, ViewTypes, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { mergeListSearchAndWhere } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { CheckboxInput } from '../../fields/Checkbox/Input.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { ListSelectionButton } from '../ListSelection/index.js'\nimport { Translation } from '../Translation/index.js'\nimport './index.scss'\n\nexport type Props = {\n collection: ClientCollectionConfig\n /**\n * When multiple DeleteMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n /**\n * When multiple PublishMany components are rendered on the page, this will differentiate them.\n */\n title?: string\n viewType?: ViewTypes\n}\n\nexport const DeleteMany: React.FC<Props> = (props) => {\n const { viewType } = props\n const { collection: { slug, trash } = {}, modalPrefix } = props\n\n const { permissions } = useAuth()\n const { count, selectAll, selectedIDs, toggleAll } = useSelection()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { clearRouteCache } = useRouteCache()\n\n const collectionPermissions = permissions?.collections?.[slug]\n const hasDeletePermission = collectionPermissions?.delete\n\n const selectingAll = selectAll === SelectAllStatus.AllAvailable\n\n const ids = selectingAll ? [] : selectedIDs\n\n if (selectAll === SelectAllStatus.None || !hasDeletePermission) {\n return null\n }\n\n const baseWhere = parseSearchParams(searchParams)?.where as Where\n\n const finalWhere =\n viewType === 'trash'\n ? {\n and: [\n ...(Array.isArray(baseWhere?.and) ? baseWhere.and : baseWhere ? [baseWhere] : []),\n { deletedAt: { exists: true } },\n ],\n }\n : baseWhere\n\n return (\n <React.Fragment>\n <DeleteMany_v4\n afterDelete={() => {\n toggleAll()\n\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n\n clearRouteCache()\n }}\n modalPrefix={modalPrefix}\n search={parseSearchParams(searchParams)?.search as string}\n selections={{\n [slug]: {\n all: selectAll === SelectAllStatus.AllAvailable,\n ids,\n totalCount: selectingAll ? count : ids.length,\n },\n }}\n trash={trash}\n viewType={viewType}\n where={finalWhere}\n />\n </React.Fragment>\n )\n}\n\ntype AfterDeleteResult = {\n [relationTo: string]: {\n deletedCount: number\n errors: unknown[]\n ids: (number | string)[]\n totalCount: number\n }\n}\ntype DeleteMany_v4Props = {\n /**\n * A callback function to be called after the delete request is completed.\n */\n afterDelete?: (result: AfterDeleteResult) => void\n /**\n * When multiple DeleteMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n /**\n * Optionally pass a search string to filter the documents to be deleted.\n *\n * This is intentionally passed as a prop so modals could pass in their own\n * search string that may not be stored in the URL.\n */\n search?: string\n /**\n * An object containing the relationTo as the key and an object with the following properties:\n * - all: boolean\n * - totalCount: number\n * - ids: (string | number)[]\n */\n selections: {\n [relationTo: string]: {\n all?: boolean\n ids?: (number | string)[]\n totalCount?: number\n }\n }\n trash?: boolean\n viewType?: ViewTypes\n /**\n * Optionally pass a where clause to filter the documents to be deleted.\n * This will be ignored if multiple relations are selected.\n *\n * This is intentionally passed as a prop so modals could pass in their own\n * where clause that may not be stored in the URL.\n */\n where?: Where\n}\n\n/**\n * Handles polymorphic document delete operations.\n *\n * If you are deleting monomorphic documents, shape your `selections` to match the polymorphic structure.\n */\nexport function DeleteMany_v4({\n afterDelete,\n modalPrefix,\n search,\n selections,\n trash,\n viewType,\n where,\n}: DeleteMany_v4Props) {\n const { t } = useTranslation()\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const { code: locale } = useLocale()\n const { i18n } = useTranslation()\n const { openModal } = useModal()\n\n const [deletePermanently, setDeletePermanently] = React.useState(false)\n const confirmManyDeleteDrawerSlug = `${modalPrefix ? `${modalPrefix}-` : ''}confirm-delete-many-docs`\n\n const handleDelete = React.useCallback(async () => {\n const deletingOneCollection = Object.keys(selections).length === 1\n const result: AfterDeleteResult = {}\n\n for (const [relationTo, { all, ids = [] }] of Object.entries(selections)) {\n const collectionConfig = collections.find(({ slug }) => slug === relationTo)\n\n if (collectionConfig) {\n let whereConstraint: Where\n\n if (all) {\n // selecting all documents with optional where filter\n if (deletingOneCollection && where) {\n whereConstraint =\n viewType === 'trash'\n ? {\n and: [\n ...(Array.isArray(where.and) ? where.and : [where]),\n { deletedAt: { exists: true } },\n ],\n }\n : where\n } else {\n whereConstraint =\n viewType === 'trash'\n ? {\n and: [{ id: { not_equals: '' } }, { deletedAt: { exists: true } }],\n }\n : {\n id: { not_equals: '' },\n }\n }\n } else {\n // selecting specific documents\n whereConstraint = {\n and: [\n { id: { in: ids } },\n ...(viewType === 'trash' ? [{ deletedAt: { exists: true } }] : []),\n ],\n }\n }\n\n const url = `${serverURL}${api}/${relationTo}${qs.stringify(\n {\n limit: 0,\n locale,\n where: mergeListSearchAndWhere({\n collectionConfig,\n search,\n where: whereConstraint,\n }),\n ...(viewType === 'trash' ? { trash: true } : {}),\n },\n { addQueryPrefix: true },\n )}`\n\n const deleteManyResponse =\n viewType === 'trash' || deletePermanently || !collectionConfig.trash\n ? await requests.delete(url, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n : await requests.patch(url, {\n body: JSON.stringify({\n deletedAt: new Date().toISOString(),\n }),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n\n try {\n const { plural, singular } = collectionConfig.labels\n const json = await deleteManyResponse.json()\n\n const deletedDocs = json?.docs.length || 0\n const successLabel = deletedDocs > 1 ? plural : singular\n\n if (deleteManyResponse.status < 400 || deletedDocs > 0) {\n const wasTrashed = collectionConfig.trash && !deletePermanently && viewType !== 'trash'\n\n let successKey:\n | 'general:deletedCountSuccessfully'\n | 'general:permanentlyDeletedCountSuccessfully'\n | 'general:trashedCountSuccessfully'\n\n if (wasTrashed) {\n successKey = 'general:trashedCountSuccessfully'\n } else if (viewType === 'trash' || deletePermanently) {\n successKey = 'general:permanentlyDeletedCountSuccessfully'\n } else {\n successKey = 'general:deletedCountSuccessfully'\n }\n\n toast.success(\n t(successKey, {\n count: deletedDocs,\n label: getTranslation(successLabel, i18n),\n }),\n )\n }\n\n if (json?.errors.length > 0) {\n toast.error(json.message, {\n description: json.errors.map((error) => error.message).join('\\n'),\n })\n }\n\n result[relationTo] = {\n deletedCount: deletedDocs,\n errors: json?.errors || null,\n ids: json?.docs.map((doc) => doc.id) || [],\n totalCount: json.totalDocs,\n }\n\n if (deleteManyResponse.status > 400 && json?.errors.length === 0) {\n toast.error(t('error:unknown'))\n result[relationTo].errors = [t('error:unknown')]\n }\n\n continue\n } catch (_err) {\n toast.error(t('error:unknown'))\n result[relationTo] = {\n deletedCount: 0,\n errors: [_err],\n ids: [],\n totalCount: 0,\n }\n continue\n }\n }\n }\n\n if (typeof afterDelete === 'function') {\n afterDelete(result)\n }\n }, [\n selections,\n afterDelete,\n collections,\n deletePermanently,\n locale,\n search,\n serverURL,\n api,\n i18n,\n viewType,\n where,\n t,\n ])\n\n const { label: labelString, labelCount } = Object.entries(selections).reduce(\n (acc, [key, value], index, array) => {\n const collectionConfig = collections.find(({ slug }) => slug === key)\n if (collectionConfig) {\n const labelCount = acc.labelCount === undefined ? value.totalCount : acc.labelCount\n const collectionLabel = `${acc.labelCount !== undefined ? `${value.totalCount} ` : ''}${getTranslation(\n value.totalCount > 1 ? collectionConfig.labels.plural : collectionConfig.labels.singular,\n i18n,\n )}`\n\n let newLabel\n\n if (index === array.length - 1 && index !== 0) {\n newLabel = `${acc.label} and ${collectionLabel}`\n } else if (index > 0) {\n newLabel = `${acc.label}, ${collectionLabel}`\n } else {\n newLabel = collectionLabel\n }\n\n return {\n label: newLabel,\n labelCount,\n }\n }\n return acc\n },\n {\n label: '',\n labelCount: undefined,\n },\n )\n\n return (\n <React.Fragment>\n <ListSelectionButton\n aria-label={t('general:delete')}\n className=\"delete-documents__toggle\"\n onClick={() => {\n openModal(confirmManyDeleteDrawerSlug)\n }}\n >\n {t('general:delete')}\n </ListSelectionButton>\n <ConfirmationModal\n body={\n <React.Fragment>\n <p>\n {trash ? (\n viewType === 'trash' ? (\n <Translation\n elements={{\n '0': ({ children }) => <strong>{children}</strong>,\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToPermanentlyDeleteTrash\"\n t={t}\n variables={{\n count: labelCount ?? 0,\n label: labelString,\n }}\n />\n ) : (\n t('general:aboutToTrashCount', { count: labelCount, label: labelString })\n )\n ) : (\n t('general:aboutToDeleteCount', { count: labelCount, label: labelString })\n )}\n </p>\n {trash && viewType !== 'trash' && (\n <div className=\"delete-documents__checkbox\">\n <CheckboxInput\n checked={deletePermanently}\n id=\"delete-forever\"\n label={t('general:deletePermanently')}\n name=\"delete-forever\"\n onToggle={(e) => setDeletePermanently(e.target.checked)}\n />\n </div>\n )}\n </React.Fragment>\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={confirmManyDeleteDrawerSlug}\n onConfirm={handleDelete}\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ @import '../../scss/styles.scss';
2
+
3
+ @layer payload-default {
4
+ .delete-documents__checkbox {
5
+ padding: calc(var(--base) * 0.5) 0;
6
+
7
+ .checkbox-input {
8
+ label {
9
+ padding-bottom: 0;
10
+ }
11
+ }
12
+ }
13
+ }
@@ -21,15 +21,18 @@ export declare const DocumentControls: React.FC<{
21
21
  readonly isAccountView?: boolean;
22
22
  readonly isEditing?: boolean;
23
23
  readonly isInDrawer?: boolean;
24
+ readonly isTrashed?: boolean;
24
25
  readonly onDelete?: DocumentDrawerContextType['onDelete'];
25
26
  readonly onDrawerCreateNew?: () => void;
26
27
  readonly onDuplicate?: DocumentDrawerContextType['onDuplicate'];
28
+ readonly onRestore?: DocumentDrawerContextType['onRestore'];
27
29
  readonly onSave?: DocumentDrawerContextType['onSave'];
28
30
  readonly onTakeOver?: () => void;
29
31
  readonly permissions: null | SanitizedCollectionPermission | SanitizedGlobalPermission;
30
32
  readonly readOnlyForIncomingUser?: boolean;
31
33
  readonly redirectAfterDelete?: boolean;
32
34
  readonly redirectAfterDuplicate?: boolean;
35
+ readonly redirectAfterRestore?: boolean;
33
36
  readonly slug: SanitizedCollectionConfig['slug'];
34
37
  readonly user?: ClientUser;
35
38
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentControls/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,IAAI,EACJ,yBAAyB,EACzB,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,SAAS,CAAA;AAIhB,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAwB9E,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;KAC3C,CAAA;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;IACpB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,CAAA;IACzD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAEvC,QAAQ,CAAC,WAAW,CAAC,EAAE,yBAAyB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,MAAM,CAAC,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,6BAA6B,GAAG,yBAAyB,CAAA;IACtF,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAC1C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAC3B,CAoSA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentControls/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,IAAI,EACJ,yBAAyB,EACzB,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,SAAS,CAAA;AAIhB,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAwB9E,OAAO,cAAc,CAAA;AAMrB,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;KAC3C,CAAA;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;IACpB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,CAAA;IACzD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAEvC,QAAQ,CAAC,WAAW,CAAC,EAAE,yBAAyB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,yBAAyB,CAAC,WAAW,CAAC,CAAA;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,6BAA6B,GAAG,yBAAyB,CAAA;IACtF,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAC1C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAC3B,CAgUA,CAAA"}
@@ -20,14 +20,16 @@ import { MoveDocToFolder } from '../FolderView/MoveDocToFolder/index.js';
20
20
  import { Gutter } from '../Gutter/index.js';
21
21
  import { LivePreviewToggler } from '../LivePreview/Toggler/index.js';
22
22
  import { Locked } from '../Locked/index.js';
23
+ import { PermanentlyDeleteButton } from '../PermanentlyDeleteButton/index.js';
23
24
  import { Popup, PopupList } from '../Popup/index.js';
24
25
  import { PreviewButton } from '../PreviewButton/index.js';
25
26
  import { PublishButton } from '../PublishButton/index.js';
26
27
  import { RenderCustomComponent } from '../RenderCustomComponent/index.js';
28
+ import { RestoreButton } from '../RestoreButton/index.js';
27
29
  import { SaveButton } from '../SaveButton/index.js';
30
+ import './index.scss';
28
31
  import { SaveDraftButton } from '../SaveDraftButton/index.js';
29
32
  import { Status } from '../Status/index.js';
30
- import './index.scss';
31
33
  const baseClass = 'doc-controls';
32
34
  export const DocumentControls = props => {
33
35
  const $ = _c(15);
@@ -44,14 +46,17 @@ export const DocumentControls = props => {
44
46
  isAccountView,
45
47
  isEditing,
46
48
  isInDrawer,
49
+ isTrashed,
47
50
  onDelete,
48
51
  onDrawerCreateNew,
49
52
  onDuplicate,
53
+ onRestore,
50
54
  onTakeOver,
51
55
  permissions,
52
56
  readOnlyForIncomingUser,
53
57
  redirectAfterDelete,
54
58
  redirectAfterDuplicate,
59
+ redirectAfterRestore,
55
60
  user
56
61
  } = props;
57
62
  let t1;
@@ -182,7 +187,7 @@ export const DocumentControls = props => {
182
187
  children: [showLockedMetaIcon && _jsx(Locked, {
183
188
  className: `${baseClass}__locked-controls`,
184
189
  user
185
- }), showFolderMetaIcon && config.folders && _jsx(MoveDocToFolder, {
190
+ }), showFolderMetaIcon && config.folders && !isTrashed && _jsx(MoveDocToFolder, {
186
191
  folderCollectionSlug: config.folders.slug,
187
192
  folderFieldName: config.folders.fieldName
188
193
  })]
@@ -200,7 +205,7 @@ export const DocumentControls = props => {
200
205
  children: [(globalConfig || collectionConfig && isEditing) && _jsx("li", {
201
206
  className: [`${baseClass}__status`, `${baseClass}__list-item`].filter(Boolean).join(" "),
202
207
  children: _jsx(Status, {})
203
- }), hasSavePermission && autosaveEnabled && !unsavedDraftWithValidations && _jsx("li", {
208
+ }), hasSavePermission && autosaveEnabled && !unsavedDraftWithValidations && !isTrashed && _jsx("li", {
204
209
  className: `${baseClass}__list-item`,
205
210
  children: _jsx(Autosave, {
206
211
  collection: collectionConfig,
@@ -215,7 +220,7 @@ export const DocumentControls = props => {
215
220
  title: data?.updatedAt ? updatedAt : "",
216
221
  children: [_jsxs("p", {
217
222
  className: `${baseClass}__label`,
218
- children: [i18n.t("general:lastModified"), ":\xA0"]
223
+ children: [i18n.t(isTrashed ? "general:deleted" : "general:lastModified"), ":\xA0"]
219
224
  }), data?.updatedAt && _jsx("p", {
220
225
  className: `${baseClass}__value`,
221
226
  children: updatedAt
@@ -240,7 +245,7 @@ export const DocumentControls = props => {
240
245
  children: [BeforeDocumentControls, t6, (collectionConfig?.admin.preview || globalConfig?.admin.preview) && _jsx(RenderCustomComponent, {
241
246
  CustomComponent: CustomPreviewButton,
242
247
  Fallback: _jsx(PreviewButton, {})
243
- }), hasSavePermission && _jsx(Fragment, {
248
+ }), hasSavePermission && !isTrashed && _jsx(Fragment, {
244
249
  children: collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts ? _jsxs(Fragment, {
245
250
  children: [(unsavedDraftWithValidations || !autosaveEnabled || autosaveEnabled && showSaveDraftButton) && _jsx(RenderCustomComponent, {
246
251
  CustomComponent: CustomSaveDraftButton,
@@ -253,6 +258,20 @@ export const DocumentControls = props => {
253
258
  CustomComponent: CustomSaveButton,
254
259
  Fallback: _jsx(SaveButton, {})
255
260
  })
261
+ }), hasDeletePermission && isTrashed && _jsx(PermanentlyDeleteButton, {
262
+ buttonId: "action-permanently-delete",
263
+ collectionSlug: collectionConfig?.slug,
264
+ id: id.toString(),
265
+ onDelete,
266
+ redirectAfterDelete,
267
+ singularLabel: collectionConfig?.labels?.singular
268
+ }), hasSavePermission && isTrashed && _jsx(RestoreButton, {
269
+ buttonId: "action-restore",
270
+ collectionSlug: collectionConfig?.slug,
271
+ id: id.toString(),
272
+ onRestore,
273
+ redirectAfterRestore,
274
+ singularLabel: collectionConfig?.labels?.singular
256
275
  }), t7]
257
276
  }), showDotMenu && !readOnlyForIncomingUser && _jsx(Popup, {
258
277
  button: _jsxs("div", {