mirror of https://github.com/langgenius/dify.git
fix: delete var of webhook (#25038)
This commit is contained in:
parent
ff4a62d1e7
commit
7544b5ec9a
|
|
@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next'
|
|||
import type { HttpMethod, ParameterType, WebhookHeader, WebhookParameter, WebhookTriggerNodeType } from './types'
|
||||
import { getArrayElementType, isArrayType } from './types'
|
||||
|
||||
import { useNodesReadOnly } from '@/app/components/workflow/hooks'
|
||||
import { useNodesReadOnly, useWorkflow } from '@/app/components/workflow/hooks'
|
||||
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
|
||||
import { useStore as useAppStore } from '@/app/components/app/store'
|
||||
import { fetchWebhookUrl } from '@/service/apps'
|
||||
|
|
@ -18,6 +18,7 @@ const useConfig = (id: string, payload: WebhookTriggerNodeType) => {
|
|||
const { nodesReadOnly: readOnly } = useNodesReadOnly()
|
||||
const { inputs, setInputs } = useNodeCrud<WebhookTriggerNodeType>(id, payload)
|
||||
const appId = useAppStore.getState().appDetail?.id
|
||||
const { isVarUsedInNodes, removeUsedVarInNodes } = useWorkflow()
|
||||
|
||||
const handleMethodChange = useCallback((method: HttpMethod) => {
|
||||
setInputs(produce(inputs, (draft) => {
|
||||
|
|
@ -64,6 +65,7 @@ const useConfig = (id: string, payload: WebhookTriggerNodeType) => {
|
|||
const syncVariablesInDraft = useCallback((
|
||||
draft: WebhookTriggerNodeType,
|
||||
newData: (WebhookParameter | WebhookHeader)[],
|
||||
sourceType: 'param' | 'header' | 'body',
|
||||
) => {
|
||||
if (!draft.variables)
|
||||
draft.variables = []
|
||||
|
|
@ -78,6 +80,25 @@ const useConfig = (id: string, payload: WebhookTriggerNodeType) => {
|
|||
return false
|
||||
}
|
||||
|
||||
// Create set of new variable names for this source
|
||||
const newVarNames = new Set(newData.map(item => item.name))
|
||||
|
||||
// Find variables from current source that will be deleted and clean up references
|
||||
draft.variables
|
||||
.filter(v => v.label === sourceType && !newVarNames.has(v.variable))
|
||||
.forEach((v) => {
|
||||
// Clean up references if variable is used in other nodes
|
||||
if (isVarUsedInNodes([id, v.variable]))
|
||||
removeUsedVarInNodes([id, v.variable])
|
||||
})
|
||||
|
||||
// Remove variables that no longer exist in newData for this specific source type
|
||||
draft.variables = draft.variables.filter((v) => {
|
||||
// Keep variables from other sources
|
||||
if (v.label !== sourceType) return true
|
||||
return newVarNames.has(v.variable)
|
||||
})
|
||||
|
||||
// Add or update variables
|
||||
newData.forEach((item) => {
|
||||
const varName = item.name
|
||||
|
|
@ -85,11 +106,11 @@ const useConfig = (id: string, payload: WebhookTriggerNodeType) => {
|
|||
|
||||
const inputVarType = 'type' in item
|
||||
? toInputVarType(item.type)
|
||||
: InputVarType.textInput // Headers default to text
|
||||
: InputVarType.textInput
|
||||
|
||||
const newVar: InputVar = {
|
||||
type: inputVarType,
|
||||
label: varName,
|
||||
label: sourceType, // Use sourceType as label to identify source
|
||||
variable: varName,
|
||||
required: item.required,
|
||||
}
|
||||
|
|
@ -101,26 +122,26 @@ const useConfig = (id: string, payload: WebhookTriggerNodeType) => {
|
|||
})
|
||||
|
||||
return true
|
||||
}, [toInputVarType, t])
|
||||
}, [toInputVarType, t, id, isVarUsedInNodes, removeUsedVarInNodes])
|
||||
|
||||
const handleParamsChange = useCallback((params: WebhookParameter[]) => {
|
||||
setInputs(produce(inputs, (draft) => {
|
||||
draft.params = params
|
||||
syncVariablesInDraft(draft, params)
|
||||
syncVariablesInDraft(draft, params, 'param')
|
||||
}))
|
||||
}, [inputs, setInputs, syncVariablesInDraft])
|
||||
|
||||
const handleHeadersChange = useCallback((headers: WebhookHeader[]) => {
|
||||
setInputs(produce(inputs, (draft) => {
|
||||
draft.headers = headers
|
||||
syncVariablesInDraft(draft, headers)
|
||||
syncVariablesInDraft(draft, headers, 'header')
|
||||
}))
|
||||
}, [inputs, setInputs, syncVariablesInDraft])
|
||||
|
||||
const handleBodyChange = useCallback((body: WebhookParameter[]) => {
|
||||
setInputs(produce(inputs, (draft) => {
|
||||
draft.body = body
|
||||
syncVariablesInDraft(draft, body)
|
||||
syncVariablesInDraft(draft, body, 'body')
|
||||
}))
|
||||
}, [inputs, setInputs, syncVariablesInDraft])
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue