| 
									
										
										
										
											2025-04-24 16:29:58 +08:00
										 |  |  | import { useMemo } from 'react' | 
					
						
							|  |  |  | import type { AvailableNodesMetaData } from '@/app/components/workflow/hooks-store' | 
					
						
							|  |  |  | import { useHooksStore } from '@/app/components/workflow/hooks-store' | 
					
						
							| 
									
										
										
										
											2025-05-27 14:40:25 +08:00
										 |  |  | import { BlockEnum } from '@/app/components/workflow/types' | 
					
						
							|  |  |  | import type { Node } from '@/app/components/workflow/types' | 
					
						
							|  |  |  | import { CollectionType } from '@/app/components/tools/types' | 
					
						
							|  |  |  | import { useStore } from '@/app/components/workflow/store' | 
					
						
							|  |  |  | import { canFindTool } from '@/utils' | 
					
						
							|  |  |  | import { useGetLanguage } from '@/context/i18n' | 
					
						
							| 
									
										
										
										
											2025-04-24 16:29:58 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export const useNodesMetaData = () => { | 
					
						
							|  |  |  |   const availableNodesMetaData = useHooksStore(s => s.availableNodesMetaData) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return useMemo(() => { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       nodes: availableNodesMetaData?.nodes || [], | 
					
						
							|  |  |  |       nodesMap: availableNodesMetaData?.nodesMap || {}, | 
					
						
							|  |  |  |     } as AvailableNodesMetaData | 
					
						
							|  |  |  |   }, [availableNodesMetaData]) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-05-27 14:40:25 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export const useNodeMetaData = (node: Node) => { | 
					
						
							|  |  |  |   const language = useGetLanguage() | 
					
						
							|  |  |  |   const buildInTools = useStore(s => s.buildInTools) | 
					
						
							|  |  |  |   const customTools = useStore(s => s.customTools) | 
					
						
							|  |  |  |   const workflowTools = useStore(s => s.workflowTools) | 
					
						
							|  |  |  |   const dataSourceList = useStore(s => s.dataSourceList) | 
					
						
							|  |  |  |   const availableNodesMetaData = useNodesMetaData() | 
					
						
							|  |  |  |   const { data } = node | 
					
						
							|  |  |  |   const nodeMetaData = availableNodesMetaData.nodesMap?.[data.type] | 
					
						
							|  |  |  |   const author = useMemo(() => { | 
					
						
							|  |  |  |     if (data.type === BlockEnum.DataSource) | 
					
						
							|  |  |  |       return dataSourceList?.find(dataSource => dataSource.id === data.provider_id)?.author | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (data.type === BlockEnum.Tool) { | 
					
						
							|  |  |  |       if (data.provider_type === CollectionType.builtIn) | 
					
						
							|  |  |  |         return buildInTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.author | 
					
						
							|  |  |  |       if (data.provider_type === CollectionType.workflow) | 
					
						
							|  |  |  |         return workflowTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.author | 
					
						
							|  |  |  |       return customTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.author | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return nodeMetaData?.metaData.author | 
					
						
							|  |  |  |   }, [data, buildInTools, customTools, workflowTools, nodeMetaData, dataSourceList]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const description = useMemo(() => { | 
					
						
							|  |  |  |     if (data.type === BlockEnum.DataSource) | 
					
						
							|  |  |  |       return dataSourceList?.find(dataSource => dataSource.id === data.provider_id)?.description[language] | 
					
						
							|  |  |  |     if (data.type === BlockEnum.Tool) { | 
					
						
							|  |  |  |       if (data.provider_type === CollectionType.builtIn) | 
					
						
							|  |  |  |         return buildInTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.description[language] | 
					
						
							|  |  |  |       if (data.provider_type === CollectionType.workflow) | 
					
						
							|  |  |  |         return workflowTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.description[language] | 
					
						
							|  |  |  |       return customTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.description[language] | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return nodeMetaData?.metaData.description | 
					
						
							|  |  |  |   }, [data, buildInTools, customTools, workflowTools, nodeMetaData, dataSourceList, language]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return useMemo(() => { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       ...nodeMetaData?.metaData, | 
					
						
							|  |  |  |       author, | 
					
						
							|  |  |  |       description, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }, [author, nodeMetaData, description]) | 
					
						
							|  |  |  | } |