|
|
@@ -4,16 +4,19 @@ import {
|
|
|
ModalBody, Input, Label, Form, FormGroup,
|
|
|
} from 'reactstrap';
|
|
|
|
|
|
+import type { AiAssistantShareScope } from '~/features/openai/interfaces/ai-assistant';
|
|
|
import { AiAssistantAccessScope } from '~/features/openai/interfaces/ai-assistant';
|
|
|
import type { PopulatedGrantedGroup } from '~/interfaces/page-grant';
|
|
|
|
|
|
import { AccessScopeDropdown } from './AccessScopeDropdown';
|
|
|
import { AiAssistantManagementHeader } from './AiAssistantManagementHeader';
|
|
|
+import { ShareScopeSwitch } from './ShareScopeSwitch';
|
|
|
import { UserGroupSelector } from './UserGroupSelector';
|
|
|
|
|
|
|
|
|
type Props = {
|
|
|
selectedUserGroups: PopulatedGrantedGroup[],
|
|
|
+ selectedShareScope: AiAssistantShareScope,
|
|
|
selectedAccessScope: AiAssistantAccessScope,
|
|
|
onSelectUserGroup: (userGroup: PopulatedGrantedGroup) => void,
|
|
|
onSelectAccessScope: (accessScope: AiAssistantAccessScope) => void,
|
|
|
@@ -24,6 +27,7 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
selectedAccessScope, selectedUserGroups, onSelectAccessScope, onSelectUserGroup,
|
|
|
} = props;
|
|
|
|
|
|
+ const [isShared, setIsShared] = useState(false);
|
|
|
const [isUserGroupSelectorOpen, setIsUserGroupSelectorOpen] = useState(false);
|
|
|
|
|
|
const selectAccessScopeHandler = useCallback((accessScope: AiAssistantAccessScope) => {
|
|
|
@@ -38,7 +42,6 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
<AiAssistantManagementHeader />
|
|
|
|
|
|
<ModalBody className="px-4">
|
|
|
-
|
|
|
<Form>
|
|
|
{/* トグルスイッチ */}
|
|
|
<div className="form-check form-switch mb-4">
|
|
|
@@ -47,6 +50,8 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
role="switch"
|
|
|
id="shareAssistantSwitch"
|
|
|
className="form-check-input"
|
|
|
+ checked={isShared}
|
|
|
+ onChange={() => setIsShared(!isShared)}
|
|
|
/>
|
|
|
<Label className="form-check-label" for="shareAssistantSwitch">
|
|
|
アシスタントを共有する
|
|
|
@@ -56,54 +61,15 @@ export const AiAssistantManagementEditShare = (props: Props): JSX.Element => {
|
|
|
{/* アクセス権限ドロップダウン */}
|
|
|
<div className="mb-4">
|
|
|
<Label className="text-secondary mb-2">ページのアクセス権限</Label>
|
|
|
- <AccessScopeDropdown selectedAccessScope={selectedAccessScope} onSelect={selectAccessScopeHandler} />
|
|
|
+ <AccessScopeDropdown
|
|
|
+ isDisabled={!isShared}
|
|
|
+ selectedAccessScope={selectedAccessScope}
|
|
|
+ onSelect={selectAccessScopeHandler}
|
|
|
+ />
|
|
|
</div>
|
|
|
|
|
|
{/* 共有範囲ラジオグループ */}
|
|
|
- <div className="mb-4">
|
|
|
- <Label className="text-secondary mb-3">アシスタントの共有範囲</Label>
|
|
|
- <div className="d-flex flex-column gap-3">
|
|
|
- <FormGroup check>
|
|
|
- <Input
|
|
|
- type="radio"
|
|
|
- name="shareScope"
|
|
|
- id="shareAll"
|
|
|
- className="form-check-input"
|
|
|
- />
|
|
|
- <Label check for="shareAll" className="d-flex flex-column">
|
|
|
- <span>全体公開</span>
|
|
|
- <small className="text-secondary">全てのユーザーに共有されます</small>
|
|
|
- </Label>
|
|
|
- </FormGroup>
|
|
|
-
|
|
|
- <FormGroup check>
|
|
|
- <Input
|
|
|
- type="radio"
|
|
|
- name="shareScope"
|
|
|
- id="shareGroup"
|
|
|
- className="form-check-input"
|
|
|
- />
|
|
|
- <Label check for="shareGroup" className="d-flex flex-column">
|
|
|
- <span>グループを指定</span>
|
|
|
- <small className="text-secondary">選択したグループのメンバーにのみ共有されます</small>
|
|
|
- </Label>
|
|
|
- </FormGroup>
|
|
|
-
|
|
|
- <FormGroup check>
|
|
|
- <Input
|
|
|
- type="radio"
|
|
|
- name="shareScope"
|
|
|
- id="shareAccess"
|
|
|
- className="form-check-input"
|
|
|
- defaultChecked
|
|
|
- />
|
|
|
- <Label check for="shareAccess" className="d-flex flex-column">
|
|
|
- <span>ページのアクセス権限と同じ範囲</span>
|
|
|
- <small className="text-secondary">ページのアクセス権限と同じ範囲で共有されます</small>
|
|
|
- </Label>
|
|
|
- </FormGroup>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <ShareScopeSwitch isDisabled={!isShared} />
|
|
|
</Form>
|
|
|
|
|
|
<UserGroupSelector
|