feat: knowledge admin role (#5965)

Co-authored-by: JzoNg <jzongcode@gmail.com>
Co-authored-by: jyong <718720800@qq.com>
This commit is contained in:
Joe
2024-07-04 16:21:40 +08:00
committed by GitHub
parent 46eca01fa3
commit 5d9ad430af
46 changed files with 1028 additions and 350 deletions

View File

@@ -1,5 +1,6 @@
import type { FC } from 'react'
import { useRef, useState } from 'react'
import { useMount } from 'ahooks'
import { useTranslation } from 'react-i18next'
import { isEqual } from 'lodash-es'
import cn from 'classnames'
@@ -10,19 +11,22 @@ import Button from '@/app/components/base/button'
import type { DataSet } from '@/models/datasets'
import { useToastContext } from '@/app/components/base/toast'
import { updateDatasetSetting } from '@/service/datasets'
import { useAppContext } from '@/context/app-context'
import { useModalContext } from '@/context/modal-context'
import type { RetrievalConfig } from '@/types/app'
import RetrievalMethodConfig from '@/app/components/datasets/common/retrieval-method-config'
import EconomicalRetrievalMethodConfig from '@/app/components/datasets/common/economical-retrieval-method-config'
import { ensureRerankModelSelected, isReRankModelSelected } from '@/app/components/datasets/common/check-rerank-model'
import { AlertTriangle } from '@/app/components/base/icons/src/vender/solid/alertsAndFeedback'
import PermissionsRadio from '@/app/components/datasets/settings/permissions-radio'
import PermissionSelector from '@/app/components/datasets/settings/permission-selector'
import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector'
import {
useModelList,
useModelListAndDefaultModelAndCurrentProviderAndModel,
} from '@/app/components/header/account-setting/model-provider-page/hooks'
import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
import { fetchMembers } from '@/service/common'
import type { Member } from '@/models/common'
type SettingsModalProps = {
currentDataset: DataSet
@@ -55,7 +59,11 @@ const SettingsModal: FC<SettingsModalProps> = ({
const { setShowAccountSettingModal } = useModalContext()
const [loading, setLoading] = useState(false)
const { isCurrentWorkspaceDatasetOperator } = useAppContext()
const [localeCurrentDataset, setLocaleCurrentDataset] = useState({ ...currentDataset })
const [selectedMemberIDs, setSelectedMemberIDs] = useState<string[]>(currentDataset.partial_member_list || [])
const [memberList, setMemberList] = useState<Member[]>([])
const [indexMethod, setIndexMethod] = useState(currentDataset.indexing_technique)
const [retrievalConfig, setRetrievalConfig] = useState(localeCurrentDataset?.retrieval_model_dict as RetrievalConfig)
@@ -92,7 +100,7 @@ const SettingsModal: FC<SettingsModalProps> = ({
try {
setLoading(true)
const { id, name, description, permission } = localeCurrentDataset
await updateDatasetSetting({
const requestParams = {
datasetId: id,
body: {
name,
@@ -106,7 +114,16 @@ const SettingsModal: FC<SettingsModalProps> = ({
embedding_model: localeCurrentDataset.embedding_model,
embedding_model_provider: localeCurrentDataset.embedding_model_provider,
},
})
} as any
if (permission === 'partial_members') {
requestParams.body.partial_member_list = selectedMemberIDs.map((id) => {
return {
user_id: id,
role: memberList.find(member => member.id === id)?.role,
}
})
}
await updateDatasetSetting(requestParams)
notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') })
onSave({
...localeCurrentDataset,
@@ -122,6 +139,18 @@ const SettingsModal: FC<SettingsModalProps> = ({
}
}
const getMembers = async () => {
const { accounts } = await fetchMembers({ url: '/workspaces/current/members', params: {} })
if (!accounts)
setMemberList([])
else
setMemberList(accounts)
}
useMount(() => {
getMembers()
})
return (
<div
className='overflow-hidden w-full flex flex-col bg-white border-[0.5px] border-gray-200 rounded-xl shadow-xl'
@@ -180,11 +209,13 @@ const SettingsModal: FC<SettingsModalProps> = ({
<div>{t('datasetSettings.form.permissions')}</div>
</div>
<div className='w-full'>
<PermissionsRadio
disable={!localeCurrentDataset?.embedding_available}
value={localeCurrentDataset.permission}
<PermissionSelector
disabled={!localeCurrentDataset?.embedding_available || isCurrentWorkspaceDatasetOperator}
permission={localeCurrentDataset.permission}
value={selectedMemberIDs}
onChange={v => handleValueChange('permission', v!)}
itemClassName='sm:!w-[280px]'
onMemberSelect={setSelectedMemberIDs}
memberList={memberList}
/>
</div>
</div>