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

refactor: add methodButtonPosition prop to SelectablePagePageList for flexible button placement

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

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

@@ -61,7 +61,7 @@ const SelectablePageTree = memo((props: { onClickAddPageButton: (page: IPageHasI
             pageTreeItemHandler(page);
             pageTreeItemHandler(page);
           }}
           }}
         >
         >
-          <span className="material-symbols-outlined p-0 me-3 text-primary">add_circle</span>
+          <span className="material-symbols-outlined p-0 me-2 text-primary">add_circle</span>
         </button>
         </button>
       );
       );
     };
     };
@@ -122,6 +122,7 @@ export const AiAssistantManagementPageTreeSelection = (): JSX.Element => {
           <SelectablePagePageList
           <SelectablePagePageList
             pages={Array.from(selectedPages.values())}
             pages={Array.from(selectedPages.values())}
             method="remove"
             method="remove"
+            methodButtonPosition="right"
             onClickMethodButton={removePageHandler}
             onClickMethodButton={removePageHandler}
           />
           />
           <label className="form-text text-muted mt-2">
           <label className="form-text text-muted mt-2">

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

@@ -8,17 +8,40 @@ const moduleClass = styles['selectable-page-page-list'] ?? '';
 type Props = {
 type Props = {
   pages: IPageHasId[],
   pages: IPageHasId[],
   method: 'add' | 'remove',
   method: 'add' | 'remove',
+  methodButtonPosition?: 'left' | 'right',
   disablePageIds?: string[],
   disablePageIds?: string[],
   onClickMethodButton: (page: IPageHasId) => void,
   onClickMethodButton: (page: IPageHasId) => void,
 }
 }
 
 
 export const SelectablePagePageList = (props: Props): JSX.Element => {
 export const SelectablePagePageList = (props: Props): JSX.Element => {
   const {
   const {
-    pages, method, disablePageIds, onClickMethodButton,
+    pages,
+    method,
+    methodButtonPosition = 'left',
+    disablePageIds,
+    onClickMethodButton,
   } = props;
   } = props;
 
 
   const { t } = useTranslation();
   const { t } = useTranslation();
 
 
+  const methodButton = (page: IPageHasId) => {
+    return (
+      <button
+        type="button"
+        className={`btn border-0 ${method === 'add' ? 'text-primary' : 'text-secondary'}`}
+        disabled={disablePageIds?.includes(page._id)}
+        onClick={(e) => {
+          e.stopPropagation();
+          onClickMethodButton(page);
+        }}
+      >
+        <span className="material-symbols-outlined">
+          { method === 'add' ? 'add_circle' : 'do_not_disturb_on' }
+        </span>
+      </button>
+    );
+  };
+
   if (pages.length === 0) {
   if (pages.length === 0) {
     return (
     return (
       <div className={moduleClass}>
       <div className={moduleClass}>
@@ -41,29 +64,22 @@ export const SelectablePagePageList = (props: Props): JSX.Element => {
               e.stopPropagation();
               e.stopPropagation();
             }}
             }}
           >
           >
-            <button
-              type="button"
-              className={`btn border-0 ${method === 'add' ? 'text-primary' : 'text-secondary'}`}
-              disabled={disablePageIds?.includes(page._id)}
-              onClick={(e) => {
-                e.stopPropagation();
-                onClickMethodButton(page);
-              }}
-            >
-              <span className="material-symbols-outlined">
-                { method === 'add' ? 'add_circle' : 'do_not_disturb_on' }
-              </span>
-            </button>
+
+            {methodButtonPosition === 'left' && methodButton(page)}
+
             <div className="flex-grow-1">
             <div className="flex-grow-1">
               <span>
               <span>
                 {page.path}
                 {page.path}
               </span>
               </span>
             </div>
             </div>
+
             <span className="badge bg-body-secondary rounded-pill me-2">
             <span className="badge bg-body-secondary rounded-pill me-2">
               <span className="text-body-tertiary">
               <span className="text-body-tertiary">
                 {page.descendantCount}
                 {page.descendantCount}
               </span>
               </span>
             </span>
             </span>
+
+            {methodButtonPosition === 'right' && methodButton(page)}
           </button>
           </button>
         );
         );
       })}
       })}