dify/web/app/components/plugins/plugin-detail-panel/action-list.tsx

101 lines
3.5 KiB
TypeScript
Raw Normal View History

2024-11-02 14:48:55 +08:00
import React, { useState } from 'react'
import useSWR from 'swr'
2024-10-12 17:08:45 +08:00
import { useTranslation } from 'react-i18next'
2024-11-02 14:48:55 +08:00
import { usePluginPageContext } from '@/app/components/plugins/plugin-page/context'
import { useAppContext } from '@/context/app-context'
2024-10-13 10:49:55 +08:00
import Button from '@/app/components/base/button'
2024-11-02 14:48:55 +08:00
import Toast from '@/app/components/base/toast'
2024-10-13 10:49:55 +08:00
import Indicator from '@/app/components/header/indicator'
2024-11-02 14:48:55 +08:00
import ToolItem from '@/app/components/tools/provider/tool-item'
import ConfigCredential from '@/app/components/tools/setting/build-in/config-credentials'
import {
fetchBuiltInToolList,
removeBuiltInToolCredential,
updateBuiltInToolCredential,
} from '@/service/tools'
2024-10-12 16:29:46 +08:00
const ActionList = () => {
2024-10-12 17:08:45 +08:00
const { t } = useTranslation()
2024-11-02 14:48:55 +08:00
const { isCurrentWorkspaceManager } = useAppContext()
const currentPluginDetail = usePluginPageContext(v => v.currentPluginDetail)
const providerDeclaration = currentPluginDetail.declaration.tool.identity
const { data } = useSWR(
`/workspaces/current/tool-provider/builtin/${currentPluginDetail.plugin_id}/${currentPluginDetail.name}/tools`,
fetchBuiltInToolList,
)
const [showSettingAuth, setShowSettingAuth] = useState(false)
const handleCredentialSettingUpdate = () => {}
if (!data)
return null
2024-10-12 16:29:46 +08:00
return (
2024-10-13 10:49:55 +08:00
<div className='px-4 pt-2 pb-4'>
<div className='mb-1 py-1'>
<div className='mb-1 h-6 flex items-center justify-between text-text-secondary system-sm-semibold-uppercase'>
2024-11-02 14:48:55 +08:00
{t('plugin.detailPanel.actionNum', { num: data.length })}
2024-11-02 14:55:57 +08:00
{providerDeclaration.is_team_authorization && providerDeclaration.allow_delete && (
2024-11-02 14:48:55 +08:00
<Button
variant='secondary'
size='small'
onClick={() => setShowSettingAuth(true)}
disabled={!isCurrentWorkspaceManager}
>
<Indicator className='mr-2' color={'green'} />
{t('tools.auth.authorized')}
</Button>
)}
2024-10-13 10:49:55 +08:00
</div>
2024-11-02 14:55:57 +08:00
{!providerDeclaration.is_team_authorization && providerDeclaration.allow_delete && (
2024-11-02 14:48:55 +08:00
<Button
variant='primary'
className='w-full'
onClick={() => setShowSettingAuth(true)}
disabled={!isCurrentWorkspaceManager}
>{t('tools.auth.unauthorized')}</Button>
)}
2024-10-13 10:49:55 +08:00
</div>
<div className='flex flex-col gap-2'>
2024-11-02 14:48:55 +08:00
{data.map(tool => (
<ToolItem
key={`${currentPluginDetail.plugin_id}${tool.name}`}
disabled={false}
collection={providerDeclaration}
tool={tool}
isBuiltIn={true}
isModel={false}
/>
))}
2024-10-12 17:08:45 +08:00
</div>
2024-11-02 14:48:55 +08:00
{showSettingAuth && (
<ConfigCredential
collection={providerDeclaration}
onCancel={() => setShowSettingAuth(false)}
onSaved={async (value) => {
await updateBuiltInToolCredential(providerDeclaration.name, value)
Toast.notify({
type: 'success',
message: t('common.api.actionSuccess'),
})
handleCredentialSettingUpdate()
setShowSettingAuth(false)
}}
onRemove={async () => {
await removeBuiltInToolCredential(providerDeclaration.name)
Toast.notify({
type: 'success',
message: t('common.api.actionSuccess'),
})
handleCredentialSettingUpdate()
setShowSettingAuth(false)
}}
/>
)}
2024-10-12 16:29:46 +08:00
</div>
)
}
export default ActionList