|
|
@@ -6,7 +6,7 @@ import Item from './Item';
|
|
|
import { useSWRxPageAncestorsChildren, useSWRxRootPage } from '../../../stores/page-listing';
|
|
|
import { TargetAndAncestors } from '~/interfaces/page-listing-results';
|
|
|
import { toastError } from '~/client/util/apiNotification';
|
|
|
-
|
|
|
+import PageDeleteModal, { IPageForPageDeleteModal } from '~/components/PageDeleteModal';
|
|
|
|
|
|
/*
|
|
|
* Utility to generate initial node
|
|
|
@@ -46,12 +46,23 @@ type ItemsTreeProps = {
|
|
|
targetPath: string
|
|
|
targetId?: string
|
|
|
targetAndAncestorsData?: TargetAndAncestors
|
|
|
+
|
|
|
+ // for deleteModal
|
|
|
+ isDeleteModalOpen: boolean
|
|
|
+ pagesToDelete: IPageForPageDeleteModal[]
|
|
|
+ isAbleToDeleteCompletely: boolean
|
|
|
+ isDeleteCompletelyModal: boolean
|
|
|
+ onCloseDelete(): void
|
|
|
+ onClickDeleteByPage(page: IPageForPageDeleteModal): void
|
|
|
}
|
|
|
|
|
|
-const renderByInitialNode = (initialNode: ItemNode, targetId?: string): JSX.Element => {
|
|
|
+const renderByInitialNode = (
|
|
|
+ initialNode: ItemNode, DeleteModal: JSX.Element, targetId?: string, onClickDeleteByPage?: (page: IPageForPageDeleteModal) => void,
|
|
|
+): JSX.Element => {
|
|
|
return (
|
|
|
<div className="grw-pagetree p-3">
|
|
|
- <Item key={initialNode.page.path} targetId={targetId} itemNode={initialNode} isOpen />
|
|
|
+ <Item key={initialNode.page.path} targetId={targetId} itemNode={initialNode} isOpen onClickDeleteByPage={onClickDeleteByPage} />
|
|
|
+ {DeleteModal}
|
|
|
</div>
|
|
|
);
|
|
|
};
|
|
|
@@ -61,11 +72,24 @@ const renderByInitialNode = (initialNode: ItemNode, targetId?: string): JSX.Elem
|
|
|
* ItemsTree
|
|
|
*/
|
|
|
const ItemsTree: FC<ItemsTreeProps> = (props: ItemsTreeProps) => {
|
|
|
- const { targetPath, targetId, targetAndAncestorsData } = props;
|
|
|
+ const {
|
|
|
+ targetPath, targetId, targetAndAncestorsData, isDeleteModalOpen, pagesToDelete, isAbleToDeleteCompletely, isDeleteCompletelyModal, onCloseDelete,
|
|
|
+ onClickDeleteByPage,
|
|
|
+ } = props;
|
|
|
|
|
|
const { data: ancestorsChildrenData, error: error1 } = useSWRxPageAncestorsChildren(targetPath);
|
|
|
const { data: rootPageData, error: error2 } = useSWRxRootPage();
|
|
|
|
|
|
+ const DeleteModal = (
|
|
|
+ <PageDeleteModal
|
|
|
+ isOpen={isDeleteModalOpen}
|
|
|
+ pages={pagesToDelete}
|
|
|
+ isAbleToDeleteCompletely={isAbleToDeleteCompletely}
|
|
|
+ isDeleteCompletelyModal={isDeleteCompletelyModal}
|
|
|
+ onClose={onCloseDelete}
|
|
|
+ />
|
|
|
+ );
|
|
|
+
|
|
|
if (error1 != null || error2 != null) {
|
|
|
// TODO: improve message
|
|
|
toastError('Error occurred while fetching pages to render PageTree');
|
|
|
@@ -77,7 +101,7 @@ const ItemsTree: FC<ItemsTreeProps> = (props: ItemsTreeProps) => {
|
|
|
*/
|
|
|
if (ancestorsChildrenData != null && rootPageData != null) {
|
|
|
const initialNode = generateInitialNodeAfterResponse(ancestorsChildrenData.ancestorsChildren, new ItemNode(rootPageData.rootPage));
|
|
|
- return renderByInitialNode(initialNode, targetId);
|
|
|
+ return renderByInitialNode(initialNode, DeleteModal, targetId, onClickDeleteByPage);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -85,7 +109,7 @@ const ItemsTree: FC<ItemsTreeProps> = (props: ItemsTreeProps) => {
|
|
|
*/
|
|
|
if (targetAndAncestorsData != null) {
|
|
|
const initialNode = generateInitialNodeBeforeResponse(targetAndAncestorsData.targetAndAncestors);
|
|
|
- return renderByInitialNode(initialNode, targetId);
|
|
|
+ return renderByInitialNode(initialNode, DeleteModal, targetId, onClickDeleteByPage);
|
|
|
}
|
|
|
|
|
|
return null;
|