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