1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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])
- }
|