mirror of
https://github.com/langgenius/dify.git
synced 2026-04-28 20:17:29 +08:00
feat(trigger): format event_parameters and improve
This commit is contained in:
parent
1f6ab13fc5
commit
1c17a16830
@ -1,4 +1,4 @@
|
|||||||
import { useCallback, useMemo } from 'react'
|
import { useCallback, useEffect, useMemo } from 'react'
|
||||||
import produce from 'immer'
|
import produce from 'immer'
|
||||||
import type { PluginTriggerNodeType } from './types'
|
import type { PluginTriggerNodeType } from './types'
|
||||||
import type { PluginTriggerVarInputs } from './types'
|
import type { PluginTriggerVarInputs } from './types'
|
||||||
@ -9,7 +9,7 @@ import {
|
|||||||
useTriggerSubscriptions,
|
useTriggerSubscriptions,
|
||||||
} from '@/service/use-triggers'
|
} from '@/service/use-triggers'
|
||||||
import {
|
import {
|
||||||
addDefaultValue,
|
getConfiguredValue,
|
||||||
toolParametersToFormSchemas,
|
toolParametersToFormSchemas,
|
||||||
} from '@/app/components/tools/utils/to-form-schema'
|
} from '@/app/components/tools/utils/to-form-schema'
|
||||||
import type { InputVar } from '@/app/components/workflow/types'
|
import type { InputVar } from '@/app/components/workflow/types'
|
||||||
@ -17,6 +17,60 @@ import type { TriggerWithProvider } from '@/app/components/workflow/block-select
|
|||||||
import type { Event } from '@/app/components/tools/types'
|
import type { Event } from '@/app/components/tools/types'
|
||||||
import { VarKindType } from '../_base/types'
|
import { VarKindType } from '../_base/types'
|
||||||
|
|
||||||
|
const normalizeEventParameters = (
|
||||||
|
params: PluginTriggerVarInputs | Record<string, unknown> | null | undefined,
|
||||||
|
{ allowScalars = false }: { allowScalars?: boolean } = {},
|
||||||
|
): PluginTriggerVarInputs => {
|
||||||
|
if (!params || typeof params !== 'object' || Array.isArray(params))
|
||||||
|
return {} as PluginTriggerVarInputs
|
||||||
|
|
||||||
|
return Object.entries(params).reduce((acc, [key, entry]) => {
|
||||||
|
if (!entry && entry !== 0 && entry !== false)
|
||||||
|
return acc
|
||||||
|
|
||||||
|
if (
|
||||||
|
typeof entry === 'object'
|
||||||
|
&& !Array.isArray(entry)
|
||||||
|
&& 'type' in entry
|
||||||
|
&& 'value' in entry
|
||||||
|
) {
|
||||||
|
const normalizedEntry = { ...(entry as PluginTriggerVarInputs[string]) }
|
||||||
|
if (normalizedEntry.type === VarKindType.mixed)
|
||||||
|
normalizedEntry.type = VarKindType.constant
|
||||||
|
acc[key] = normalizedEntry
|
||||||
|
return acc
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allowScalars)
|
||||||
|
return acc
|
||||||
|
|
||||||
|
if (typeof entry === 'string') {
|
||||||
|
acc[key] = {
|
||||||
|
type: VarKindType.constant,
|
||||||
|
value: entry,
|
||||||
|
}
|
||||||
|
return acc
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof entry === 'number' || typeof entry === 'boolean') {
|
||||||
|
acc[key] = {
|
||||||
|
type: VarKindType.constant,
|
||||||
|
value: entry,
|
||||||
|
}
|
||||||
|
return acc
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Array.isArray(entry) && entry.every(item => typeof item === 'string')) {
|
||||||
|
acc[key] = {
|
||||||
|
type: VarKindType.variable,
|
||||||
|
value: entry,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return acc
|
||||||
|
}, {} as PluginTriggerVarInputs)
|
||||||
|
}
|
||||||
|
|
||||||
const useConfig = (id: string, payload: PluginTriggerNodeType) => {
|
const useConfig = (id: string, payload: PluginTriggerNodeType) => {
|
||||||
const { nodesReadOnly: readOnly } = useNodesReadOnly()
|
const { nodesReadOnly: readOnly } = useNodesReadOnly()
|
||||||
const { data: triggerPlugins = [] } = useAllTriggerPlugins()
|
const { data: triggerPlugins = [] } = useAllTriggerPlugins()
|
||||||
@ -31,9 +85,18 @@ const useConfig = (id: string, payload: PluginTriggerNodeType) => {
|
|||||||
provider_name,
|
provider_name,
|
||||||
event_name: event_name,
|
event_name: event_name,
|
||||||
config = {},
|
config = {},
|
||||||
event_parameters = {},
|
event_parameters: rawEventParameters = {},
|
||||||
} = inputs
|
} = inputs
|
||||||
|
|
||||||
|
const event_parameters = useMemo(
|
||||||
|
() => normalizeEventParameters(rawEventParameters as PluginTriggerVarInputs),
|
||||||
|
[rawEventParameters],
|
||||||
|
)
|
||||||
|
const legacy_config_parameters = useMemo(
|
||||||
|
() => normalizeEventParameters(config as PluginTriggerVarInputs, { allowScalars: true }),
|
||||||
|
[config],
|
||||||
|
)
|
||||||
|
|
||||||
// Construct provider for authentication check
|
// Construct provider for authentication check
|
||||||
const authProvider = useMemo(() => {
|
const authProvider = useMemo(() => {
|
||||||
return provider_name || ''
|
return provider_name || ''
|
||||||
@ -78,19 +141,44 @@ const useConfig = (id: string, payload: PluginTriggerNodeType) => {
|
|||||||
|
|
||||||
const triggerParameterValue = useMemo(() => {
|
const triggerParameterValue = useMemo(() => {
|
||||||
if (!triggerParameterSchema.length)
|
if (!triggerParameterSchema.length)
|
||||||
return {}
|
return {} as PluginTriggerVarInputs
|
||||||
|
|
||||||
const hasNewParameters = event_parameters && Object.keys(event_parameters).length > 0
|
const hasStoredParameters = event_parameters && Object.keys(event_parameters).length > 0
|
||||||
const baseValue = hasNewParameters ? event_parameters : (config || {})
|
const baseValue = hasStoredParameters ? event_parameters : legacy_config_parameters
|
||||||
|
|
||||||
return addDefaultValue(baseValue, triggerParameterSchema)
|
const configuredValue = getConfiguredValue(baseValue, triggerParameterSchema) as PluginTriggerVarInputs
|
||||||
}, [triggerParameterSchema, event_parameters, config])
|
return normalizeEventParameters(configuredValue)
|
||||||
|
}, [triggerParameterSchema, event_parameters, legacy_config_parameters])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!triggerParameterSchema.length)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (event_parameters && Object.keys(event_parameters).length > 0)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (!triggerParameterValue || Object.keys(triggerParameterValue).length === 0)
|
||||||
|
return
|
||||||
|
|
||||||
|
const newInputs = produce(inputs, (draft) => {
|
||||||
|
draft.event_parameters = triggerParameterValue
|
||||||
|
draft.config = triggerParameterValue
|
||||||
|
})
|
||||||
|
doSetInputs(newInputs)
|
||||||
|
}, [
|
||||||
|
doSetInputs,
|
||||||
|
event_parameters,
|
||||||
|
inputs,
|
||||||
|
triggerParameterSchema,
|
||||||
|
triggerParameterValue,
|
||||||
|
])
|
||||||
|
|
||||||
const setTriggerParameterValue = useCallback(
|
const setTriggerParameterValue = useCallback(
|
||||||
(value: Record<string, any>) => {
|
(value: PluginTriggerVarInputs) => {
|
||||||
|
const sanitizedValue = normalizeEventParameters(value)
|
||||||
const newInputs = produce(inputs, (draft) => {
|
const newInputs = produce(inputs, (draft) => {
|
||||||
draft.event_parameters = value
|
draft.event_parameters = sanitizedValue
|
||||||
draft.config = value
|
draft.config = sanitizedValue
|
||||||
})
|
})
|
||||||
doSetInputs(newInputs)
|
doSetInputs(newInputs)
|
||||||
},
|
},
|
||||||
@ -100,20 +188,16 @@ const useConfig = (id: string, payload: PluginTriggerNodeType) => {
|
|||||||
const setInputVar = useCallback(
|
const setInputVar = useCallback(
|
||||||
(variable: InputVar, varDetail: InputVar) => {
|
(variable: InputVar, varDetail: InputVar) => {
|
||||||
const newInputs = produce(inputs, (draft) => {
|
const newInputs = produce(inputs, (draft) => {
|
||||||
const nextEventParameters = {
|
const nextEventParameters = normalizeEventParameters({
|
||||||
...(draft.event_parameters || {}),
|
...(draft.event_parameters || {}),
|
||||||
} as PluginTriggerVarInputs
|
[variable.variable]: {
|
||||||
|
type: VarKindType.variable,
|
||||||
nextEventParameters[variable.variable] = {
|
value: varDetail.variable,
|
||||||
type: VarKindType.variable,
|
},
|
||||||
value: varDetail.variable,
|
} as PluginTriggerVarInputs)
|
||||||
}
|
|
||||||
|
|
||||||
draft.event_parameters = nextEventParameters
|
draft.event_parameters = nextEventParameters
|
||||||
draft.config = {
|
draft.config = nextEventParameters
|
||||||
...nextEventParameters,
|
|
||||||
[variable.variable]: varDetail.variable,
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
doSetInputs(newInputs)
|
doSetInputs(newInputs)
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user