You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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

6 months ago
6 months ago
6 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. isUndeletable: true,
  32. },
  33. },
  34. {
  35. ...dataSourceEmptyDefault,
  36. metaData: {
  37. ...dataSourceEmptyDefault.metaData,
  38. isUndeletable: true,
  39. },
  40. },
  41. ], [])
  42. const prefixLink = useMemo(() => {
  43. if (language === 'zh_Hans')
  44. return 'https://docs.dify.ai/zh-hans/guides/workflow/node/'
  45. return 'https://docs.dify.ai/guides/workflow/node/'
  46. }, [language])
  47. const availableNodesMetaData = useMemo(() => mergedNodesMetaData.map((node) => {
  48. const { metaData } = node
  49. const title = t(`workflow.blocks.${metaData.type}`)
  50. const description = t(`workflow.blocksAbout.${metaData.type}`)
  51. return {
  52. ...node,
  53. metaData: {
  54. ...metaData,
  55. title,
  56. description,
  57. helpLinkUri: `${prefixLink}${metaData.helpLinkUri}`,
  58. },
  59. defaultValue: {
  60. ...node.defaultValue,
  61. type: metaData.type,
  62. title,
  63. },
  64. }
  65. }), [mergedNodesMetaData, t, prefixLink])
  66. const availableNodesMetaDataMap = useMemo(() => availableNodesMetaData.reduce((acc, node) => {
  67. acc![node.metaData.type] = node
  68. return acc
  69. }, {} as AvailableNodesMetaData['nodesMap']), [availableNodesMetaData])
  70. return useMemo(() => {
  71. return {
  72. nodes: availableNodesMetaData,
  73. nodesMap: availableNodesMetaDataMap,
  74. }
  75. }, [availableNodesMetaData, availableNodesMetaDataMap])
  76. }