|
|
@@ -4,7 +4,7 @@ import {
|
|
|
ModalBody, Input, Label,
|
|
|
} from 'reactstrap';
|
|
|
|
|
|
-import { AiAssistantScopeType, AiAssistantShareScope, AiAssistantAccessScope } from '~/features/openai/interfaces/ai-assistant';
|
|
|
+import { AiAssistantShareScope, AiAssistantAccessScope } from '~/features/openai/interfaces/ai-assistant';
|
|
|
import type { PopulatedGrantedGroup } from '~/interfaces/page-grant';
|
|
|
import { useSWRxUserRelatedGroups } from '~/stores/user';
|
|
|
|
|
|
@@ -13,15 +13,22 @@ import { AiAssistantManagementHeader } from './AiAssistantManagementHeader';
|
|
|
import { SelectUserGroupModal } from './SelectUserGroupModal';
|
|
|
import { ShareScopeSwitch } from './ShareScopeSwitch';
|
|
|
|
|
|
+const ScopeType = {
|
|
|
+ ACCESS: 'Access',
|
|
|
+ SHARE: 'Share',
|
|
|
+} as const;
|
|
|
+
|
|
|
+type ScopeType = typeof ScopeType[keyof typeof ScopeType];
|
|
|
|
|
|
type Props = {
|
|
|
selectedShareScope: AiAssistantShareScope,
|
|
|
selectedAccessScope: AiAssistantAccessScope,
|
|
|
selectedUserGroupsForShareScope: PopulatedGrantedGroup[],
|
|
|
selectedUserGroupsForAccessScope: PopulatedGrantedGroup[],
|
|
|
- onSelectUserGroup: (userGroup: PopulatedGrantedGroup, scopeType: AiAssistantScopeType) => void,
|
|
|
onSelectShareScope: (scope: AiAssistantShareScope) => void,
|
|
|
onSelectAccessScope: (scope: AiAssistantAccessScope) => void,
|
|
|
+ onSelectShareScopeUserGroups: (userGroup: PopulatedGrantedGroup) => void,
|
|
|
+ onSelectAccessScopeUserGroups: (userGroup: PopulatedGrantedGroup) => void,
|
|
|
}
|
|
|
|
|
|
export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
@@ -30,9 +37,10 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
selectedAccessScope,
|
|
|
selectedUserGroupsForShareScope,
|
|
|
selectedUserGroupsForAccessScope,
|
|
|
- onSelectUserGroup,
|
|
|
onSelectShareScope,
|
|
|
onSelectAccessScope,
|
|
|
+ onSelectShareScopeUserGroups,
|
|
|
+ onSelectAccessScopeUserGroups,
|
|
|
} = props;
|
|
|
|
|
|
const { data: userRelatedGroups } = useSWRxUserRelatedGroups();
|
|
|
@@ -40,7 +48,7 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
|
|
|
const [isShared, setIsShared] = useState(false);
|
|
|
const [isSelectUserGroupModalOpen, setIsSelectUserGroupModalOpen] = useState(false);
|
|
|
- const [selectedUserGroupType, setSelectedUserGroupType] = useState<AiAssistantScopeType>(AiAssistantScopeType.ACCESS);
|
|
|
+ const [selectedUserGroupType, setSelectedUserGroupType] = useState<ScopeType>(ScopeType.ACCESS);
|
|
|
|
|
|
const changeShareToggleHandler = useCallback(() => {
|
|
|
setIsShared((prev) => {
|
|
|
@@ -55,7 +63,7 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
});
|
|
|
}, [onSelectAccessScope, onSelectShareScope]);
|
|
|
|
|
|
- const selectGroupScopeHandler = useCallback((scopeType: AiAssistantScopeType) => {
|
|
|
+ const selectGroupScopeHandler = useCallback((scopeType: ScopeType) => {
|
|
|
setSelectedUserGroupType(scopeType);
|
|
|
setIsSelectUserGroupModalOpen(true);
|
|
|
}, []);
|
|
|
@@ -63,14 +71,14 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
const selectShareScopeHandler = useCallback((shareScope: AiAssistantShareScope) => {
|
|
|
onSelectShareScope(shareScope);
|
|
|
if (shareScope === AiAssistantShareScope.GROUPS && !hasNoRelatedGroups) {
|
|
|
- selectGroupScopeHandler(AiAssistantScopeType.SHARE);
|
|
|
+ selectGroupScopeHandler(ScopeType.SHARE);
|
|
|
}
|
|
|
}, [hasNoRelatedGroups, onSelectShareScope, selectGroupScopeHandler]);
|
|
|
|
|
|
const selectAccessScopeHandler = useCallback((accessScope: AiAssistantAccessScope) => {
|
|
|
onSelectAccessScope(accessScope);
|
|
|
if (accessScope === AiAssistantAccessScope.GROUPS && !hasNoRelatedGroups) {
|
|
|
- selectGroupScopeHandler(AiAssistantScopeType.ACCESS);
|
|
|
+ selectGroupScopeHandler(ScopeType.ACCESS);
|
|
|
}
|
|
|
}, [hasNoRelatedGroups, onSelectAccessScope, selectGroupScopeHandler]);
|
|
|
|
|
|
@@ -112,9 +120,15 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
isOpen={isSelectUserGroupModalOpen}
|
|
|
userRelatedGroups={userRelatedGroups?.relatedGroups}
|
|
|
closeModal={() => setIsSelectUserGroupModalOpen(false)}
|
|
|
- selectedUserGroupType={selectedUserGroupType}
|
|
|
- selectedUserGroup={selectedUserGroupType === AiAssistantScopeType.ACCESS ? selectedUserGroupsForAccessScope : selectedUserGroupsForShareScope}
|
|
|
- onSelect={onSelectUserGroup}
|
|
|
+ selectedUserGroups={selectedUserGroupType === ScopeType.ACCESS ? selectedUserGroupsForAccessScope : selectedUserGroupsForShareScope}
|
|
|
+ onSelect={(userGroup) => {
|
|
|
+ if (selectedUserGroupType === ScopeType.ACCESS) {
|
|
|
+ onSelectAccessScopeUserGroups(userGroup);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ onSelectShareScopeUserGroups(userGroup);
|
|
|
+ }
|
|
|
+ }}
|
|
|
/>
|
|
|
</ModalBody>
|
|
|
</>
|