kosei-n 1 год назад
Родитель
Сommit
98ff59f792

+ 1 - 0
apps/app/src/components/ItemsTree/ItemsTree.tsx

@@ -97,6 +97,7 @@ type ItemsTreeProps = {
   targetAndAncestorsData?: TargetAndAncestors
   CustomTreeItem: React.FunctionComponent<TreeItemProps>
   onClickTreeItem?: (page: IPageForItem) => void;
+  markTarget: (children: ItemNode[], targetPathOrId?: Nullable<string>) => void;
 }
 
 /*

+ 18 - 0
apps/app/src/components/PageSelectModal/PageSelectModal.tsx

@@ -3,6 +3,7 @@ import { Suspense, useState, useCallback } from 'react';
 
 import nodePath from 'path';
 
+import type { Nullable } from '@growi/core';
 import { useTranslation } from 'next-i18next';
 import {
   Modal, ModalHeader, ModalBody, ModalFooter, Button,
@@ -16,6 +17,7 @@ import { useCurrentPagePath, useCurrentPageId, useSWRxCurrentPage } from '~/stor
 import { ItemsTree } from '../ItemsTree';
 import ItemsTreeContentSkeleton from '../ItemsTree/ItemsTreeContentSkeleton';
 import { usePagePathRenameHandler } from '../PageEditor/page-path-rename-utils';
+import type { ItemNode } from '../TreeItem';
 
 import { TreeItemForModal } from './TreeItemForModal';
 
@@ -75,6 +77,22 @@ export const PageSelectModal: FC = () => {
     return null;
   }
 
+  const markTarget = (children: ItemNode[], targetPathOrId?: Nullable<string>): void => {
+    if (targetPathOrId == null) {
+      return;
+    }
+
+    children.forEach((node) => {
+      if (node.page._id === targetPathOrId || node.page.path === targetPathOrId) {
+        node.page.isTarget = true;
+      }
+      else {
+        node.page.isTarget = false;
+      }
+      return node;
+    });
+  };
+
   return (
     <Modal
       isOpen={isOpened}

+ 4 - 0
apps/app/src/components/PageSelectModal/TreeItemForModal.tsx

@@ -1,5 +1,8 @@
 import type { FC } from 'react';
 
+import type { Nullable } from '@growi/core';
+
+import type { ItemNode } from '../TreeItem';
 import {
   SimpleItem, useNewPageInput, type TreeItemProps,
 } from '../TreeItem';
@@ -30,6 +33,7 @@ export const TreeItemForModal: FC<PageTreeItemProps> = (props) => {
       itemClass={TreeItemForModal}
       customEndComponents={[NewPageCreateButton]}
       onClick={onClick}
+      markTarget={markTarget}
     />
   );
 };

+ 3 - 1
apps/app/src/components/Sidebar/PageTreeItem/PageTreeItem.tsx

@@ -5,7 +5,7 @@ import React, {
 
 import nodePath from 'path';
 
-import type { IPageHasId } from '@growi/core';
+import type { IPageHasId, Nullable } from '@growi/core';
 import { pagePathUtils, pathUtils } from '@growi/core/dist/utils';
 import { useTranslation } from 'next-i18next';
 import { useRouter } from 'next/router';
@@ -24,6 +24,7 @@ import {
 
 import { Ellipsis } from './Ellipsis';
 
+
 import styles from './PageTreeItem.module.scss';
 
 const logger = loggerFactory('growi:cli:Item');
@@ -188,6 +189,7 @@ export const PageTreeItem: FC<TreeItemProps> = (props) => {
       mainClassName={mainClassName}
       customEndComponents={[Ellipsis, NewPageCreateButton]}
       customNextComponents={[NewPageInput]}
+      markTarget={markTarget}
     />
   );
 };

+ 19 - 18
apps/app/src/components/TreeItem/SimpleItem.tsx

@@ -23,21 +23,21 @@ import type { TreeItemProps, TreeItemToolProps } from './interfaces';
 
 
 // Utility to mark target
-const markTarget = (children: ItemNode[], targetPathOrId?: Nullable<string>): void => {
-  if (targetPathOrId == null) {
-    return;
-  }
-
-  children.forEach((node) => {
-    if (node.page._id === targetPathOrId || node.page.path === targetPathOrId) {
-      node.page.isTarget = true;
-    }
-    else {
-      node.page.isTarget = false;
-    }
-    return node;
-  });
-};
+// const markTarget = (children: ItemNode[], targetPathOrId?: Nullable<string>): void => {
+//   if (targetPathOrId == null) {
+//     return;
+//   }
+
+//   children.forEach((node) => {
+//     if (node.page._id === targetPathOrId || node.page.path === targetPathOrId) {
+//       node.page.isTarget = true;
+//     }
+//     else {
+//       node.page.isTarget = false;
+//     }
+//     return node;
+//   });
+// };
 
 
 const SimpleItemContent = ({ page }: { page: IPageForItem }) => {
@@ -94,13 +94,14 @@ export const SimpleItemTool: FC<TreeItemToolProps> = (props) => {
 
 type SimpleItemProps = TreeItemProps & {
   itemRef?: RefObject<any> | RefCallback<any>,
+  // markTarget: (children: ItemNode[], targetPathOrId?: Nullable<string>) => void;
 }
 
 export const SimpleItem: FC<SimpleItemProps> = (props) => {
   const {
     itemNode, targetPathOrId, isOpen: _isOpen = false,
     onRenamed, onClick, onClickDuplicateMenuItem, onClickDeleteMenuItem, isEnableActions, isReadOnlyUser, isWipPageShown = true,
-    itemRef, itemClass, mainClassName,
+    itemRef, itemClass, mainClassName, markTarget,
   } = props;
 
   const { page, children } = itemNode;
@@ -153,7 +154,7 @@ export const SimpleItem: FC<SimpleItemProps> = (props) => {
       markTarget(children, targetPathOrId);
       setCurrentChildren(children);
     }
-  }, [children, currentChildren.length, targetPathOrId]);
+  }, [children, currentChildren.length, markTarget, targetPathOrId]);
 
   /*
    * When swr fetch succeeded
@@ -164,7 +165,7 @@ export const SimpleItem: FC<SimpleItemProps> = (props) => {
       markTarget(newChildren, targetPathOrId);
       setCurrentChildren(newChildren);
     }
-  }, [data, isOpen, targetPathOrId]);
+  }, [data, isOpen, markTarget, targetPathOrId]);
 
   const ItemClassFixed = itemClass ?? SimpleItem;