|
@@ -5,9 +5,10 @@ import {
|
|
|
import { useTranslation } from 'react-i18next';
|
|
import { useTranslation } from 'react-i18next';
|
|
|
|
|
|
|
|
import { apiPost } from '~/client/util/apiv1-client';
|
|
import { apiPost } from '~/client/util/apiv1-client';
|
|
|
-import { usePageDeleteModal, usePageDeleteModalOpened } from '~/stores/ui';
|
|
|
|
|
|
|
+import { apiv3Post } from '~/client/util/apiv3-client';
|
|
|
|
|
+import { usePageDeleteModalStatus, usePageDeleteModalOpened } from '~/stores/ui';
|
|
|
|
|
|
|
|
-import { IPageApiv1Result } from '~/interfaces/page';
|
|
|
|
|
|
|
+import { IPageApiv1Result, IDeleteManyPageApiv3Result } from '~/interfaces/page';
|
|
|
|
|
|
|
|
import ApiErrorMessageList from './PageManagement/ApiErrorMessageList';
|
|
import ApiErrorMessageList from './PageManagement/ApiErrorMessageList';
|
|
|
|
|
|
|
@@ -37,7 +38,7 @@ const PageDeleteModal: FC<Props> = (props: Props) => {
|
|
|
isDeleteCompletelyModal, isAbleToDeleteCompletely,
|
|
isDeleteCompletelyModal, isAbleToDeleteCompletely,
|
|
|
} = props;
|
|
} = props;
|
|
|
|
|
|
|
|
- const { data: pagesDataToDelete, close: closeDeleteModal } = usePageDeleteModal();
|
|
|
|
|
|
|
+ const { data: deleteModalStatus, close: closeDeleteModal } = usePageDeleteModalStatus();
|
|
|
const { data: pageDeleteModalOpened } = usePageDeleteModalOpened();
|
|
const { data: pageDeleteModalOpened } = usePageDeleteModalOpened();
|
|
|
|
|
|
|
|
const isOpened = pageDeleteModalOpened?.isOpend != null ? pageDeleteModalOpened.isOpend : false;
|
|
const isOpened = pageDeleteModalOpened?.isOpend != null ? pageDeleteModalOpened.isOpend : false;
|
|
@@ -47,7 +48,7 @@ const PageDeleteModal: FC<Props> = (props: Props) => {
|
|
|
const deleteMode = isDeleteCompletely ? 'completely' : 'temporary';
|
|
const deleteMode = isDeleteCompletely ? 'completely' : 'temporary';
|
|
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
|
- const [errs, setErrs] = useState(null);
|
|
|
|
|
|
|
+ const [errs, setErrs] = useState<Error[] | null>(null);
|
|
|
|
|
|
|
|
function changeIsDeleteRecursivelyHandler() {
|
|
function changeIsDeleteRecursivelyHandler() {
|
|
|
setIsDeleteRecursively(!isDeleteRecursively);
|
|
setIsDeleteRecursively(!isDeleteRecursively);
|
|
@@ -61,30 +62,58 @@ const PageDeleteModal: FC<Props> = (props: Props) => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async function deletePage() {
|
|
async function deletePage() {
|
|
|
- // toastr.warning(t('search_result.currently_not_implemented'));
|
|
|
|
|
- // Todo implement page delete function at https://redmine.weseek.co.jp/issues/82222
|
|
|
|
|
- // setErrs(null);
|
|
|
|
|
|
|
+ if (deleteModalStatus == null || deleteModalStatus.pages == null) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if (pagesDataToDelete?.pages != null && (pagesDataToDelete.pages.length > 0)) {
|
|
|
|
|
|
|
+ /*
|
|
|
|
|
+ * When multiple pages
|
|
|
|
|
+ */
|
|
|
|
|
+ if (deleteModalStatus.pages.length > 1) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const isRecursively = isDeleteRecursively === true ? true : undefined;
|
|
|
|
|
+ const isCompletely = isDeleteCompletely === true ? true : undefined;
|
|
|
|
|
+
|
|
|
|
|
+ const pageIdToRevisionIdMap = {};
|
|
|
|
|
+ deleteModalStatus.pages.forEach((p) => { pageIdToRevisionIdMap[p.pageId] = p.revisionId });
|
|
|
|
|
+
|
|
|
|
|
+ const { data } = await apiv3Post<IDeleteManyPageApiv3Result>('/pages/delete', {
|
|
|
|
|
+ pageIdToRevisionIdMap,
|
|
|
|
|
+ isRecursively,
|
|
|
|
|
+ isCompletely,
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ if (pageDeleteModalOpened != null && pageDeleteModalOpened.onDeleted != null) {
|
|
|
|
|
+ pageDeleteModalOpened.onDeleted(data.paths, data.isRecursively);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (err) {
|
|
|
|
|
+ setErrs([err]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ /*
|
|
|
|
|
+ * When single page
|
|
|
|
|
+ */
|
|
|
|
|
+ else {
|
|
|
try {
|
|
try {
|
|
|
const recursively = isDeleteRecursively === true ? true : undefined;
|
|
const recursively = isDeleteRecursively === true ? true : undefined;
|
|
|
const completely = isDeleteCompletely === true ? true : undefined;
|
|
const completely = isDeleteCompletely === true ? true : undefined;
|
|
|
|
|
|
|
|
- // TODO: Create an endpoint (pages.removeMany)
|
|
|
|
|
- const result = await apiPost('/pages.removeMany', {
|
|
|
|
|
- pages: pagesDataToDelete.pages,
|
|
|
|
|
|
|
+ const page = deleteModalStatus.pages[0];
|
|
|
|
|
+
|
|
|
|
|
+ const { path, isRecursively } = await apiPost('/pages.remove', {
|
|
|
|
|
+ page_id: page.pageId,
|
|
|
|
|
+ revision_id: page.revisionId,
|
|
|
recursively,
|
|
recursively,
|
|
|
completely,
|
|
completely,
|
|
|
}) as IPageApiv1Result;
|
|
}) as IPageApiv1Result;
|
|
|
|
|
|
|
|
- const redirectPagePath = result.page.path;
|
|
|
|
|
-
|
|
|
|
|
- if (pageDeleteModalOpened?.onDeleted) {
|
|
|
|
|
- pageDeleteModalOpened.onDeleted(redirectPagePath);
|
|
|
|
|
|
|
+ if (pageDeleteModalOpened != null && pageDeleteModalOpened.onDeleted != null) {
|
|
|
|
|
+ pageDeleteModalOpened.onDeleted(path, isRecursively);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
catch (err) {
|
|
catch (err) {
|
|
|
- setErrs(err);
|
|
|
|
|
|
|
+ setErrs([err]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -147,8 +176,8 @@ const PageDeleteModal: FC<Props> = (props: Props) => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const renderPagePathsToDelete = () => {
|
|
const renderPagePathsToDelete = () => {
|
|
|
- if (pagesDataToDelete != null && pagesDataToDelete.pages != null) {
|
|
|
|
|
- return pagesDataToDelete.pages.map(page => <div key={page.pageId}><code>{ page.path }</code></div>);
|
|
|
|
|
|
|
+ if (deleteModalStatus != null && deleteModalStatus.pages != null) {
|
|
|
|
|
+ return deleteModalStatus.pages.map(page => <div key={page.pageId}><code>{ page.path }</code></div>);
|
|
|
}
|
|
}
|
|
|
return <></>;
|
|
return <></>;
|
|
|
};
|
|
};
|