useQuery in action list

pull/12372/head
JzoNg 2 years ago
parent 59a9235041
commit 1e62768eed

@ -1,5 +1,4 @@
import React, { useState } from 'react' import React, { useState } from 'react'
import useSWR from 'swr'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { usePluginPageContext } from '@/app/components/plugins/plugin-page/context' import { usePluginPageContext } from '@/app/components/plugins/plugin-page/context'
import { useAppContext } from '@/context/app-context' import { useAppContext } from '@/context/app-context'
@ -9,28 +8,39 @@ import Indicator from '@/app/components/header/indicator'
import ToolItem from '@/app/components/tools/provider/tool-item' import ToolItem from '@/app/components/tools/provider/tool-item'
import ConfigCredential from '@/app/components/tools/setting/build-in/config-credentials' import ConfigCredential from '@/app/components/tools/setting/build-in/config-credentials'
import { import {
fetchBuiltInToolList, useBuiltinProviderInfo,
fetchCollectionDetail, useBuiltinTools,
removeBuiltInToolCredential, useInvalidateBuiltinProviderInfo,
updateBuiltInToolCredential, useRemoveProviderCredentials,
} from '@/service/tools' useUpdateProviderCredentials,
} from '@/service/use-tools'
const ActionList = () => { const ActionList = () => {
const { t } = useTranslation() const { t } = useTranslation()
const { isCurrentWorkspaceManager } = useAppContext() const { isCurrentWorkspaceManager } = useAppContext()
const currentPluginDetail = usePluginPageContext(v => v.currentPluginDetail) const currentPluginDetail = usePluginPageContext(v => v.currentPluginDetail)
const { data: provider } = useSWR( const { data: provider } = useBuiltinProviderInfo(`${currentPluginDetail.plugin_id}/${currentPluginDetail.name}`)
`builtin/${currentPluginDetail.plugin_id}/${currentPluginDetail.name}`, const invalidateProviderInfo = useInvalidateBuiltinProviderInfo()
fetchCollectionDetail, const { data } = useBuiltinTools(`${currentPluginDetail.plugin_id}/${currentPluginDetail.name}`)
)
const { data } = useSWR(
`${currentPluginDetail.plugin_id}/${currentPluginDetail.name}`,
fetchBuiltInToolList,
)
const [showSettingAuth, setShowSettingAuth] = useState(false) const [showSettingAuth, setShowSettingAuth] = useState(false)
const handleCredentialSettingUpdate = () => {} const handleCredentialSettingUpdate = () => {
invalidateProviderInfo(`${currentPluginDetail.plugin_id}/${currentPluginDetail.name}`)
Toast.notify({
type: 'success',
message: t('common.api.actionSuccess'),
})
setShowSettingAuth(false)
}
const { mutate: updatePermission } = useUpdateProviderCredentials({
onSuccess: handleCredentialSettingUpdate,
})
const { mutate: removePermission } = useRemoveProviderCredentials({
onSuccess: handleCredentialSettingUpdate,
})
if (!data || !provider) if (!data || !provider)
return null return null
@ -77,24 +87,11 @@ const ActionList = () => {
<ConfigCredential <ConfigCredential
collection={provider} collection={provider}
onCancel={() => setShowSettingAuth(false)} onCancel={() => setShowSettingAuth(false)}
onSaved={async (value) => { onSaved={async value => updatePermission({
await updateBuiltInToolCredential(provider.name, value) providerName: provider.name,
Toast.notify({ credentials: value,
type: 'success', })}
message: t('common.api.actionSuccess'), onRemove={async () => removePermission(provider.name)}
})
handleCredentialSettingUpdate()
setShowSettingAuth(false)
}}
onRemove={async () => {
await removeBuiltInToolCredential(provider.name)
Toast.notify({
type: 'success',
message: t('common.api.actionSuccess'),
})
handleCredentialSettingUpdate()
setShowSettingAuth(false)
}}
/> />
)} )}
</div> </div>

@ -1,14 +1,13 @@
import { get } from './base' import { get, post } from './base'
import type { import type {
Collection,
Tool, Tool,
} from '@/app/components/tools/types' } from '@/app/components/tools/types'
import type { ToolWithProvider } from '@/app/components/workflow/types' import type { ToolWithProvider } from '@/app/components/workflow/types'
import { import {
useQueryClient, useMutation,
} from '@tanstack/react-query'
import {
useQuery, useQuery,
useQueryClient,
} from '@tanstack/react-query' } from '@tanstack/react-query'
const NAME_SPACE = 'tools' const NAME_SPACE = 'tools'
@ -45,9 +44,59 @@ export const useAllWorkflowTools = () => {
}) })
} }
export const useBuiltInTools = (collectionName: string) => { export const useBuiltinProviderInfo = (providerName: string) => {
return useQuery({
queryKey: [NAME_SPACE, 'builtin-provider-info', providerName],
queryFn: () => get<Collection>(`/workspaces/current/tool-provider/builtin/${providerName}/info`),
})
}
export const useInvalidateBuiltinProviderInfo = () => {
const queryClient = useQueryClient()
return (providerName: string) => {
queryClient.invalidateQueries(
{
queryKey: [NAME_SPACE, 'builtin-provider-info', providerName],
})
}
}
export const useBuiltinTools = (providerName: string) => {
return useQuery({ return useQuery({
queryKey: [NAME_SPACE, 'builtIn', collectionName], queryKey: [NAME_SPACE, 'builtin-provider-tools', providerName],
queryFn: () => get<Tool[]>(`/workspaces/current/tool-provider/builtin/${collectionName}/tools`), queryFn: () => get<Tool[]>(`/workspaces/current/tool-provider/builtin/${providerName}/tools`),
})
}
export const useUpdateProviderCredentials = ({
onSuccess,
}: {
onSuccess?: () => void
}) => {
return useMutation({
mutationFn: (payload: { providerName: string, credentials: Record<string, any> }) => {
const { providerName, credentials } = payload
return post(`/workspaces/current/tool-provider/builtin/${providerName}/update`, {
body: {
credentials,
},
})
},
onSuccess,
})
}
export const useRemoveProviderCredentials = ({
onSuccess,
}: {
onSuccess?: () => void
}) => {
return useMutation({
mutationFn: (providerName: string) => {
return post(`/workspaces/current/tool-provider/builtin/${providerName}/delete`, {
body: {},
})
},
onSuccess,
}) })
} }

Loading…
Cancel
Save