|
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 |
|
|