| 
									
										
										
										
											2025-04-25 11:32:17 +08:00
										 |  |  | import { useMemo } from 'react' | 
					
						
							|  |  |  | import { useTranslation } from 'react-i18next' | 
					
						
							|  |  |  | import { useGetLanguage } from '@/context/i18n' | 
					
						
							| 
									
										
										
										
											2025-04-25 17:24:47 +08:00
										 |  |  | import knowledgeBaseDefault from '@/app/components/workflow/nodes/knowledge-base/default' | 
					
						
							| 
									
										
										
										
											2025-04-29 16:11:54 +08:00
										 |  |  | import dataSourceDefault from '@/app/components/workflow/nodes/data-source/default' | 
					
						
							| 
									
										
										
										
											2025-04-25 11:32:17 +08:00
										 |  |  | import { WORKFLOW_COMMON_NODES } from '@/app/components/workflow/constants/node' | 
					
						
							|  |  |  | import type { AvailableNodesMetaData } from '@/app/components/workflow/hooks-store/store' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const useAvailableNodesMetaData = () => { | 
					
						
							|  |  |  |   const { t } = useTranslation() | 
					
						
							|  |  |  |   const language = useGetLanguage() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const mergedNodesMetaData = useMemo(() => [ | 
					
						
							|  |  |  |     ...WORKFLOW_COMMON_NODES, | 
					
						
							| 
									
										
										
										
											2025-04-25 17:24:47 +08:00
										 |  |  |     knowledgeBaseDefault, | 
					
						
							| 
									
										
										
										
											2025-04-29 16:11:54 +08:00
										 |  |  |     dataSourceDefault, | 
					
						
							| 
									
										
										
										
											2025-04-25 11:32:17 +08:00
										 |  |  |   ], []) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const prefixLink = useMemo(() => { | 
					
						
							|  |  |  |     if (language === 'zh_Hans') | 
					
						
							|  |  |  |       return 'https://docs.dify.ai/zh-hans/guides/workflow/node/' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return 'https://docs.dify.ai/guides/workflow/node/' | 
					
						
							|  |  |  |   }, [language]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const availableNodesMetaData = useMemo(() => mergedNodesMetaData.map((node) => { | 
					
						
							| 
									
										
										
										
											2025-04-29 16:11:54 +08:00
										 |  |  |     const { metaData } = node | 
					
						
							|  |  |  |     const title = t(`workflow.blocks.${metaData.type}`) | 
					
						
							|  |  |  |     const description = t(`workflow.blocksAbout.${metaData.type}`) | 
					
						
							| 
									
										
										
										
											2025-04-25 11:32:17 +08:00
										 |  |  |     return { | 
					
						
							|  |  |  |       ...node, | 
					
						
							| 
									
										
										
										
											2025-04-29 16:11:54 +08:00
										 |  |  |       metaData: { | 
					
						
							|  |  |  |         ...metaData, | 
					
						
							|  |  |  |         title, | 
					
						
							|  |  |  |         description, | 
					
						
							|  |  |  |         helpLinkUri: `${prefixLink}${metaData.helpLinkUri}`, | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2025-04-25 11:32:17 +08:00
										 |  |  |       defaultValue: { | 
					
						
							|  |  |  |         ...node.defaultValue, | 
					
						
							| 
									
										
										
										
											2025-04-29 16:11:54 +08:00
										 |  |  |         type: metaData.type, | 
					
						
							|  |  |  |         title, | 
					
						
							| 
									
										
										
										
											2025-04-25 11:32:17 +08:00
										 |  |  |       }, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }), [mergedNodesMetaData, t, prefixLink]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const availableNodesMetaDataMap = useMemo(() => availableNodesMetaData.reduce((acc, node) => { | 
					
						
							| 
									
										
										
										
											2025-04-29 16:11:54 +08:00
										 |  |  |     acc![node.metaData.type] = node | 
					
						
							| 
									
										
										
										
											2025-04-25 11:32:17 +08:00
										 |  |  |     return acc | 
					
						
							|  |  |  |   }, {} as AvailableNodesMetaData['nodesMap']), [availableNodesMetaData]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return useMemo(() => { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       nodes: availableNodesMetaData, | 
					
						
							|  |  |  |       nodesMap: availableNodesMetaDataMap, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }, [availableNodesMetaData, availableNodesMetaDataMap]) | 
					
						
							|  |  |  | } |