| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- import { useMemo } from 'react'
 
- import { useTranslation } from 'react-i18next'
 
- import produce from 'immer'
 
- import { BlockEnum } from '../types'
 
- import {
 
-   NODES_EXTRA_DATA,
 
-   NODES_INITIAL_DATA,
 
- } from '../constants'
 
- import { useIsChatMode } from './use-workflow'
 
- export const useNodesInitialData = () => {
 
-   const { t } = useTranslation()
 
-   return useMemo(() => produce(NODES_INITIAL_DATA, (draft) => {
 
-     Object.keys(draft).forEach((key) => {
 
-       draft[key as BlockEnum].title = t(`workflow.blocks.${key}`)
 
-     })
 
-   }), [t])
 
- }
 
- export const useNodesExtraData = () => {
 
-   const { t } = useTranslation()
 
-   const isChatMode = useIsChatMode()
 
-   return useMemo(() => produce(NODES_EXTRA_DATA, (draft) => {
 
-     Object.keys(draft).forEach((key) => {
 
-       draft[key as BlockEnum].about = t(`workflow.blocksAbout.${key}`)
 
-       draft[key as BlockEnum].availablePrevNodes = draft[key as BlockEnum].getAvailablePrevNodes(isChatMode)
 
-       draft[key as BlockEnum].availableNextNodes = draft[key as BlockEnum].getAvailableNextNodes(isChatMode)
 
-     })
 
-   }), [t, isChatMode])
 
- }
 
- export const useAvailableBlocks = (nodeType?: BlockEnum, isInIteration?: boolean) => {
 
-   const nodesExtraData = useNodesExtraData()
 
-   const availablePrevBlocks = useMemo(() => {
 
-     if (!nodeType)
 
-       return []
 
-     return nodesExtraData[nodeType].availablePrevNodes || []
 
-   }, [nodeType, nodesExtraData])
 
-   const availableNextBlocks = useMemo(() => {
 
-     if (!nodeType)
 
-       return []
 
-     return nodesExtraData[nodeType].availableNextNodes || []
 
-   }, [nodeType, nodesExtraData])
 
-   return useMemo(() => {
 
-     return {
 
-       availablePrevBlocks: availablePrevBlocks.filter((nType) => {
 
-         if (isInIteration && (nType === BlockEnum.Iteration || nType === BlockEnum.End))
 
-           return false
 
-         return true
 
-       }),
 
-       availableNextBlocks: availableNextBlocks.filter((nType) => {
 
-         if (isInIteration && (nType === BlockEnum.Iteration || nType === BlockEnum.End))
 
-           return false
 
-         return true
 
-       }),
 
-     }
 
-   }, [isInIteration, availablePrevBlocks, availableNextBlocks])
 
- }
 
 
  |