|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import { useMemo } from 'react'
- import { useTranslation } from 'react-i18next'
- import { useGetLanguage } from '@/context/i18n'
- import knowledgeBaseDefault from '@/app/components/workflow/nodes/knowledge-base/default'
- import dataSourceDefault from '@/app/components/workflow/nodes/data-source/default'
- import dataSourceEmptyDefault from '@/app/components/workflow/nodes/data-source-empty/default'
- 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,
- {
- ...dataSourceDefault,
- defaultValue: {
- ...dataSourceDefault.defaultValue,
- _dataSourceStartToAdd: true,
- },
- metaData: {
- ...dataSourceDefault.metaData,
- isStart: true,
- isRequired: true,
- },
- },
- {
- ...knowledgeBaseDefault,
- metaData: {
- ...knowledgeBaseDefault.metaData,
- isRequired: true,
- },
- },
- {
- ...dataSourceEmptyDefault,
- metaData: {
- ...dataSourceEmptyDefault.metaData,
- isUndeletable: true,
- },
- },
- ], [])
-
- 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])
- }
|