| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 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>([]) | 
					
						
							| 
									
										
										
										
											2024-04-16 12:00:45 +08:00
										 |  |  |   const [removedIndex, setRemoveIndex] = useState(0) | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |   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 || '']) | 
					
						
							| 
									
										
										
										
											2024-04-16 12:00:45 +08:00
										 |  |  |         setRemoveIndex(moreInfo?.index as number) | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |         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(() => { | 
					
						
							| 
									
										
										
										
											2024-04-16 12:00:45 +08:00
										 |  |  |     const newInputs = produce(inputs, (draft) => { | 
					
						
							|  |  |  |       draft.variables.splice(removedIndex, 1) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     setInputs(newInputs) | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |     removeUsedVarInNodes(removedVar) | 
					
						
							|  |  |  |     hideRemoveVarConfirm() | 
					
						
							| 
									
										
										
										
											2024-04-16 12:00:45 +08:00
										 |  |  |   }, [hideRemoveVarConfirm, inputs, removeUsedVarInNodes, removedIndex, removedVar, setInputs]) | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   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 |