diff --git a/packages/next/src/views/Edit/Default/index.tsx b/packages/next/src/views/Edit/Default/index.tsx index 41319b89c..1feb2bfc8 100644 --- a/packages/next/src/views/Edit/Default/index.tsx +++ b/packages/next/src/views/Edit/Default/index.tsx @@ -43,6 +43,7 @@ export const DefaultEditView: React.FC = () => { BeforeFields, collectionSlug, disableActions, + disableCreate, disableLeaveWithoutSaving, docPermissions, getDocPreferences, @@ -54,7 +55,12 @@ export const DefaultEditView: React.FC = () => { initialState, isEditing, isInitializing, + onDelete, + onDrawerCreate, + onDuplicate, onSave: onSaveFromContext, + redirectAfterDelete, + redirectAfterDuplicate, } = useDocumentInfo() const { refreshCookieAsync, user } = useAuth() @@ -223,11 +229,18 @@ export const DefaultEditView: React.FC = () => { apiURL={apiURL} data={data} disableActions={disableActions} + disableCreate={disableCreate} hasPublishPermission={hasPublishPermission} hasSavePermission={hasSavePermission} id={id} isEditing={isEditing} + onDelete={onDelete} + onDrawerCreate={onDrawerCreate} + onDuplicate={onDuplicate} + onSave={onSave} permissions={docPermissions} + redirectAfterDelete={redirectAfterDelete} + redirectAfterDuplicate={redirectAfterDuplicate} slug={collectionConfig?.slug || globalConfig?.slug} /> = (props) => { - const { id, buttonId, collectionSlug, singularLabel, title: titleFromProps } = props + const { + id, + buttonId, + collectionSlug, + onDelete, + redirectAfterDelete = true, + singularLabel, + title: titleFromProps, + } = props const { config: { routes: { admin: adminRoute, api }, serverURL, }, + getEntityConfig, } = useConfig() + const collectionConfig = getEntityConfig({ collectionSlug }) as ClientCollectionConfig + const { setModified } = useForm() const [deleting, setDeleting] = useState(false) - const { toggleModal } = useModal() + const { closeModal, toggleModal } = useModal() const router = useRouter() const { i18n, t } = useTranslation() const { title } = useDocumentInfo() + const editDepth = useEditDepth() const titleToRender = titleFromProps || title || id @@ -55,9 +73,16 @@ export const DeleteDocument: React.FC = (props) => { toast.error(t('error:deletingTitle', { title })) }, [t, title]) + useEffect(() => { + return () => { + closeModal(modalSlug) + } + }, [closeModal, modalSlug]) + const handleDelete = useCallback(async () => { setDeleting(true) setModified(false) + try { await requests .delete(`${serverURL}${api}/${collectionSlug}/${id}`, { @@ -73,19 +98,32 @@ export const DeleteDocument: React.FC = (props) => { if (res.status < 400) { setDeleting(false) toggleModal(modalSlug) + toast.success( t('general:titleDeleted', { label: getTranslation(singularLabel, i18n), title }) || json.message, ) - return router.push( - formatAdminURL({ - adminRoute, - path: `/collections/${collectionSlug}`, - }), - ) + if (redirectAfterDelete) { + return router.push( + formatAdminURL({ + adminRoute, + path: `/collections/${collectionSlug}`, + }), + ) + } + + if (typeof onDelete === 'function') { + await onDelete({ id, collectionConfig }) + } + + toggleModal(modalSlug) + + return } + toggleModal(modalSlug) + if (json.errors) { json.errors.forEach((error) => toast.error(error.message)) } else { @@ -114,6 +152,9 @@ export const DeleteDocument: React.FC = (props) => { router, adminRoute, addDefaultError, + redirectAfterDelete, + onDelete, + collectionConfig, ]) if (id) { @@ -128,7 +169,13 @@ export const DeleteDocument: React.FC = (props) => { > {t('general:delete')} - +

{t('general:confirmDeletion')}

@@ -158,7 +205,11 @@ export const DeleteDocument: React.FC = (props) => {