123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { useCallback, useEffect, useState } from 'react'
- import produce from 'immer'
- import useVarList from './components/var-list/use-var-list'
- import type { VariableAssignerNodeType } from './types'
- import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
- import type { ValueSelector, Var } from '@/app/components/workflow/types'
- import { BlockEnum, VarType } from '@/app/components/workflow/types'
- import {
- useNodesReadOnly,
- useWorkflow,
- } from '@/app/components/workflow/hooks'
- const useConfig = (id: string, payload: VariableAssignerNodeType) => {
- const { nodesReadOnly: readOnly } = useNodesReadOnly()
- const { inputs, setInputs } = useNodeCrud<VariableAssignerNodeType>(id, payload)
- const { getBeforeNodeById } = useWorkflow()
- const beforeNodes = getBeforeNodeById(id)
- useEffect(() => {
- if (beforeNodes.length !== 1 || inputs.variables.length > 0)
- return
- const beforeNode = beforeNodes[0]
- if (beforeNode.data.type === BlockEnum.KnowledgeRetrieval) {
- const newInputs = produce(inputs, (draft: VariableAssignerNodeType) => {
- draft.output_type = VarType.array
- draft.variables[0] = [beforeNode.id, 'result']
- })
- setInputs(newInputs)
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [beforeNodes, inputs.variables])
- const handleOutputTypeChange = useCallback((outputType: string) => {
- const newInputs = produce(inputs, (draft: VariableAssignerNodeType) => {
- draft.output_type = outputType as VarType
- })
- setInputs(newInputs)
- }, [inputs, setInputs])
- const { handleVarListChange, handleAddVariable } = useVarList({
- id,
- inputs,
- setInputs,
- })
- const { variables } = inputs
- const [currVarIndex, setCurrVarIndex] = useState(-1)
- const currVar = variables[currVarIndex]
- const handleOnVarOpen = useCallback((index: number) => {
- setCurrVarIndex(index)
- }, [])
- const filterVar = useCallback((varPayload: Var, valueSelector: ValueSelector) => {
- const type = varPayload.type
- if ((inputs.output_type !== VarType.array && type !== inputs.output_type) || (
- inputs.output_type === VarType.array && ![VarType.array, VarType.arrayString, VarType.arrayNumber, VarType.arrayObject].includes(type)
- ))
- return false
- // can not choose the same node
- if (!currVar)
- return true
- const selectNodeId = valueSelector[0]
- if (selectNodeId !== currVar[0] && variables.find(v => v[0] === selectNodeId))
- return false
- return true
- }, [currVar, inputs.output_type, variables])
- return {
- readOnly,
- inputs,
- handleOutputTypeChange,
- handleVarListChange,
- handleAddVariable,
- handleOnVarOpen,
- filterVar,
- }
- }
- export default useConfig
|