Spaces:
Build error
Build error
import { useCallback, useState } from 'react' | |
import produce from 'immer' | |
import { useBoolean } from 'ahooks' | |
import type { StartNodeType } from './types' | |
import { ChangeType } from '@/app/components/workflow/types' | |
import type { InputVar, MoreInfo, ValueSelector } from '@/app/components/workflow/types' | |
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud' | |
import { | |
useIsChatMode, | |
useNodesReadOnly, | |
useWorkflow, | |
} from '@/app/components/workflow/hooks' | |
const useConfig = (id: string, payload: StartNodeType) => { | |
const { nodesReadOnly: readOnly } = useNodesReadOnly() | |
const { handleOutVarRenameChange, isVarUsedInNodes, removeUsedVarInNodes } = useWorkflow() | |
const isChatMode = useIsChatMode() | |
const { inputs, setInputs } = useNodeCrud<StartNodeType>(id, payload) | |
const [isShowAddVarModal, { | |
setTrue: showAddVarModal, | |
setFalse: hideAddVarModal, | |
}] = useBoolean(false) | |
const [isShowRemoveVarConfirm, { | |
setTrue: showRemoveVarConfirm, | |
setFalse: hideRemoveVarConfirm, | |
}] = useBoolean(false) | |
const [removedVar, setRemovedVar] = useState<ValueSelector>([]) | |
const [removedIndex, setRemoveIndex] = useState(0) | |
const handleVarListChange = useCallback((newList: InputVar[], moreInfo?: { index: number; payload: MoreInfo }) => { | |
if (moreInfo?.payload?.type === ChangeType.remove) { | |
if (isVarUsedInNodes([id, moreInfo?.payload?.payload?.beforeKey || ''])) { | |
showRemoveVarConfirm() | |
setRemovedVar([id, moreInfo?.payload?.payload?.beforeKey || '']) | |
setRemoveIndex(moreInfo?.index as number) | |
return | |
} | |
} | |
const newInputs = produce(inputs, (draft: any) => { | |
draft.variables = newList | |
}) | |
setInputs(newInputs) | |
if (moreInfo?.payload?.type === ChangeType.changeVarName) { | |
const changedVar = newList[moreInfo.index] | |
handleOutVarRenameChange(id, [id, inputs.variables[moreInfo.index].variable], [id, changedVar.variable]) | |
} | |
}, [handleOutVarRenameChange, id, inputs, isVarUsedInNodes, setInputs, showRemoveVarConfirm]) | |
const removeVarInNode = useCallback(() => { | |
const newInputs = produce(inputs, (draft) => { | |
draft.variables.splice(removedIndex, 1) | |
}) | |
setInputs(newInputs) | |
removeUsedVarInNodes(removedVar) | |
hideRemoveVarConfirm() | |
}, [hideRemoveVarConfirm, inputs, removeUsedVarInNodes, removedIndex, removedVar, setInputs]) | |
const handleAddVariable = useCallback((payload: InputVar) => { | |
const newInputs = produce(inputs, (draft: StartNodeType) => { | |
draft.variables.push(payload) | |
}) | |
setInputs(newInputs) | |
}, [inputs, setInputs]) | |
return { | |
readOnly, | |
isChatMode, | |
inputs, | |
isShowAddVarModal, | |
showAddVarModal, | |
hideAddVarModal, | |
handleVarListChange, | |
handleAddVariable, | |
isShowRemoveVarConfirm, | |
hideRemoveVarConfirm, | |
onRemoveVarConfirm: removeVarInNode, | |
} | |
} | |
export default useConfig | |