您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

use-available-nodes-meta-data.ts 2.4KB

5 个月前
5 个月前
5 个月前
5 个月前
5 个月前
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { useMemo } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { useGetLanguage } from '@/context/i18n'
  4. import knowledgeBaseDefault from '@/app/components/workflow/nodes/knowledge-base/default'
  5. import dataSourceDefault from '@/app/components/workflow/nodes/data-source/default'
  6. import dataSourceEmptyDefault from '@/app/components/workflow/nodes/data-source-empty/default'
  7. import { WORKFLOW_COMMON_NODES } from '@/app/components/workflow/constants/node'
  8. import type { AvailableNodesMetaData } from '@/app/components/workflow/hooks-store/store'
  9. export const useAvailableNodesMetaData = () => {
  10. const { t } = useTranslation()
  11. const language = useGetLanguage()
  12. const mergedNodesMetaData = useMemo(() => [
  13. ...WORKFLOW_COMMON_NODES,
  14. {
  15. ...dataSourceDefault,
  16. defaultValue: {
  17. ...dataSourceDefault.defaultValue,
  18. _dataSourceStartToAdd: true,
  19. },
  20. metaData: {
  21. ...dataSourceDefault.metaData,
  22. isStart: true,
  23. isRequired: true,
  24. },
  25. },
  26. {
  27. ...knowledgeBaseDefault,
  28. metaData: {
  29. ...knowledgeBaseDefault.metaData,
  30. isRequired: true,
  31. },
  32. },
  33. {
  34. ...dataSourceEmptyDefault,
  35. metaData: {
  36. ...dataSourceEmptyDefault.metaData,
  37. isUndeletable: true,
  38. },
  39. },
  40. ], [])
  41. const prefixLink = useMemo(() => {
  42. if (language === 'zh_Hans')
  43. return 'https://docs.dify.ai/zh-hans/guides/workflow/node/'
  44. return 'https://docs.dify.ai/guides/workflow/node/'
  45. }, [language])
  46. const availableNodesMetaData = useMemo(() => mergedNodesMetaData.map((node) => {
  47. const { metaData } = node
  48. const title = t(`workflow.blocks.${metaData.type}`)
  49. const description = t(`workflow.blocksAbout.${metaData.type}`)
  50. return {
  51. ...node,
  52. metaData: {
  53. ...metaData,
  54. title,
  55. description,
  56. helpLinkUri: `${prefixLink}${metaData.helpLinkUri}`,
  57. },
  58. defaultValue: {
  59. ...node.defaultValue,
  60. type: metaData.type,
  61. title,
  62. },
  63. }
  64. }), [mergedNodesMetaData, t, prefixLink])
  65. const availableNodesMetaDataMap = useMemo(() => availableNodesMetaData.reduce((acc, node) => {
  66. acc![node.metaData.type] = node
  67. return acc
  68. }, {} as AvailableNodesMetaData['nodesMap']), [availableNodesMetaData])
  69. return useMemo(() => {
  70. return {
  71. nodes: availableNodesMetaData,
  72. nodesMap: availableNodesMetaDataMap,
  73. }
  74. }, [availableNodesMetaData, availableNodesMetaDataMap])
  75. }