Просмотр исходного кода

refactor: replace SelectedPage type with SelectablePage across components and services

Shun Miyazawa 8 месяцев назад
Родитель
Сommit
a39f4ed3b6

+ 2 - 2
apps/app/src/features/openai/client/components/AiAssistant/AiAssistantManagementModal/AiAssistantManagementEditPages.tsx

@@ -6,14 +6,14 @@ import { ModalBody } from 'reactstrap';
 
 import { useLimitLearnablePageCountPerAssistant } from '~/stores-universal/context';
 
-import type { SelectedPage } from '../../../../interfaces/selected-page';
+import type { SelectablePage } from '../../../../interfaces/selectable-page';
 
 import { AiAssistantManagementHeader } from './AiAssistantManagementHeader';
 import { PageSelectionMethodButtons } from './PageSelectionMethodButtons';
 import { SelectablePagePageList } from './SelectablePagePageList';
 
 type Props = {
-  selectedPages: SelectedPage[];
+  selectedPages: SelectablePage[];
   onRemove: (pageId: string) => void;
 }
 

+ 2 - 2
apps/app/src/features/openai/client/components/AiAssistant/AiAssistantManagementModal/AiAssistantManagementHome.tsx

@@ -11,7 +11,7 @@ import { AiAssistantShareScope, AiAssistantAccessScope } from '~/features/openai
 import type { PopulatedGrantedGroup } from '~/interfaces/page-grant';
 import { useCurrentUser, useLimitLearnablePageCountPerAssistant } from '~/stores-universal/context';
 
-import type { SelectedPage } from '../../../../interfaces/selected-page';
+import type { SelectablePage } from '../../../../interfaces/selectable-page';
 import { determineShareScope } from '../../../../utils/determine-share-scope';
 import { useAiAssistantManagementModal, AiAssistantManagementModalPageMode } from '../../../stores/ai-assistant';
 
@@ -25,7 +25,7 @@ type Props = {
   instruction: string;
   shareScope: AiAssistantShareScope,
   accessScope: AiAssistantAccessScope,
-  selectedPages: SelectedPage[];
+  selectedPages: SelectablePage[];
   selectedUserGroupsForAccessScope: PopulatedGrantedGroup[],
   selectedUserGroupsForShareScope: PopulatedGrantedGroup[],
   onNameChange: (value: string) => void;

+ 3 - 3
apps/app/src/features/openai/client/components/AiAssistant/AiAssistantManagementModal/AiAssistantManagementKeywordSearch.tsx

@@ -12,7 +12,7 @@ import {
 
 import { useSWRxSearch } from '~/stores/search';
 
-import type { SelectedPage } from '../../../../interfaces/selected-page';
+import type { SelectablePage } from '../../../../interfaces/selectable-page';
 import { useSelectedPages } from '../../../services/use-selected-pages';
 import {
   useAiAssistantManagementModal, AiAssistantManagementModalPageMode,
@@ -36,8 +36,8 @@ const isSelectedSearchKeyword = (value: unknown): value is SelectedSearchKeyword
 
 
 type Props = {
-  baseSelectedPages: SelectedPage[],
-  updateBaseSelectedPages: (pages: SelectedPage[]) => void;
+  baseSelectedPages: SelectablePage[],
+  updateBaseSelectedPages: (pages: SelectablePage[]) => void;
 }
 
 export const AiAssistantKeywordSearch = (props: Props): JSX.Element => {

+ 3 - 3
apps/app/src/features/openai/client/components/AiAssistant/AiAssistantManagementModal/AiAssistantManagementModal.tsx

@@ -18,7 +18,7 @@ import type { PopulatedGrantedGroup } from '~/interfaces/page-grant';
 import { useSWRxPagePathsWithDescendantCount } from '~/stores/page';
 import loggerFactory from '~/utils/logger';
 
-import type { SelectedPage } from '../../../../interfaces/selected-page';
+import type { SelectablePage } from '../../../../interfaces/selectable-page';
 import { removeGlobPath } from '../../../../utils/remove-glob-path';
 import { createAiAssistant, updateAiAssistant } from '../../../services/ai-assistant';
 import {
@@ -56,7 +56,7 @@ const convertToPopulatedGrantedGroups = (selectedGroups: IGrantedGroup[]): Popul
   return populatedGrantedGroups;
 };
 
-const convertToSelectedPages = (pagePathPatterns: string[], pagePathsWithDescendantCount: IPagePathWithDescendantCount[]): SelectedPage[] => {
+const convertToSelectedPages = (pagePathPatterns: string[], pagePathsWithDescendantCount: IPagePathWithDescendantCount[]): SelectablePage[] => {
   return pagePathPatterns.map((pagePathPattern) => {
     const pathWithoutGlob = isGlobPatternPath(pagePathPattern) ? pagePathPattern.slice(0, -2) : pagePathPattern;
     const page = pagePathsWithDescendantCount.find(p => p.path === pathWithoutGlob);
@@ -92,7 +92,7 @@ const AiAssistantManagementModalSubstance = (): JSX.Element => {
   const [selectedAccessScope, setSelectedAccessScope] = useState<AiAssistantAccessScope>(AiAssistantAccessScope.OWNER);
   const [selectedUserGroupsForAccessScope, setSelectedUserGroupsForAccessScope] = useState<PopulatedGrantedGroup[]>([]);
   const [selectedUserGroupsForShareScope, setSelectedUserGroupsForShareScope] = useState<PopulatedGrantedGroup[]>([]);
-  const [selectedPages, setSelectedPages] = useState<SelectedPage[]>([]);
+  const [selectedPages, setSelectedPages] = useState<SelectablePage[]>([]);
   const [instruction, setInstruction] = useState<string>(t('modal_ai_assistant.default_instruction'));
 
 

+ 5 - 5
apps/app/src/features/openai/client/components/AiAssistant/AiAssistantManagementModal/AiAssistantManagementPageTreeSelection.tsx

@@ -14,7 +14,7 @@ import { TreeItemLayout } from '~/client/components/TreeItem';
 import type { IPageForItem } from '~/interfaces/page';
 import { useIsGuestUser, useIsReadOnlyUser } from '~/stores-universal/context';
 
-import { type SelectedPage, isSelectedPage } from '../../../../interfaces/selected-page';
+import { type SelectablePage, isSelectablePage } from '../../../../interfaces/selectable-page';
 import { useSelectedPages } from '../../../services/use-selected-pages';
 import { AiAssistantManagementModalPageMode, useAiAssistantManagementModal } from '../../../stores/ai-assistant';
 
@@ -25,14 +25,14 @@ import styles from './AiAssistantManagementPageTreeSelection.module.scss';
 
 const moduleClass = styles['grw-ai-assistant-management-page-tree-selection'] ?? '';
 
-const SelectablePageTree = memo((props: { onClickAddPageButton: (page: SelectedPage) => void }) => {
+const SelectablePageTree = memo((props: { onClickAddPageButton: (page: SelectablePage) => void }) => {
   const { onClickAddPageButton } = props;
 
   const { data: isGuestUser } = useIsGuestUser();
   const { data: isReadOnlyUser } = useIsReadOnlyUser();
 
   const pageTreeItemClickHandler = useCallback((page: IPageForItem) => {
-    if (!isSelectedPage(page)) {
+    if (!isSelectablePage(page)) {
       return;
     }
 
@@ -81,8 +81,8 @@ const SelectablePageTree = memo((props: { onClickAddPageButton: (page: SelectedP
 });
 
 type Props = {
-  baseSelectedPages: SelectedPage[],
-  updateBaseSelectedPages: (pages: SelectedPage[]) => void;
+  baseSelectedPages: SelectablePage[],
+  updateBaseSelectedPages: (pages: SelectablePage[]) => void;
 }
 
 export const AiAssistantManagementPageTreeSelection = (props: Props): JSX.Element => {

+ 5 - 5
apps/app/src/features/openai/client/components/AiAssistant/AiAssistantManagementModal/SelectablePagePageList.tsx

@@ -2,18 +2,18 @@ import React, { useMemo, memo } from 'react';
 
 import { useTranslation } from 'react-i18next';
 
-import { type SelectedPage } from '../../../../interfaces/selected-page';
+import { type SelectablePage } from '../../../../interfaces/selectable-page';
 
 import styles from './SelectablePagePageList.module.scss';
 
 const moduleClass = styles['selectable-page-page-list'] ?? '';
 
 type MethodButtonProps = {
-  page: SelectedPage;
+  page: SelectablePage;
   disablePagePaths: string[];
   methodButtonColor: string;
   methodButtonIconName: string;
-  onClickMethodButton: (page: SelectedPage) => void;
+  onClickMethodButton: (page: SelectablePage) => void;
 }
 
 const MethodButton = memo((props: MethodButtonProps) => {
@@ -44,11 +44,11 @@ const MethodButton = memo((props: MethodButtonProps) => {
 
 
 type SelectablePagePageListProps = {
-  pages: SelectedPage[],
+  pages: SelectablePage[],
   method: 'add' | 'remove' | 'delete'
   methodButtonPosition?: 'left' | 'right',
   disablePagePaths?: string[],
-  onClickMethodButton: (page: SelectedPage) => void,
+  onClickMethodButton: (page: SelectablePage) => void,
 }
 
 export const SelectablePagePageList = (props: SelectablePagePageListProps): JSX.Element => {

+ 2 - 2
apps/app/src/features/openai/client/components/AiAssistant/AiAssistantManagementModal/ShareScopeWarningModal.tsx

@@ -5,11 +5,11 @@ import {
   Modal, ModalHeader, ModalBody, ModalFooter,
 } from 'reactstrap';
 
-import type { SelectedPage } from '../../../../interfaces/selected-page';
+import type { SelectablePage } from '../../../../interfaces/selectable-page';
 
 type Props = {
   isOpen: boolean,
-  selectedPages: SelectedPage[],
+  selectedPages: SelectablePage[],
   closeModal: () => void,
   onSubmit: () => Promise<void>,
 }

+ 9 - 9
apps/app/src/features/openai/client/services/use-selected-pages.tsx

@@ -1,23 +1,23 @@
 import { useState, useCallback, useEffect } from 'react';
 
-import type { SelectedPage } from '../../interfaces/selected-page';
+import type { SelectablePage } from '../../interfaces/selectable-page';
 import { useAiAssistantManagementModal } from '../stores/ai-assistant';
 
 
 type UseSelectedPages = {
-  selectedPages: Map<string, SelectedPage>,
-  addPage: (page: SelectedPage) => void,
-  removePage: (page: SelectedPage) => void,
+  selectedPages: Map<string, SelectablePage>,
+  addPage: (page: SelectablePage) => void,
+  removePage: (page: SelectablePage) => void,
 }
 
-export const useSelectedPages = (initialPages?: SelectedPage[]): UseSelectedPages => {
-  const [selectedPages, setSelectedPages] = useState<Map<string, SelectedPage>>(new Map());
+export const useSelectedPages = (initialPages?: SelectablePage[]): UseSelectedPages => {
+  const [selectedPages, setSelectedPages] = useState<Map<string, SelectablePage>>(new Map());
   const { data: aiAssistantManagementModalData } = useAiAssistantManagementModal();
 
   useEffect(() => {
     // Initialize each time PageMode is changed
     if (initialPages != null && aiAssistantManagementModalData?.pageMode != null) {
-      const initialMap = new Map<string, SelectedPage>();
+      const initialMap = new Map<string, SelectablePage>();
       initialPages.forEach((page) => {
         if (page.path != null) {
           initialMap.set(page.path, page);
@@ -27,7 +27,7 @@ export const useSelectedPages = (initialPages?: SelectedPage[]): UseSelectedPage
     }
   }, [aiAssistantManagementModalData?.pageMode, initialPages]);
 
-  const addPage = useCallback((page: SelectedPage) => {
+  const addPage = useCallback((page: SelectablePage) => {
     setSelectedPages((prev) => {
       const newMap = new Map(prev);
       if (page.path != null) {
@@ -37,7 +37,7 @@ export const useSelectedPages = (initialPages?: SelectedPage[]): UseSelectedPage
     });
   }, []);
 
-  const removePage = useCallback((page: SelectedPage) => {
+  const removePage = useCallback((page: SelectablePage) => {
     setSelectedPages((prev) => {
       const newMap = new Map(prev);
       if (page.path != null) {

+ 9 - 0
apps/app/src/features/openai/interfaces/selectable-page.ts

@@ -0,0 +1,9 @@
+import type { IPageHasId } from '@growi/core';
+
+import type { IPageForItem } from '~/interfaces/page';
+
+export type SelectablePage = Partial<IPageHasId> & { path: string }
+
+export const isSelectablePage = (page: IPageForItem): page is SelectablePage => {
+  return page.path != null;
+};

+ 0 - 9
apps/app/src/features/openai/interfaces/selected-page.ts

@@ -1,9 +0,0 @@
-import type { IPageHasId } from '@growi/core';
-
-import type { IPageForItem } from '~/interfaces/page';
-
-export type SelectedPage = Partial<IPageHasId> & { path: string }
-
-export const isSelectedPage = (page: IPageForItem): page is SelectedPage => {
-  return page.path != null;
-};