2025-09-18 12:49:10 +08:00
|
|
|
import {
|
|
|
|
|
useCallback,
|
|
|
|
|
useMemo,
|
|
|
|
|
} from 'react'
|
|
|
|
|
import type {
|
|
|
|
|
Node,
|
|
|
|
|
} from '../types'
|
|
|
|
|
import {
|
|
|
|
|
BlockEnum,
|
|
|
|
|
} from '../types'
|
|
|
|
|
import {
|
|
|
|
|
useStore,
|
|
|
|
|
useWorkflowStore,
|
|
|
|
|
} from '../store'
|
|
|
|
|
import { CollectionType } from '@/app/components/tools/types'
|
|
|
|
|
import { canFindTool } from '@/utils'
|
2025-10-28 10:22:16 +08:00
|
|
|
import {
|
|
|
|
|
useAllBuiltInTools,
|
|
|
|
|
useAllCustomTools,
|
|
|
|
|
useAllMCPTools,
|
|
|
|
|
useAllWorkflowTools,
|
|
|
|
|
} from '@/service/use-tools'
|
2025-09-18 12:49:10 +08:00
|
|
|
|
|
|
|
|
export const useToolIcon = (data?: Node['data']) => {
|
2025-10-28 10:22:16 +08:00
|
|
|
const { data: buildInTools } = useAllBuiltInTools()
|
|
|
|
|
const { data: customTools } = useAllCustomTools()
|
|
|
|
|
const { data: workflowTools } = useAllWorkflowTools()
|
|
|
|
|
const { data: mcpTools } = useAllMCPTools()
|
2025-09-18 12:49:10 +08:00
|
|
|
const dataSourceList = useStore(s => s.dataSourceList)
|
|
|
|
|
// const a = useStore(s => s.data)
|
|
|
|
|
const toolIcon = useMemo(() => {
|
|
|
|
|
if (!data)
|
|
|
|
|
return ''
|
|
|
|
|
if (data.type === BlockEnum.Tool) {
|
|
|
|
|
// eslint-disable-next-line sonarjs/no-dead-store
|
2025-10-28 10:22:16 +08:00
|
|
|
let targetTools = buildInTools || []
|
2025-09-18 12:49:10 +08:00
|
|
|
if (data.provider_type === CollectionType.builtIn)
|
2025-10-28 10:22:16 +08:00
|
|
|
targetTools = buildInTools || []
|
2025-09-18 12:49:10 +08:00
|
|
|
else if (data.provider_type === CollectionType.custom)
|
2025-10-28 10:22:16 +08:00
|
|
|
targetTools = customTools || []
|
2025-09-18 12:49:10 +08:00
|
|
|
else if (data.provider_type === CollectionType.mcp)
|
2025-10-28 10:22:16 +08:00
|
|
|
targetTools = mcpTools || []
|
2025-09-18 12:49:10 +08:00
|
|
|
else
|
2025-10-28 10:22:16 +08:00
|
|
|
targetTools = workflowTools || []
|
2025-09-18 12:49:10 +08:00
|
|
|
return targetTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.icon
|
|
|
|
|
}
|
|
|
|
|
if (data.type === BlockEnum.DataSource)
|
|
|
|
|
return dataSourceList?.find(toolWithProvider => toolWithProvider.plugin_id === data.plugin_id)?.icon
|
|
|
|
|
}, [data, dataSourceList, buildInTools, customTools, mcpTools, workflowTools])
|
|
|
|
|
|
|
|
|
|
return toolIcon
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const useGetToolIcon = () => {
|
2025-10-28 10:22:16 +08:00
|
|
|
const { data: buildInTools } = useAllBuiltInTools()
|
|
|
|
|
const { data: customTools } = useAllCustomTools()
|
|
|
|
|
const { data: workflowTools } = useAllWorkflowTools()
|
2025-09-18 12:49:10 +08:00
|
|
|
const workflowStore = useWorkflowStore()
|
|
|
|
|
const getToolIcon = useCallback((data: Node['data']) => {
|
|
|
|
|
const {
|
|
|
|
|
dataSourceList,
|
|
|
|
|
} = workflowStore.getState()
|
|
|
|
|
|
|
|
|
|
if (data.type === BlockEnum.Tool) {
|
|
|
|
|
// eslint-disable-next-line sonarjs/no-dead-store
|
2025-10-28 10:22:16 +08:00
|
|
|
let targetTools = buildInTools || []
|
2025-09-18 12:49:10 +08:00
|
|
|
if (data.provider_type === CollectionType.builtIn)
|
2025-10-28 10:22:16 +08:00
|
|
|
targetTools = buildInTools || []
|
2025-09-18 12:49:10 +08:00
|
|
|
else if (data.provider_type === CollectionType.custom)
|
2025-10-28 10:22:16 +08:00
|
|
|
targetTools = customTools || []
|
2025-09-18 12:49:10 +08:00
|
|
|
else
|
2025-10-28 10:22:16 +08:00
|
|
|
targetTools = workflowTools || []
|
2025-09-18 12:49:10 +08:00
|
|
|
return targetTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.icon
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (data.type === BlockEnum.DataSource)
|
|
|
|
|
return dataSourceList?.find(toolWithProvider => toolWithProvider.plugin_id === data.plugin_id)?.icon
|
|
|
|
|
}, [workflowStore])
|
|
|
|
|
|
|
|
|
|
return getToolIcon
|
|
|
|
|
}
|