|
@@ -1,5 +1,5 @@
|
|
|
import React, {
|
|
import React, {
|
|
|
- useState, FC, useMemo, useCallback,
|
|
|
|
|
|
|
+ useState, FC, useMemo,
|
|
|
} from 'react';
|
|
} from 'react';
|
|
|
|
|
|
|
|
import { useTranslation } from 'react-i18next';
|
|
import { useTranslation } from 'react-i18next';
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
} from 'reactstrap';
|
|
} from 'reactstrap';
|
|
|
|
|
|
|
|
import { apiPost } from '~/client/util/apiv1-client';
|
|
import { apiPost } from '~/client/util/apiv1-client';
|
|
|
-import { apiv3Delete, apiv3Post } from '~/client/util/apiv3-client';
|
|
|
|
|
|
|
+import { apiv3Post } from '~/client/util/apiv3-client';
|
|
|
import { HasObjectId } from '~/interfaces/has-object-id';
|
|
import { HasObjectId } from '~/interfaces/has-object-id';
|
|
|
import {
|
|
import {
|
|
|
IDeleteSinglePageApiv1Result, IDeleteManyPageApiv3Result, IPageToDeleteWithMeta, IDataWithMeta, isIPageInfoForEntity, IPageInfoForEntity,
|
|
IDeleteSinglePageApiv1Result, IDeleteManyPageApiv3Result, IPageToDeleteWithMeta, IDataWithMeta, isIPageInfoForEntity, IPageInfoForEntity,
|
|
@@ -45,7 +45,6 @@ const PageDeleteModal: FC = () => {
|
|
|
const { data: deleteModalData, close: closeDeleteModal } = usePageDeleteModal();
|
|
const { data: deleteModalData, close: closeDeleteModal } = usePageDeleteModal();
|
|
|
|
|
|
|
|
const isOpened = deleteModalData?.isOpened ?? false;
|
|
const isOpened = deleteModalData?.isOpened ?? false;
|
|
|
- const emptyTrash = deleteModalData?.opts?.emptyTrash ?? false;
|
|
|
|
|
|
|
|
|
|
const notOperatablePages: IPageToDeleteWithMeta[] = (deleteModalData?.pages ?? [])
|
|
const notOperatablePages: IPageToDeleteWithMeta[] = (deleteModalData?.pages ?? [])
|
|
|
.filter(p => !isIPageInfoForEntity(p.meta));
|
|
.filter(p => !isIPageInfoForEntity(p.meta));
|
|
@@ -105,33 +104,27 @@ const PageDeleteModal: FC = () => {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
/*
|
|
/*
|
|
|
* When multiple pages
|
|
* When multiple pages
|
|
|
*/
|
|
*/
|
|
|
if (deleteModalData.pages.length > 1) {
|
|
if (deleteModalData.pages.length > 1) {
|
|
|
try {
|
|
try {
|
|
|
- const onDeleted = deleteModalData.opts?.onDeleted;
|
|
|
|
|
|
|
+ const isRecursively = isDeleteRecursively === true ? true : undefined;
|
|
|
|
|
+ const isCompletely = isDeleteCompletely === true ? true : undefined;
|
|
|
|
|
|
|
|
- if (emptyTrash) {
|
|
|
|
|
- await apiv3Delete('/pages/empty-trash');
|
|
|
|
|
- if (onDeleted != null) {
|
|
|
|
|
- onDeleted('', null, null);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
- const isRecursively = isDeleteRecursively === true ? true : undefined;
|
|
|
|
|
- const isCompletely = isDeleteCompletely === true ? true : undefined;
|
|
|
|
|
- const pageIdToRevisionIdMap = {};
|
|
|
|
|
- deleteModalData.pages.forEach((p) => { pageIdToRevisionIdMap[p.data._id] = p.data.revision as string });
|
|
|
|
|
- const { data } = await apiv3Post<IDeleteManyPageApiv3Result>('/pages/delete', {
|
|
|
|
|
- pageIdToRevisionIdMap,
|
|
|
|
|
- isRecursively,
|
|
|
|
|
- isCompletely,
|
|
|
|
|
- });
|
|
|
|
|
- const onDeleted = deleteModalData.opts?.onDeleted;
|
|
|
|
|
- if (onDeleted != null) {
|
|
|
|
|
- onDeleted(data.paths, data.isRecursively, data.isCompletely);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ const pageIdToRevisionIdMap = {};
|
|
|
|
|
+ deleteModalData.pages.forEach((p) => { pageIdToRevisionIdMap[p.data._id] = p.data.revision as string });
|
|
|
|
|
+
|
|
|
|
|
+ const { data } = await apiv3Post<IDeleteManyPageApiv3Result>('/pages/delete', {
|
|
|
|
|
+ pageIdToRevisionIdMap,
|
|
|
|
|
+ isRecursively,
|
|
|
|
|
+ isCompletely,
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ const onDeleted = deleteModalData.opts?.onDeleted;
|
|
|
|
|
+ if (onDeleted != null) {
|
|
|
|
|
+ onDeleted(data.paths, data.isRecursively, data.isCompletely);
|
|
|
}
|
|
}
|
|
|
closeDeleteModal();
|
|
closeDeleteModal();
|
|
|
}
|
|
}
|
|
@@ -218,10 +211,6 @@ const PageDeleteModal: FC = () => {
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const renderCompletelyDeleteAlert = useMemo(() => {
|
|
|
|
|
- return <p className="form-text mt-0">{t('modal_delete.empty_trash_alert')}</p>;
|
|
|
|
|
- }, [t]);
|
|
|
|
|
-
|
|
|
|
|
const renderPagePathsToDelete = () => {
|
|
const renderPagePathsToDelete = () => {
|
|
|
const pages = injectedPages != null && injectedPages.length > 0 ? injectedPages : deleteModalData?.pages;
|
|
const pages = injectedPages != null && injectedPages.length > 0 ? injectedPages : deleteModalData?.pages;
|
|
|
|
|
|
|
@@ -236,28 +225,11 @@ const PageDeleteModal: FC = () => {
|
|
|
return <></>;
|
|
return <></>;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- const renderDeleteModalOptions = useCallback(() => {
|
|
|
|
|
- if (emptyTrash) {
|
|
|
|
|
- return renderCompletelyDeleteAlert;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (!isDeletable) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return (
|
|
|
|
|
- <>
|
|
|
|
|
- {renderDeleteRecursivelyForm()}
|
|
|
|
|
- {!forceDeleteCompletelyMode && renderDeleteCompletelyForm()}
|
|
|
|
|
- </>
|
|
|
|
|
- );
|
|
|
|
|
- }, [t, deleteModalData, isDeleteCompletely, isDeleteRecursively]);
|
|
|
|
|
-
|
|
|
|
|
return (
|
|
return (
|
|
|
<Modal size="lg" isOpen={isOpened} toggle={closeDeleteModal} data-testid="page-delete-modal" className="grw-create-page">
|
|
<Modal size="lg" isOpen={isOpened} toggle={closeDeleteModal} data-testid="page-delete-modal" className="grw-create-page">
|
|
|
<ModalHeader tag="h4" toggle={closeDeleteModal} className={`bg-${deleteIconAndKey[deleteMode].color} text-light`}>
|
|
<ModalHeader tag="h4" toggle={closeDeleteModal} className={`bg-${deleteIconAndKey[deleteMode].color} text-light`}>
|
|
|
<i className={`icon-fw icon-${deleteIconAndKey[deleteMode].icon}`}></i>
|
|
<i className={`icon-fw icon-${deleteIconAndKey[deleteMode].icon}`}></i>
|
|
|
- { emptyTrash ? t('modal_delete.empty_trash') : t(`modal_delete.delete_${deleteIconAndKey[deleteMode].translationKey}`) }
|
|
|
|
|
|
|
+ { t(`modal_delete.delete_${deleteIconAndKey[deleteMode].translationKey}`) }
|
|
|
</ModalHeader>
|
|
</ModalHeader>
|
|
|
<ModalBody>
|
|
<ModalBody>
|
|
|
<div className="form-group grw-scrollable-modal-body pb-1">
|
|
<div className="form-group grw-scrollable-modal-body pb-1">
|
|
@@ -265,7 +237,8 @@ const PageDeleteModal: FC = () => {
|
|
|
{/* Todo: change the way to show path on modal when too many pages are selected */}
|
|
{/* Todo: change the way to show path on modal when too many pages are selected */}
|
|
|
{renderPagePathsToDelete()}
|
|
{renderPagePathsToDelete()}
|
|
|
</div>
|
|
</div>
|
|
|
- {renderDeleteModalOptions()}
|
|
|
|
|
|
|
+ { isDeletable && renderDeleteRecursivelyForm()}
|
|
|
|
|
+ { isDeletable && !forceDeleteCompletelyMode && renderDeleteCompletelyForm() }
|
|
|
</ModalBody>
|
|
</ModalBody>
|
|
|
<ModalFooter>
|
|
<ModalFooter>
|
|
|
<ApiErrorMessageList errs={errs} />
|
|
<ApiErrorMessageList errs={errs} />
|
|
@@ -276,7 +249,7 @@ const PageDeleteModal: FC = () => {
|
|
|
onClick={deleteButtonHandler}
|
|
onClick={deleteButtonHandler}
|
|
|
>
|
|
>
|
|
|
<i className={`mr-1 icon-${deleteIconAndKey[deleteMode].icon}`} aria-hidden="true"></i>
|
|
<i className={`mr-1 icon-${deleteIconAndKey[deleteMode].icon}`} aria-hidden="true"></i>
|
|
|
- { emptyTrash ? t('modal_delete.empty_trash_button') : t(`modal_delete.delete_${deleteIconAndKey[deleteMode].translationKey}`) }
|
|
|
|
|
|
|
+ { t(`modal_delete.delete_${deleteIconAndKey[deleteMode].translationKey}`) }
|
|
|
</button>
|
|
</button>
|
|
|
</ModalFooter>
|
|
</ModalFooter>
|
|
|
</Modal>
|
|
</Modal>
|