Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

use-available-blocks.ts 2.3KB

pirms 6 mēnešiem
pirms 5 mēnešiem
pirms 6 mēnešiem
pirms 6 mēnešiem
pirms 6 mēnešiem
pirms 5 mēnešiem
pirms 6 mēnešiem
pirms 5 mēnešiem
pirms 6 mēnešiem
pirms 5 mēnešiem
pirms 6 mēnešiem
pirms 5 mēnešiem
pirms 6 mēnešiem
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import {
  2. useCallback,
  3. useMemo,
  4. } from 'react'
  5. import { BlockEnum } from '../types'
  6. import { useNodesMetaData } from './use-nodes-meta-data'
  7. const availableBlocksFilter = (nodeType: BlockEnum, inContainer?: boolean) => {
  8. if (inContainer && (nodeType === BlockEnum.Iteration || nodeType === BlockEnum.Loop || nodeType === BlockEnum.End || nodeType === BlockEnum.DataSource || nodeType === BlockEnum.KnowledgeBase))
  9. return false
  10. if (!inContainer && nodeType === BlockEnum.LoopEnd)
  11. return false
  12. return true
  13. }
  14. export const useAvailableBlocks = (nodeType?: BlockEnum, inContainer?: boolean) => {
  15. const {
  16. nodes: availableNodes,
  17. } = useNodesMetaData()
  18. const availableNodesType = useMemo(() => availableNodes.map(node => node.metaData.type), [availableNodes])
  19. const availablePrevBlocks = useMemo(() => {
  20. if (!nodeType || nodeType === BlockEnum.Start || nodeType === BlockEnum.DataSource)
  21. return []
  22. return availableNodesType
  23. }, [availableNodesType, nodeType])
  24. const availableNextBlocks = useMemo(() => {
  25. if (!nodeType || nodeType === BlockEnum.End || nodeType === BlockEnum.LoopEnd || nodeType === BlockEnum.KnowledgeBase)
  26. return []
  27. return availableNodesType
  28. }, [availableNodesType, nodeType])
  29. const getAvailableBlocks = useCallback((nodeType?: BlockEnum, inContainer?: boolean) => {
  30. let availablePrevBlocks = availableNodesType
  31. if (!nodeType || nodeType === BlockEnum.Start || nodeType === BlockEnum.DataSource)
  32. availablePrevBlocks = []
  33. let availableNextBlocks = availableNodesType
  34. if (!nodeType || nodeType === BlockEnum.End || nodeType === BlockEnum.LoopEnd || nodeType === BlockEnum.KnowledgeBase)
  35. availableNextBlocks = []
  36. return {
  37. availablePrevBlocks: availablePrevBlocks.filter(nType => availableBlocksFilter(nType, inContainer)),
  38. availableNextBlocks: availableNextBlocks.filter(nType => availableBlocksFilter(nType, inContainer)),
  39. }
  40. }, [availableNodesType])
  41. return useMemo(() => {
  42. return {
  43. getAvailableBlocks,
  44. availablePrevBlocks: availablePrevBlocks.filter(nType => availableBlocksFilter(nType, inContainer)),
  45. availableNextBlocks: availableNextBlocks.filter(nType => availableBlocksFilter(nType, inContainer)),
  46. }
  47. }, [getAvailableBlocks, availablePrevBlocks, availableNextBlocks, inContainer])
  48. }