| 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])
- }
|