| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 
							- import { useMemo } from 'react'
 - import { useTranslation } from 'react-i18next'
 - import { useGetLanguage } from '@/context/i18n'
 - import StartDefault from '@/app/components/workflow/nodes/start/default'
 - import EndDefault from '@/app/components/workflow/nodes/end/default'
 - import AnswerDefault from '@/app/components/workflow/nodes/answer/default'
 - import { WORKFLOW_COMMON_NODES } from '@/app/components/workflow/constants/node'
 - import type { AvailableNodesMetaData } from '@/app/components/workflow/hooks-store/store'
 - import { useIsChatMode } from './use-is-chat-mode'
 - 
 - export const useAvailableNodesMetaData = () => {
 -   const { t } = useTranslation()
 -   const isChatMode = useIsChatMode()
 -   const language = useGetLanguage()
 - 
 -   const mergedNodesMetaData = useMemo(() => [
 -     ...WORKFLOW_COMMON_NODES,
 -     {
 -       ...StartDefault,
 -       metaData: {
 -         ...StartDefault.metaData,
 -         isStart: true,
 -         isRequired: true,
 -         isUndeletable: true,
 -       },
 -     },
 -     ...(
 -       isChatMode
 -         ? [
 -             {
 -               ...AnswerDefault,
 -               metaData: {
 -                 ...AnswerDefault.metaData,
 -                 isRequired: true,
 -               },
 -             },
 -           ]
 -         : [
 -             {
 -               ...EndDefault,
 -               metaData: {
 -                 ...EndDefault.metaData,
 -                 isRequired: true,
 -               },
 -             },
 -           ]
 -     ),
 -   ], [isChatMode])
 - 
 -   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) => {
 -     const { metaData } = node
 -     const title = t(`workflow.blocks.${metaData.type}`)
 -     const description = t(`workflow.blocksAbout.${metaData.type}`)
 -     return {
 -       ...node,
 -       metaData: {
 -         ...metaData,
 -         title,
 -         description,
 -         helpLinkUri: `${prefixLink}${metaData.helpLinkUri}`,
 -       },
 -       defaultValue: {
 -         ...node.defaultValue,
 -         type: metaData.type,
 -         title,
 -       },
 -     }
 -   }), [mergedNodesMetaData, t, prefixLink])
 - 
 -   const availableNodesMetaDataMap = useMemo(() => availableNodesMetaData.reduce((acc, node) => {
 -     acc![node.metaData.type] = node
 -     return acc
 -   }, {} as AvailableNodesMetaData['nodesMap']), [availableNodesMetaData])
 - 
 -   return useMemo(() => {
 -     return {
 -       nodes: availableNodesMetaData,
 -       nodesMap: availableNodesMetaDataMap,
 -     }
 -   }, [availableNodesMetaData, availableNodesMetaDataMap])
 - }
 
 
  |