mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-30 18:33:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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
 | 
