@payloadcms/ui 3.49.0-canary.8 → 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.
- package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
- package/dist/elements/DeleteDocument/index.js +65 -47
- package/dist/elements/DeleteDocument/index.js.map +1 -1
- package/dist/elements/DeleteDocument/index.scss +10 -0
- package/dist/elements/DeleteMany/index.d.ts +6 -2
- package/dist/elements/DeleteMany/index.d.ts.map +1 -1
- package/dist/elements/DeleteMany/index.js +153 -51
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DeleteMany/index.scss +13 -0
- package/dist/elements/DocumentControls/index.d.ts +3 -0
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js +24 -5
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js +4 -2
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DocumentDrawer/Provider.d.ts +4 -0
- package/dist/elements/DocumentDrawer/Provider.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.d.ts +1 -0
- package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/DocumentFields/index.d.ts +1 -0
- package/dist/elements/DocumentFields/index.d.ts.map +1 -1
- package/dist/elements/DocumentFields/index.js +3 -1
- package/dist/elements/DocumentFields/index.js.map +1 -1
- package/dist/elements/FolderView/Cell/index.client.d.ts +3 -2
- package/dist/elements/FolderView/Cell/index.client.d.ts.map +1 -1
- package/dist/elements/FolderView/Cell/index.client.js +3 -1
- package/dist/elements/FolderView/Cell/index.client.js.map +1 -1
- package/dist/elements/FolderView/Cell/index.server.d.ts.map +1 -1
- package/dist/elements/FolderView/Cell/index.server.js +2 -1
- package/dist/elements/FolderView/Cell/index.server.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts +7 -0
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -0
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +164 -0
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -0
- package/dist/elements/ListHeader/TitleActions/index.d.ts +1 -0
- package/dist/elements/ListHeader/TitleActions/index.d.ts.map +1 -1
- package/dist/elements/ListHeader/TitleActions/index.js +1 -0
- package/dist/elements/ListHeader/TitleActions/index.js.map +1 -1
- package/dist/elements/ListHeaderTabs/ByFolderPill.d.ts +10 -0
- package/dist/elements/ListHeaderTabs/ByFolderPill.d.ts.map +1 -0
- package/dist/elements/ListHeaderTabs/ByFolderPill.js +70 -0
- package/dist/elements/ListHeaderTabs/ByFolderPill.js.map +1 -0
- package/dist/elements/ListHeaderTabs/DefaultListPill.d.ts +9 -0
- package/dist/elements/ListHeaderTabs/DefaultListPill.d.ts.map +1 -0
- package/dist/elements/ListHeaderTabs/DefaultListPill.js +68 -0
- package/dist/elements/ListHeaderTabs/DefaultListPill.js.map +1 -0
- package/dist/elements/ListHeaderTabs/TrashPill.d.ts +6 -0
- package/dist/elements/ListHeaderTabs/TrashPill.d.ts.map +1 -0
- package/dist/elements/ListHeaderTabs/TrashPill.js +53 -0
- package/dist/elements/ListHeaderTabs/TrashPill.js.map +1 -0
- package/dist/elements/{ListFolderPills → ListHeaderTabs}/index.scss +1 -2
- package/dist/elements/ListSelection/index.scss +1 -1
- package/dist/elements/PermanentlyDeleteButton/index.d.ts +14 -0
- package/dist/elements/PermanentlyDeleteButton/index.d.ts.map +1 -0
- package/dist/elements/PermanentlyDeleteButton/index.js +147 -0
- package/dist/elements/PermanentlyDeleteButton/index.js.map +1 -0
- package/dist/elements/RestoreButton/index.d.ts +15 -0
- package/dist/elements/RestoreButton/index.d.ts.map +1 -0
- package/dist/elements/RestoreButton/index.js +171 -0
- package/dist/elements/RestoreButton/index.js.map +1 -0
- package/dist/elements/RestoreButton/index.scss +25 -0
- package/dist/elements/RestoreMany/index.d.ts +9 -0
- package/dist/elements/RestoreMany/index.d.ts.map +1 -0
- package/dist/elements/RestoreMany/index.js +193 -0
- package/dist/elements/RestoreMany/index.js.map +1 -0
- package/dist/elements/RestoreMany/index.scss +25 -0
- package/dist/elements/Status/index.d.ts.map +1 -1
- package/dist/elements/Status/index.js +6 -4
- package/dist/elements/Status/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +10 -8
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/TrashBanner/index.d.ts +4 -0
- package/dist/elements/TrashBanner/index.d.ts.map +1 -0
- package/dist/elements/TrashBanner/index.js +37 -0
- package/dist/elements/TrashBanner/index.js.map +1 -0
- package/dist/elements/TrashBanner/index.scss +20 -0
- package/dist/exports/client/index.js +24 -22
- package/dist/exports/client/index.js.map +4 -4
- package/dist/fields/Checkbox/Input.d.ts.map +1 -1
- package/dist/fields/Checkbox/Input.js +2 -0
- package/dist/fields/Checkbox/Input.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts +1 -0
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +7 -0
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/index.d.ts +2 -1
- package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/index.js +2 -0
- package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts +2 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.js +2 -0
- package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +2 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.d.ts +1 -0
- package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
- package/dist/icons/Trash/index.d.ts +6 -0
- package/dist/icons/Trash/index.d.ts.map +1 -0
- package/dist/icons/Trash/index.js +22 -0
- package/dist/icons/Trash/index.js.map +1 -0
- package/dist/icons/Trash/index.scss +6 -0
- package/dist/providers/DocumentInfo/types.d.ts +2 -0
- package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/types.js.map +1 -1
- package/dist/providers/ServerFunctions/index.d.ts +1 -0
- package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.d.ts +2 -1
- package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.js +4 -2
- package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts +3 -2
- package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js +4 -2
- package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/buildFormState.d.ts.map +1 -1
- package/dist/utilities/buildFormState.js +2 -0
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/renderTable.d.ts +3 -2
- package/dist/utilities/renderTable.d.ts.map +1 -1
- package/dist/utilities/renderTable.js +4 -2
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/views/CollectionFolder/index.d.ts.map +1 -1
- package/dist/views/CollectionFolder/index.js +15 -5
- package/dist/views/CollectionFolder/index.js.map +1 -1
- package/dist/views/Edit/Auth/index.js +5 -4
- package/dist/views/Edit/Auth/index.js.map +1 -1
- package/dist/views/Edit/SetDocumentStepNav/index.d.ts +1 -0
- package/dist/views/Edit/SetDocumentStepNav/index.d.ts.map +1 -1
- package/dist/views/Edit/SetDocumentStepNav/index.js +26 -15
- package/dist/views/Edit/SetDocumentStepNav/index.js.map +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +11 -3
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/ListHeader/index.d.ts +4 -2
- package/dist/views/List/ListHeader/index.d.ts.map +1 -1
- package/dist/views/List/ListHeader/index.js +24 -9
- package/dist/views/List/ListHeader/index.js.map +1 -1
- package/dist/views/List/ListSelection/index.d.ts +2 -1
- package/dist/views/List/ListSelection/index.d.ts.map +1 -1
- package/dist/views/List/ListSelection/index.js +26 -17
- package/dist/views/List/ListSelection/index.js.map +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +28 -9
- package/dist/views/List/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/elements/ListFolderPills/index.d.ts +0 -10
- package/dist/elements/ListFolderPills/index.d.ts.map +0 -1
- package/dist/elements/ListFolderPills/index.js +0 -97
- package/dist/elements/ListFolderPills/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteDocument/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAMxD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteDocument/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAMxD,OAAO,KAA0C,MAAM,OAAO,CAAA;AAG9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAY9E,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAC1D,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,CAAA;IACzD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,aAAa,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;CACtE,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA0K1C,CAAA"}
|
|
@@ -5,8 +5,9 @@ import { useModal } from '@faceless-ui/modal';
|
|
|
5
5
|
import { getTranslation } from '@payloadcms/translations';
|
|
6
6
|
import { useRouter } from 'next/navigation.js';
|
|
7
7
|
import { formatAdminURL } from 'payload/shared';
|
|
8
|
-
import React, { useCallback } from 'react';
|
|
8
|
+
import React, { Fragment, useCallback, useState } from 'react';
|
|
9
9
|
import { toast } from 'sonner';
|
|
10
|
+
import { CheckboxInput } from '../../fields/Checkbox/Input.js';
|
|
10
11
|
import { useForm } from '../../forms/Form/context.js';
|
|
11
12
|
import { useConfig } from '../../providers/Config/index.js';
|
|
12
13
|
import { useDocumentTitle } from '../../providers/DocumentTitle/index.js';
|
|
@@ -17,6 +18,7 @@ import { ConfirmationModal } from '../ConfirmationModal/index.js';
|
|
|
17
18
|
import { PopupList } from '../Popup/index.js';
|
|
18
19
|
import { Translation } from '../Translation/index.js';
|
|
19
20
|
import './index.scss';
|
|
21
|
+
const baseClass = 'delete-document';
|
|
20
22
|
export const DeleteDocument = props => {
|
|
21
23
|
const {
|
|
22
24
|
id,
|
|
@@ -58,6 +60,7 @@ export const DeleteDocument = props => {
|
|
|
58
60
|
openModal
|
|
59
61
|
} = useModal();
|
|
60
62
|
const modalSlug = `delete-${id}`;
|
|
63
|
+
const [deletePermanently, setDeletePermanently] = useState(false);
|
|
61
64
|
const addDefaultError = useCallback(() => {
|
|
62
65
|
toast.error(t('error:deletingTitle', {
|
|
63
66
|
title
|
|
@@ -66,49 +69,52 @@ export const DeleteDocument = props => {
|
|
|
66
69
|
const handleDelete = useCallback(async () => {
|
|
67
70
|
setModified(false);
|
|
68
71
|
try {
|
|
69
|
-
await requests.delete(`${serverURL}${api}/${collectionSlug}/${id}`, {
|
|
72
|
+
const res = deletePermanently || !collectionConfig.trash ? await requests.delete(`${serverURL}${api}/${collectionSlug}/${id}`, {
|
|
70
73
|
headers: {
|
|
71
74
|
'Accept-Language': i18n.language,
|
|
72
75
|
'Content-Type': 'application/json'
|
|
73
76
|
}
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}) || json.message);
|
|
82
|
-
if (redirectAfterDelete) {
|
|
83
|
-
return startRouteTransition(() => router.push(formatAdminURL({
|
|
84
|
-
adminRoute,
|
|
85
|
-
path: `/collections/${collectionSlug}`
|
|
86
|
-
})));
|
|
87
|
-
}
|
|
88
|
-
if (typeof onDelete === 'function') {
|
|
89
|
-
await onDelete({
|
|
90
|
-
id,
|
|
91
|
-
collectionConfig
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
if (json.errors) {
|
|
97
|
-
json.errors.forEach(error => toast.error(error.message));
|
|
98
|
-
} else {
|
|
99
|
-
addDefaultError();
|
|
100
|
-
}
|
|
101
|
-
return false;
|
|
102
|
-
} catch (_err_0) {
|
|
103
|
-
return addDefaultError();
|
|
77
|
+
}) : await requests.patch(`${serverURL}${api}/${collectionSlug}/${id}`, {
|
|
78
|
+
body: JSON.stringify({
|
|
79
|
+
deletedAt: new Date().toISOString()
|
|
80
|
+
}),
|
|
81
|
+
headers: {
|
|
82
|
+
'Accept-Language': i18n.language,
|
|
83
|
+
'Content-Type': 'application/json'
|
|
104
84
|
}
|
|
105
85
|
});
|
|
86
|
+
const json = await res.json();
|
|
87
|
+
if (res.status < 400) {
|
|
88
|
+
toast.success(t(deletePermanently || !collectionConfig.trash ? 'general:titleDeleted' : 'general:titleTrashed', {
|
|
89
|
+
label: getTranslation(singularLabel, i18n),
|
|
90
|
+
title
|
|
91
|
+
}) || json.message);
|
|
92
|
+
if (redirectAfterDelete) {
|
|
93
|
+
return startRouteTransition(() => router.push(formatAdminURL({
|
|
94
|
+
adminRoute,
|
|
95
|
+
path: `/collections/${collectionSlug}`
|
|
96
|
+
})));
|
|
97
|
+
}
|
|
98
|
+
if (typeof onDelete === 'function') {
|
|
99
|
+
await onDelete({
|
|
100
|
+
id,
|
|
101
|
+
collectionConfig
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (json.errors) {
|
|
107
|
+
json.errors.forEach(error => toast.error(error.message));
|
|
108
|
+
} else {
|
|
109
|
+
addDefaultError();
|
|
110
|
+
}
|
|
111
|
+
return;
|
|
106
112
|
} catch (_err) {
|
|
107
113
|
return addDefaultError();
|
|
108
114
|
}
|
|
109
|
-
}, [setModified, serverURL, api, collectionSlug, id, t, singularLabel, addDefaultError, i18n, title, router, adminRoute, redirectAfterDelete, onDelete, collectionConfig, startRouteTransition]);
|
|
115
|
+
}, [deletePermanently, setModified, serverURL, api, collectionSlug, id, t, singularLabel, addDefaultError, i18n, title, router, adminRoute, redirectAfterDelete, onDelete, collectionConfig, startRouteTransition]);
|
|
110
116
|
if (id) {
|
|
111
|
-
return /*#__PURE__*/_jsxs(
|
|
117
|
+
return /*#__PURE__*/_jsxs(Fragment, {
|
|
112
118
|
children: [/*#__PURE__*/_jsx(PopupList.Button, {
|
|
113
119
|
id: buttonId,
|
|
114
120
|
onClick: () => {
|
|
@@ -116,21 +122,33 @@ export const DeleteDocument = props => {
|
|
|
116
122
|
},
|
|
117
123
|
children: t('general:delete')
|
|
118
124
|
}), /*#__PURE__*/_jsx(ConfirmationModal, {
|
|
119
|
-
body: /*#__PURE__*/
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
body: /*#__PURE__*/_jsxs(Fragment, {
|
|
126
|
+
children: [/*#__PURE__*/_jsx(Translation, {
|
|
127
|
+
elements: {
|
|
128
|
+
'1': ({
|
|
129
|
+
children
|
|
130
|
+
}) => /*#__PURE__*/_jsx("strong", {
|
|
131
|
+
children: children
|
|
132
|
+
})
|
|
133
|
+
},
|
|
134
|
+
i18nKey: collectionConfig.trash ? 'general:aboutToTrash' : 'general:aboutToDelete',
|
|
135
|
+
t: t,
|
|
136
|
+
variables: {
|
|
137
|
+
label: getTranslation(singularLabel, i18n),
|
|
138
|
+
title: titleFromProps || title || id
|
|
139
|
+
}
|
|
140
|
+
}), collectionConfig.trash && /*#__PURE__*/_jsx("div", {
|
|
141
|
+
className: `${baseClass}__checkbox`,
|
|
142
|
+
children: /*#__PURE__*/_jsx(CheckboxInput, {
|
|
143
|
+
checked: deletePermanently,
|
|
144
|
+
id: "delete-forever",
|
|
145
|
+
label: t('general:deletePermanently'),
|
|
146
|
+
name: "delete-forever",
|
|
147
|
+
onToggle: e => setDeletePermanently(e.target.checked)
|
|
125
148
|
})
|
|
126
|
-
}
|
|
127
|
-
i18nKey: "general:aboutToDelete",
|
|
128
|
-
t: t,
|
|
129
|
-
variables: {
|
|
130
|
-
label: getTranslation(singularLabel, i18n),
|
|
131
|
-
title: titleFromProps || title || id
|
|
132
|
-
}
|
|
149
|
+
})]
|
|
133
150
|
}),
|
|
151
|
+
className: baseClass,
|
|
134
152
|
confirmingLabel: t('general:deleting'),
|
|
135
153
|
heading: t('general:confirmDeletion'),
|
|
136
154
|
modalSlug: modalSlug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useModal","getTranslation","useRouter","formatAdminURL","React","useCallback","toast","useForm","useConfig","useDocumentTitle","useRouteTransition","useTranslation","requests","ConfirmationModal","PopupList","Translation","DeleteDocument","props","id","buttonId","collectionSlug","onDelete","redirectAfterDelete","singularLabel","title","titleFromProps","config","routes","admin","adminRoute","api","serverURL","getEntityConfig","collectionConfig","setModified","router","i18n","t","startRouteTransition","openModal","modalSlug","addDefaultError","error","handleDelete","delete","headers","language","then","res","json","status","success","label","message","push","path","errors","forEach","_err","_jsxs","Fragment","_jsx","Button","onClick","body","elements","1","children","i18nKey","variables","confirmingLabel","heading","onConfirm"],"sources":["../../../src/elements/DeleteDocument/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentTitle } from '../../providers/DocumentTitle/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { Translation } from '../Translation/index.js'\nimport './index.scss'\n\nexport type Props = {\n readonly buttonId?: string\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly id?: string\n readonly onDelete?: DocumentDrawerContextType['onDelete']\n readonly redirectAfterDelete?: boolean\n readonly singularLabel: SanitizedCollectionConfig['labels']['singular']\n readonly title?: string\n readonly useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n}\n\nexport const DeleteDocument: React.FC<Props> = (props) => {\n const {\n id,\n buttonId,\n collectionSlug,\n onDelete,\n redirectAfterDelete = true,\n singularLabel,\n title: titleFromProps,\n } = props\n\n const {\n config: {\n routes: { admin: adminRoute, api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const { setModified } = useForm()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const { title } = useDocumentTitle()\n const { startRouteTransition } = useRouteTransition()\n const { openModal } = useModal()\n\n const modalSlug = `delete-${id}`\n\n const addDefaultError = useCallback(() => {\n toast.error(t('error:deletingTitle', { title }))\n }, [t, title])\n\n const handleDelete = useCallback(async () => {\n setModified(false)\n\n try {\n await requests\n .delete(`${serverURL}${api}/${collectionSlug}/${id}`, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n .then(async (res) => {\n try {\n const json = await res.json()\n\n if (res.status < 400) {\n toast.success(\n t('general:titleDeleted', {\n label: getTranslation(singularLabel, i18n),\n title,\n }) || json.message,\n )\n\n if (redirectAfterDelete) {\n return startRouteTransition(() =>\n router.push(\n formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}`,\n }),\n ),\n )\n }\n\n if (typeof onDelete === 'function') {\n await onDelete({ id, collectionConfig })\n }\n\n return\n }\n\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n addDefaultError()\n }\n\n return false\n } catch (_err) {\n return addDefaultError()\n }\n })\n } catch (_err) {\n return addDefaultError()\n }\n }, [\n setModified,\n serverURL,\n api,\n collectionSlug,\n id,\n t,\n singularLabel,\n addDefaultError,\n i18n,\n title,\n router,\n adminRoute,\n redirectAfterDelete,\n onDelete,\n collectionConfig,\n startRouteTransition,\n ])\n\n if (id) {\n return (\n <React.Fragment>\n <PopupList.Button\n id={buttonId}\n onClick={() => {\n openModal(modalSlug)\n }}\n >\n {t('general:delete')}\n </PopupList.Button>\n <ConfirmationModal\n body={\n <Translation\n elements={{\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToDelete\"\n t={t}\n variables={{\n label: getTranslation(singularLabel, i18n),\n title: titleFromProps || title || id,\n }}\n />\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={modalSlug}\n onConfirm={handleDelete}\n />\n </React.Fragment>\n )\n }\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useModal","getTranslation","useRouter","formatAdminURL","React","Fragment","useCallback","useState","toast","CheckboxInput","useForm","useConfig","useDocumentTitle","useRouteTransition","useTranslation","requests","ConfirmationModal","PopupList","Translation","baseClass","DeleteDocument","props","id","buttonId","collectionSlug","onDelete","redirectAfterDelete","singularLabel","title","titleFromProps","config","routes","admin","adminRoute","api","serverURL","getEntityConfig","collectionConfig","setModified","router","i18n","t","startRouteTransition","openModal","modalSlug","deletePermanently","setDeletePermanently","addDefaultError","error","handleDelete","res","trash","delete","headers","language","patch","body","JSON","stringify","deletedAt","Date","toISOString","json","status","success","label","message","push","path","errors","forEach","_err","_jsxs","_jsx","Button","onClick","elements","1","children","i18nKey","variables","className","checked","name","onToggle","e","target","confirmingLabel","heading","onConfirm"],"sources":["../../../src/elements/DeleteDocument/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { Fragment, useCallback, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { CheckboxInput } from '../../fields/Checkbox/Input.js'\nimport { useForm } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentTitle } from '../../providers/DocumentTitle/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { Translation } from '../Translation/index.js'\nimport './index.scss'\n\nconst baseClass = 'delete-document'\n\nexport type Props = {\n readonly buttonId?: string\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly id?: string\n readonly onDelete?: DocumentDrawerContextType['onDelete']\n readonly redirectAfterDelete?: boolean\n readonly singularLabel: SanitizedCollectionConfig['labels']['singular']\n readonly title?: string\n readonly useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n}\n\nexport const DeleteDocument: React.FC<Props> = (props) => {\n const {\n id,\n buttonId,\n collectionSlug,\n onDelete,\n redirectAfterDelete = true,\n singularLabel,\n title: titleFromProps,\n } = props\n\n const {\n config: {\n routes: { admin: adminRoute, api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const { setModified } = useForm()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const { title } = useDocumentTitle()\n const { startRouteTransition } = useRouteTransition()\n const { openModal } = useModal()\n\n const modalSlug = `delete-${id}`\n\n const [deletePermanently, setDeletePermanently] = useState(false)\n\n const addDefaultError = useCallback(() => {\n toast.error(t('error:deletingTitle', { title }))\n }, [t, title])\n\n const handleDelete = useCallback(async () => {\n setModified(false)\n\n try {\n const res =\n deletePermanently || !collectionConfig.trash\n ? await requests.delete(`${serverURL}${api}/${collectionSlug}/${id}`, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n : await requests.patch(`${serverURL}${api}/${collectionSlug}/${id}`, {\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 const json = await res.json()\n\n if (res.status < 400) {\n toast.success(\n t(\n deletePermanently || !collectionConfig.trash\n ? 'general:titleDeleted'\n : 'general:titleTrashed',\n {\n label: getTranslation(singularLabel, i18n),\n title,\n },\n ) || json.message,\n )\n\n if (redirectAfterDelete) {\n return startRouteTransition(() =>\n router.push(\n formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}`,\n }),\n ),\n )\n }\n\n if (typeof onDelete === 'function') {\n await onDelete({ id, collectionConfig })\n }\n\n return\n }\n\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n addDefaultError()\n }\n\n return\n } catch (_err) {\n return addDefaultError()\n }\n }, [\n deletePermanently,\n setModified,\n serverURL,\n api,\n collectionSlug,\n id,\n t,\n singularLabel,\n addDefaultError,\n i18n,\n title,\n router,\n adminRoute,\n redirectAfterDelete,\n onDelete,\n collectionConfig,\n startRouteTransition,\n ])\n\n if (id) {\n return (\n <Fragment>\n <PopupList.Button\n id={buttonId}\n onClick={() => {\n openModal(modalSlug)\n }}\n >\n {t('general:delete')}\n </PopupList.Button>\n <ConfirmationModal\n body={\n <Fragment>\n <Translation\n elements={{\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey={collectionConfig.trash ? 'general:aboutToTrash' : 'general:aboutToDelete'}\n t={t}\n variables={{\n label: getTranslation(singularLabel, i18n),\n title: titleFromProps || title || id,\n }}\n />\n {collectionConfig.trash && (\n <div className={`${baseClass}__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 </Fragment>\n }\n className={baseClass}\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={modalSlug}\n onConfirm={handleDelete}\n />\n </Fragment>\n )\n }\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { ClientCollectionConfig, Where } from 'payload';
|
|
1
|
+
import type { ClientCollectionConfig, ViewTypes, Where } from 'payload';
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import './index.scss';
|
|
3
4
|
export type Props = {
|
|
4
5
|
collection: ClientCollectionConfig;
|
|
5
6
|
/**
|
|
@@ -10,6 +11,7 @@ export type Props = {
|
|
|
10
11
|
* When multiple PublishMany components are rendered on the page, this will differentiate them.
|
|
11
12
|
*/
|
|
12
13
|
title?: string;
|
|
14
|
+
viewType?: ViewTypes;
|
|
13
15
|
};
|
|
14
16
|
export declare const DeleteMany: React.FC<Props>;
|
|
15
17
|
type AfterDeleteResult = {
|
|
@@ -49,6 +51,8 @@ type DeleteMany_v4Props = {
|
|
|
49
51
|
totalCount?: number;
|
|
50
52
|
};
|
|
51
53
|
};
|
|
54
|
+
trash?: boolean;
|
|
55
|
+
viewType?: ViewTypes;
|
|
52
56
|
/**
|
|
53
57
|
* Optionally pass a where clause to filter the documents to be deleted.
|
|
54
58
|
* This will be ignored if multiple relations are selected.
|
|
@@ -63,6 +67,6 @@ type DeleteMany_v4Props = {
|
|
|
63
67
|
*
|
|
64
68
|
* If you are deleting monomorphic documents, shape your `selections` to match the polymorphic structure.
|
|
65
69
|
*/
|
|
66
|
-
export declare function DeleteMany_v4({ afterDelete, modalPrefix, search, selections, where, }: DeleteMany_v4Props): React.JSX.Element;
|
|
70
|
+
export declare function DeleteMany_v4({ afterDelete, modalPrefix, search, selections, trash, viewType, where, }: DeleteMany_v4Props): React.JSX.Element;
|
|
67
71
|
export {};
|
|
68
72
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteMany/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteMany/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAOvE,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB,OAAO,cAAc,CAAA;AAErB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,EAAE,sBAAsB,CAAA;IAClC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkEtC,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,CAAC,UAAU,EAAE,MAAM,GAAG;QACpB,YAAY,EAAE,MAAM,CAAA;QACpB,MAAM,EAAE,OAAO,EAAE,CAAA;QACjB,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;QACxB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF,CAAA;AACD,KAAK,kBAAkB,GAAG;IACxB;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACjD;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,UAAU,EAAE;QACV,CAAC,UAAU,EAAE,MAAM,GAAG;YACpB,GAAG,CAAC,EAAE,OAAO,CAAA;YACb,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;YACzB,UAAU,CAAC,EAAE,MAAM,CAAA;SACpB,CAAA;KACF,CAAA;IACD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,WAAW,EACX,WAAW,EACX,MAAM,EACN,UAAU,EACV,KAAK,EACL,QAAQ,EACR,KAAK,GACN,EAAE,kBAAkB,qBAsQpB"}
|
|
@@ -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(
|
|
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] !==
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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:
|
|
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
|
-
|
|
119
|
+
trash,
|
|
120
|
+
viewType,
|
|
121
|
+
where: finalWhere
|
|
105
122
|
})
|
|
106
123
|
});
|
|
107
|
-
$[
|
|
108
|
-
$[
|
|
109
|
-
$[
|
|
110
|
-
$[
|
|
111
|
-
$[
|
|
112
|
-
$[
|
|
113
|
-
$[
|
|
114
|
-
$[
|
|
115
|
-
$[
|
|
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
|
-
|
|
138
|
+
t3 = $[17];
|
|
118
139
|
}
|
|
119
|
-
return
|
|
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 =
|
|
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
|
-
|
|
182
|
-
|
|
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
|
|
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
|
-
|
|
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:
|
|
286
|
-
|
|
287
|
-
|
|
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'),
|