Shun Miyazawa 1 год назад
Родитель
Сommit
89ee6c1aa1

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

@@ -4,8 +4,7 @@ import {
   ModalBody, Input, Label,
 } from 'reactstrap';
 
-import type { AiAssistantAccessScope } from '~/features/openai/interfaces/ai-assistant';
-import { AiAssistantScopeType, AiAssistantShareScope } from '~/features/openai/interfaces/ai-assistant';
+import { AiAssistantScopeType, AiAssistantShareScope, AiAssistantAccessScope } from '~/features/openai/interfaces/ai-assistant';
 import type { PopulatedGrantedGroup } from '~/interfaces/page-grant';
 import { useSWRxUserRelatedGroups } from '~/stores/user';
 
@@ -44,7 +43,8 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
   const changeShareToggleHandler = useCallback(() => {
     setIsShared((prev) => {
       if (prev) { // if isShared === true
-        onSelectScope(AiAssistantShareScope.OWNER);
+        onSelectScope(AiAssistantAccessScope.OWNER, AiAssistantScopeType.ACCESS);
+        onSelectScope(AiAssistantShareScope.SAME_AS_ACCESS_SCOPE, AiAssistantScopeType.SHARE);
       }
       return !prev;
     });

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

@@ -25,6 +25,7 @@ const moduleClass = styles['grw-ai-assistant-management'] ?? '';
 
 const logger = loggerFactory('growi:openai:client:components:AiAssistantManagementModal');
 
+// PopulatedGrantedGroup[] -> IGrantedGroup[]
 const convertToGrantedGroups = (selectedGroups: PopulatedGrantedGroup[]): IGrantedGroup[] => {
   return selectedGroups.map(group => ({
     type: group.type,
@@ -42,7 +43,7 @@ const AiAssistantManagementModalSubstance = (): JSX.Element => {
   // States
   const [name, setName] = useState<string>('');
   const [description, setDescription] = useState<string>('');
-  const [selectedShareScope, setSelectedShareScope] = useState<AiAssistantShareScope>(AiAssistantShareScope.OWNER);
+  const [selectedShareScope, setSelectedShareScope] = useState<AiAssistantShareScope>(AiAssistantShareScope.SAME_AS_ACCESS_SCOPE);
   const [selectedAccessScope, setSelectedAccessScope] = useState<AiAssistantAccessScope>(AiAssistantAccessScope.OWNER);
   const [selectedUserGroupsForAccessScope, setSelectedUserGroupsForAccessScope] = useState<PopulatedGrantedGroup[]>([]);
   const [selectedUserGroupsForShareScope, setSelectedUserGroupsForShareScope] = useState<PopulatedGrantedGroup[]>([]);
@@ -102,17 +103,15 @@ const AiAssistantManagementModalSubstance = (): JSX.Element => {
   /*
   *  For AiAssistantManagementEditShare methods
   */
-  const selectScopeHandler = useCallback((targetScope: AiAssistantAccessScope | AiAssistantShareScope, scopeType?: AiAssistantScopeType) => {
+  const selectScopeHandler = useCallback((targetScope: AiAssistantAccessScope | AiAssistantShareScope, scopeType: AiAssistantScopeType) => {
     if (scopeType === AiAssistantScopeType.ACCESS) {
-      setSelectedAccessScope(targetScope);
+      setSelectedAccessScope(targetScope as AiAssistantAccessScope);
       return;
     }
     if (scopeType === AiAssistantScopeType.SHARE) {
-      setSelectedShareScope(targetScope);
+      setSelectedShareScope(targetScope as AiAssistantShareScope);
       return;
     }
-    setSelectedAccessScope(targetScope);
-    setSelectedShareScope(targetScope);
   }, []);
 
   const selectUserGroupsHandler = useCallback((targetUserGroup: PopulatedGrantedGroup, scopeType: AiAssistantScopeType) => {
@@ -180,6 +179,8 @@ const AiAssistantManagementModalSubstance = (): JSX.Element => {
             selectedUserGroupsForAccessScope={selectedUserGroupsForAccessScope}
             onSelectScope={selectScopeHandler}
             onSelectUserGroup={selectUserGroupsHandler}
+            // onSelectShareScope={selectShareScopeHandler}
+            // onSelectAccessScope={selectAccessScopeHandler}
           />
         </TabPane>
 

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

@@ -1,4 +1,4 @@
-import React, { useCallback, useState } from 'react';
+import React from 'react';
 
 import { useTranslation } from 'react-i18next';
 import {
@@ -9,15 +9,6 @@ import type { AiAssistantAccessScope } from '../../../../interfaces/ai-assistant
 import { AiAssistantShareScope, AiAssistantScopeType } from '../../../../interfaces/ai-assistant';
 
 
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
-const { OWNER, ...excludedOwnerShareScope } = AiAssistantShareScope;
-const ShareScopeSwitchType = {
-  ...excludedOwnerShareScope,
-  SAME_AS_ACCESS_SCOPE: 'sameAsAccessScope',
-} as const;
-
-type ShareScopeSwitchType = typeof ShareScopeSwitchType[keyof typeof ShareScopeSwitchType];
-
 type Props = {
   isDisabled: boolean,
   isDisabledGroups: boolean,
@@ -31,40 +22,26 @@ export const ShareScopeSwitch: React.FC<Props> = (props: Props) => {
     isDisabled,
     isDisabledGroups,
     selectedShareScope,
-    selectedAccessScope,
     onSelect,
   } = props;
 
   const { t } = useTranslation();
 
-  const [selectedScope, setSelectedScope] = useState<ShareScopeSwitchType>(ShareScopeSwitchType.SAME_AS_ACCESS_SCOPE);
-
-  const checkShareScopeRadioHandler = useCallback((shareScope: ShareScopeSwitchType) => {
-    setSelectedScope(shareScope);
-    if (shareScope === ShareScopeSwitchType.SAME_AS_ACCESS_SCOPE) {
-      onSelect(selectedAccessScope, AiAssistantScopeType.SHARE);
-      return;
-    }
-
-    onSelect(shareScope, AiAssistantScopeType.SHARE);
-  }, [onSelect, selectedAccessScope]);
-
-
   return (
     <div className="mb-4">
       <Label className="text-secondary mb-3">アシスタントの共有範囲</Label>
       <div className="d-flex flex-column gap-3">
 
-        {[ShareScopeSwitchType.PUBLIC_ONLY, ShareScopeSwitchType.GROUPS, ShareScopeSwitchType.SAME_AS_ACCESS_SCOPE].map(shareScope => (
+        {[AiAssistantShareScope.PUBLIC_ONLY, AiAssistantShareScope.GROUPS, AiAssistantShareScope.SAME_AS_ACCESS_SCOPE].map(shareScope => (
           <FormGroup check key={shareScope}>
             <Input
               type="radio"
               name="shareScope"
               id="shareGroup"
               className="form-check-input"
-              disabled={isDisabled || (isDisabledGroups && shareScope === ShareScopeSwitchType.GROUPS)}
-              onChange={() => checkShareScopeRadioHandler(shareScope)}
-              checked={selectedScope === shareScope}
+              disabled={isDisabled || (isDisabledGroups && shareScope === AiAssistantShareScope.GROUPS)}
+              onChange={() => onSelect(shareScope, AiAssistantScopeType.SHARE)}
+              checked={selectedShareScope === shareScope}
             />
             <Label check for="shareGroup" className="d-flex flex-column">
               <span>{t(`modal_ai_assistant.share_scope.${shareScope}.label`)}</span>

+ 1 - 0
apps/app/src/features/openai/interfaces/ai-assistant.ts

@@ -11,6 +11,7 @@ export const AiAssistantScopeType = {
 } as const;
 
 export const AiAssistantShareScope = {
+  SAME_AS_ACCESS_SCOPE: 'sameAsAccessScope',
   PUBLIC_ONLY: 'publicOnly', // TODO: Rename to "PUBLIC"
   OWNER: 'owner',
   GROUPS: 'groups',