Spaces:
Paused
Paused
import { useCallback, useMemo } from 'react' | |
import produce from 'immer' | |
import { useStoreApi } from 'reactflow' | |
import type { ValueSelector, Var } from '../../types' | |
import { VarType } from '../../types' | |
import { type DocExtractorNodeType } from './types' | |
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud' | |
import { | |
useIsChatMode, | |
useNodesReadOnly, | |
useWorkflow, | |
useWorkflowVariables, | |
} from '@/app/components/workflow/hooks' | |
const useConfig = (id: string, payload: DocExtractorNodeType) => { | |
const { nodesReadOnly: readOnly } = useNodesReadOnly() | |
const { inputs, setInputs } = useNodeCrud<DocExtractorNodeType>(id, payload) | |
const filterVar = useCallback((varPayload: Var) => { | |
return varPayload.type === VarType.file || varPayload.type === VarType.arrayFile | |
}, []) | |
const isChatMode = useIsChatMode() | |
const store = useStoreApi() | |
const { getBeforeNodesInSameBranch } = useWorkflow() | |
const { | |
getNodes, | |
} = store.getState() | |
const currentNode = getNodes().find(n => n.id === id) | |
const isInIteration = payload.isInIteration | |
const iterationNode = isInIteration ? getNodes().find(n => n.id === currentNode!.parentId) : null | |
const availableNodes = useMemo(() => { | |
return getBeforeNodesInSameBranch(id) | |
}, [getBeforeNodesInSameBranch, id]) | |
const { getCurrentVariableType } = useWorkflowVariables() | |
const getType = useCallback((variable?: ValueSelector) => { | |
const varType = getCurrentVariableType({ | |
parentNode: iterationNode, | |
valueSelector: variable || [], | |
availableNodes, | |
isChatMode, | |
isConstant: false, | |
}) | |
return varType | |
}, [getCurrentVariableType, availableNodes, isChatMode, iterationNode]) | |
const handleVarChanges = useCallback((variable: ValueSelector | string) => { | |
const newInputs = produce(inputs, (draft) => { | |
draft.variable_selector = variable as ValueSelector | |
draft.is_array_file = getType(draft.variable_selector) === VarType.arrayFile | |
}) | |
setInputs(newInputs) | |
}, [getType, inputs, setInputs]) | |
return { | |
readOnly, | |
inputs, | |
filterVar, | |
handleVarChanges, | |
} | |
} | |
export default useConfig | |