|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import {
- useCallback,
- useMemo,
- } from 'react'
- import { BlockEnum } from '../types'
- import { useNodesMetaData } from './use-nodes-meta-data'
-
- const availableBlocksFilter = (nodeType: BlockEnum, inContainer?: boolean) => {
- if (inContainer && (nodeType === BlockEnum.Iteration || nodeType === BlockEnum.Loop || nodeType === BlockEnum.End || nodeType === BlockEnum.DataSource || nodeType === BlockEnum.KnowledgeBase))
- return false
-
- if (!inContainer && nodeType === BlockEnum.LoopEnd)
- return false
-
- return true
- }
-
- export const useAvailableBlocks = (nodeType?: BlockEnum, inContainer?: boolean) => {
- const {
- nodes: availableNodes,
- } = useNodesMetaData()
- const availableNodesType = useMemo(() => availableNodes.map(node => node.metaData.type), [availableNodes])
- const availablePrevBlocks = useMemo(() => {
- if (!nodeType || nodeType === BlockEnum.Start || nodeType === BlockEnum.DataSource)
- return []
-
- return availableNodesType
- }, [availableNodesType, nodeType])
- const availableNextBlocks = useMemo(() => {
- if (!nodeType || nodeType === BlockEnum.End || nodeType === BlockEnum.LoopEnd || nodeType === BlockEnum.KnowledgeBase)
- return []
-
- return availableNodesType
- }, [availableNodesType, nodeType])
-
- const getAvailableBlocks = useCallback((nodeType?: BlockEnum, inContainer?: boolean) => {
- let availablePrevBlocks = availableNodesType
- if (!nodeType || nodeType === BlockEnum.Start || nodeType === BlockEnum.DataSource)
- availablePrevBlocks = []
-
- let availableNextBlocks = availableNodesType
- if (!nodeType || nodeType === BlockEnum.End || nodeType === BlockEnum.LoopEnd || nodeType === BlockEnum.KnowledgeBase)
- availableNextBlocks = []
-
- return {
- availablePrevBlocks: availablePrevBlocks.filter(nType => availableBlocksFilter(nType, inContainer)),
- availableNextBlocks: availableNextBlocks.filter(nType => availableBlocksFilter(nType, inContainer)),
- }
- }, [availableNodesType])
-
- return useMemo(() => {
- return {
- getAvailableBlocks,
- availablePrevBlocks: availablePrevBlocks.filter(nType => availableBlocksFilter(nType, inContainer)),
- availableNextBlocks: availableNextBlocks.filter(nType => availableBlocksFilter(nType, inContainer)),
- }
- }, [getAvailableBlocks, availablePrevBlocks, availableNextBlocks, inContainer])
- }
|