123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import React, { useMemo, useState } from 'react'
- import { useTranslation } from 'react-i18next'
- import { useAppContext } from '@/context/app-context'
- import Button from '@/app/components/base/button'
- import Toast from '@/app/components/base/toast'
- import Indicator from '@/app/components/header/indicator'
- import ToolItem from '@/app/components/tools/provider/tool-item'
- import ConfigCredential from '@/app/components/tools/setting/build-in/config-credentials'
- import {
- useAllToolProviders,
- useBuiltinTools,
- useInvalidateAllToolProviders,
- useRemoveProviderCredentials,
- useUpdateProviderCredentials,
- } from '@/service/use-tools'
- import type { PluginDetail } from '@/app/components/plugins/types'
- type Props = {
- detail: PluginDetail
- }
- const ActionList = ({
- detail,
- }: Props) => {
- const { t } = useTranslation()
- const { isCurrentWorkspaceManager } = useAppContext()
- const providerBriefInfo = detail.declaration.tool.identity
- const providerKey = `${detail.plugin_id}/${providerBriefInfo.name}`
- const { data: collectionList = [] } = useAllToolProviders()
- const invalidateAllToolProviders = useInvalidateAllToolProviders()
- const provider = useMemo(() => {
- return collectionList.find(collection => collection.name === providerKey)
- }, [collectionList, providerKey])
- const { data } = useBuiltinTools(providerKey)
- const [showSettingAuth, setShowSettingAuth] = useState(false)
- const handleCredentialSettingUpdate = () => {
- invalidateAllToolProviders()
- Toast.notify({
- type: 'success',
- message: t('common.api.actionSuccess'),
- })
- setShowSettingAuth(false)
- }
- const { mutate: updatePermission, isPending } = useUpdateProviderCredentials({
- onSuccess: handleCredentialSettingUpdate,
- })
- const { mutate: removePermission } = useRemoveProviderCredentials({
- onSuccess: handleCredentialSettingUpdate,
- })
- if (!data || !provider)
- return null
- return (
- <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'>
- {t('plugin.detailPanel.actionNum', { num: data.length, action: data.length > 1 ? 'actions' : 'action' })}
- {provider.is_team_authorization && provider.allow_delete && (
- <Button
- variant='secondary'
- size='small'
- onClick={() => setShowSettingAuth(true)}
- disabled={!isCurrentWorkspaceManager}
- >
- <Indicator className='mr-2' color={'green'} />
- {t('tools.auth.authorized')}
- </Button>
- )}
- </div>
- {!provider.is_team_authorization && provider.allow_delete && (
- <Button
- variant='primary'
- className='w-full'
- onClick={() => setShowSettingAuth(true)}
- disabled={!isCurrentWorkspaceManager}
- >{t('tools.auth.unauthorized')}</Button>
- )}
- </div>
- <div className='flex flex-col gap-2'>
- {data.map(tool => (
- <ToolItem
- key={`${detail.plugin_id}${tool.name}`}
- disabled={false}
- collection={provider}
- tool={tool}
- isBuiltIn={true}
- isModel={false}
- />
- ))}
- </div>
- {showSettingAuth && (
- <ConfigCredential
- collection={provider}
- onCancel={() => setShowSettingAuth(false)}
- onSaved={async value => updatePermission({
- providerName: provider.name,
- credentials: value,
- })}
- onRemove={async () => removePermission(provider.name)}
- isSaving={isPending}
- />
- )}
- </div>
- )
- }
- export default ActionList
|