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.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. import { BlockEnum } from '@/app/components/workflow/types'
  10. export const useAvailableNodesMetaData = () => {
  11. const { t } = useTranslation()
  12. const language = useGetLanguage()
  13. const mergedNodesMetaData = useMemo(() => [
  14. ...WORKFLOW_COMMON_NODES,
  15. {
  16. ...dataSourceDefault,
  17. defaultValue: {
  18. ...dataSourceDefault.defaultValue,
  19. _dataSourceStartToAdd: true,
  20. },
  21. },
  22. knowledgeBaseDefault,
  23. dataSourceEmptyDefault,
  24. ], [])
  25. const helpLinkUri = useMemo(() => {
  26. if (language === 'zh_Hans')
  27. return 'https://docs.dify.ai/zh-hans/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration#%E6%AD%A5%E9%AA%A4%E4%B8%80%EF%BC%9A%E6%95%B0%E6%8D%AE%E6%BA%90%E9%85%8D%E7%BD%AE'
  28. if (language === 'ja_JP')
  29. return 'https://docs.dify.ai/ja-jp/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration#%E3%82%B9%E3%83%86%E3%83%83%E3%83%971%EF%BC%9A%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E8%A8%AD%E5%AE%9A'
  30. return 'https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration#step-1%3A-data-source'
  31. }, [language])
  32. const availableNodesMetaData = useMemo(() => mergedNodesMetaData.map((node) => {
  33. const { metaData } = node
  34. const title = t(`workflow.blocks.${metaData.type}`)
  35. const description = t(`workflow.blocksAbout.${metaData.type}`)
  36. return {
  37. ...node,
  38. metaData: {
  39. ...metaData,
  40. title,
  41. description,
  42. helpLinkUri,
  43. },
  44. defaultValue: {
  45. ...node.defaultValue,
  46. type: metaData.type,
  47. title,
  48. },
  49. }
  50. }), [mergedNodesMetaData, t])
  51. const availableNodesMetaDataMap = useMemo(() => availableNodesMetaData.reduce((acc, node) => {
  52. acc![node.metaData.type] = node
  53. return acc
  54. }, {} as AvailableNodesMetaData['nodesMap']), [availableNodesMetaData])
  55. return useMemo(() => {
  56. return {
  57. nodes: availableNodesMetaData,
  58. nodesMap: {
  59. ...availableNodesMetaDataMap,
  60. [BlockEnum.VariableAssigner]: availableNodesMetaDataMap?.[BlockEnum.VariableAggregator],
  61. },
  62. }
  63. }, [availableNodesMetaData, availableNodesMetaDataMap])
  64. }