mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-19 15:09:11 +08:00
feat: support update sub variable value
This commit is contained in:
parent
0eb442f954
commit
876ea90fe9
@ -12,6 +12,7 @@ import type {
|
|||||||
HandleAddSubVariableCondition,
|
HandleAddSubVariableCondition,
|
||||||
HandleRemoveCondition,
|
HandleRemoveCondition,
|
||||||
HandleUpdateCondition,
|
HandleUpdateCondition,
|
||||||
|
HandleUpdateSubVariableCondition,
|
||||||
} from '../../types'
|
} from '../../types'
|
||||||
import {
|
import {
|
||||||
ComparisonOperator,
|
ComparisonOperator,
|
||||||
@ -35,11 +36,14 @@ const optionNameI18NPrefix = 'workflow.nodes.ifElse.optionName'
|
|||||||
type ConditionItemProps = {
|
type ConditionItemProps = {
|
||||||
disabled?: boolean
|
disabled?: boolean
|
||||||
caseId: string
|
caseId: string
|
||||||
condition: Condition
|
conditionId: string // in isSubVariableKey it's the value of the parent condition's id
|
||||||
|
condition: Condition // condition may the condition of case or condition of sub variable
|
||||||
file?: { key: string }
|
file?: { key: string }
|
||||||
isSubVariableKey?: boolean
|
isSubVariableKey?: boolean
|
||||||
|
subVariableKeyCaseId?: string
|
||||||
onRemoveCondition: HandleRemoveCondition
|
onRemoveCondition: HandleRemoveCondition
|
||||||
onUpdateCondition: HandleUpdateCondition
|
onUpdateCondition: HandleUpdateCondition
|
||||||
|
onUpdateSubVariableCondition?: HandleUpdateSubVariableCondition
|
||||||
nodesOutputVars: NodeOutPutVar[]
|
nodesOutputVars: NodeOutPutVar[]
|
||||||
availableNodes: Node[]
|
availableNodes: Node[]
|
||||||
numberVariables: NodeOutPutVar[]
|
numberVariables: NodeOutPutVar[]
|
||||||
@ -48,11 +52,13 @@ type ConditionItemProps = {
|
|||||||
const ConditionItem = ({
|
const ConditionItem = ({
|
||||||
disabled,
|
disabled,
|
||||||
caseId,
|
caseId,
|
||||||
|
conditionId,
|
||||||
condition,
|
condition,
|
||||||
file,
|
file,
|
||||||
isSubVariableKey,
|
isSubVariableKey,
|
||||||
onRemoveCondition,
|
onRemoveCondition,
|
||||||
onUpdateCondition,
|
onUpdateCondition,
|
||||||
|
onUpdateSubVariableCondition,
|
||||||
nodesOutputVars,
|
nodesOutputVars,
|
||||||
availableNodes,
|
availableNodes,
|
||||||
numberVariables,
|
numberVariables,
|
||||||
@ -120,8 +126,8 @@ const ConditionItem = ({
|
|||||||
const newCondition = produce(condition, (draft) => {
|
const newCondition = produce(condition, (draft) => {
|
||||||
draft.key = key
|
draft.key = key
|
||||||
})
|
})
|
||||||
onUpdateCondition(caseId, condition.id, newCondition)
|
onUpdateSubVariableCondition?.(caseId, conditionId, condition.id, newCondition)
|
||||||
}, [caseId, condition, onUpdateCondition])
|
}, [caseId, condition, conditionId, onUpdateSubVariableCondition])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='flex mb-1 last-of-type:mb-0'>
|
<div className='flex mb-1 last-of-type:mb-0'>
|
||||||
@ -136,7 +142,7 @@ const ConditionItem = ({
|
|||||||
<Select
|
<Select
|
||||||
wrapperClassName='h-6'
|
wrapperClassName='h-6'
|
||||||
className='pl-0 text-xs'
|
className='pl-0 text-xs'
|
||||||
defaultValue={condition.value}
|
defaultValue={condition.key}
|
||||||
items={subVarOptions}
|
items={subVarOptions}
|
||||||
onSelect={item => handleSubVarKeyChange(item.value as string)}
|
onSelect={item => handleSubVarKeyChange(item.value as string)}
|
||||||
/>
|
/>
|
||||||
@ -202,15 +208,16 @@ const ConditionItem = ({
|
|||||||
<div className='p-1'>
|
<div className='p-1'>
|
||||||
<ConditionWrap
|
<ConditionWrap
|
||||||
isSubVariable
|
isSubVariable
|
||||||
conditionId={condition.id}
|
|
||||||
caseId={caseId}
|
caseId={caseId}
|
||||||
|
conditionId={conditionId}
|
||||||
readOnly={!!disabled}
|
readOnly={!!disabled}
|
||||||
nodeId=''
|
nodeId=''
|
||||||
cases={condition.sub_variable_condition ? [condition.sub_variable_condition] : []}
|
cases={condition.sub_variable_condition ? [condition.sub_variable_condition] : []}
|
||||||
handleAddSubVariableCondition={onAddSubVariableCondition}
|
handleAddSubVariableCondition={onAddSubVariableCondition}
|
||||||
handleRemoveCase={() => { }}
|
handleRemoveCase={() => { }}
|
||||||
handleAddCondition={() => { }}
|
handleAddCondition={() => { }}
|
||||||
handleUpdateCondition={() => { }}
|
handleUpdateCondition={onUpdateCondition}
|
||||||
|
handleUpdateSubVariableCondition={onUpdateSubVariableCondition}
|
||||||
handleRemoveCondition={() => { }}
|
handleRemoveCondition={() => { }}
|
||||||
handleUpdateConditionLogicalOperator={() => { }}
|
handleUpdateConditionLogicalOperator={() => { }}
|
||||||
nodesOutputVars={[]}
|
nodesOutputVars={[]}
|
||||||
|
@ -6,6 +6,7 @@ import type {
|
|||||||
HandleRemoveCondition,
|
HandleRemoveCondition,
|
||||||
HandleUpdateCondition,
|
HandleUpdateCondition,
|
||||||
HandleUpdateConditionLogicalOperator,
|
HandleUpdateConditionLogicalOperator,
|
||||||
|
HandleUpdateSubVariableCondition,
|
||||||
} from '../../types'
|
} from '../../types'
|
||||||
import ConditionItem from './condition-item'
|
import ConditionItem from './condition-item'
|
||||||
import type {
|
import type {
|
||||||
@ -16,6 +17,8 @@ import type {
|
|||||||
type ConditionListProps = {
|
type ConditionListProps = {
|
||||||
isSubVariable?: boolean
|
isSubVariable?: boolean
|
||||||
disabled?: boolean
|
disabled?: boolean
|
||||||
|
caseId: string
|
||||||
|
conditionId?: string
|
||||||
caseItem: CaseItem
|
caseItem: CaseItem
|
||||||
onUpdateCondition: HandleUpdateCondition
|
onUpdateCondition: HandleUpdateCondition
|
||||||
onUpdateConditionLogicalOperator: HandleUpdateConditionLogicalOperator
|
onUpdateConditionLogicalOperator: HandleUpdateConditionLogicalOperator
|
||||||
@ -25,10 +28,13 @@ type ConditionListProps = {
|
|||||||
numberVariables: NodeOutPutVar[]
|
numberVariables: NodeOutPutVar[]
|
||||||
varsIsVarFileAttribute: Record<string, boolean>
|
varsIsVarFileAttribute: Record<string, boolean>
|
||||||
onAddSubVariableCondition?: HandleAddSubVariableCondition
|
onAddSubVariableCondition?: HandleAddSubVariableCondition
|
||||||
|
onUpdateSubVariableCondition?: HandleUpdateSubVariableCondition
|
||||||
}
|
}
|
||||||
const ConditionList = ({
|
const ConditionList = ({
|
||||||
isSubVariable,
|
isSubVariable,
|
||||||
disabled,
|
disabled,
|
||||||
|
caseId,
|
||||||
|
conditionId,
|
||||||
caseItem,
|
caseItem,
|
||||||
onUpdateCondition,
|
onUpdateCondition,
|
||||||
onUpdateConditionLogicalOperator,
|
onUpdateConditionLogicalOperator,
|
||||||
@ -38,6 +44,7 @@ const ConditionList = ({
|
|||||||
numberVariables,
|
numberVariables,
|
||||||
varsIsVarFileAttribute,
|
varsIsVarFileAttribute,
|
||||||
onAddSubVariableCondition,
|
onAddSubVariableCondition,
|
||||||
|
onUpdateSubVariableCondition,
|
||||||
}: ConditionListProps) => {
|
}: ConditionListProps) => {
|
||||||
const { conditions, logical_operator } = caseItem
|
const { conditions, logical_operator } = caseItem
|
||||||
|
|
||||||
@ -65,7 +72,8 @@ const ConditionList = ({
|
|||||||
<ConditionItem
|
<ConditionItem
|
||||||
key={condition.id}
|
key={condition.id}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
caseId={caseItem.case_id}
|
caseId={caseId}
|
||||||
|
conditionId={isSubVariable ? conditionId! : condition.id}
|
||||||
condition={condition}
|
condition={condition}
|
||||||
onUpdateCondition={onUpdateCondition}
|
onUpdateCondition={onUpdateCondition}
|
||||||
onRemoveCondition={onRemoveCondition}
|
onRemoveCondition={onRemoveCondition}
|
||||||
@ -75,6 +83,7 @@ const ConditionList = ({
|
|||||||
file={varsIsVarFileAttribute[condition.id] ? { key: (condition.variable_selector || []).slice(-1)[0] } : undefined}
|
file={varsIsVarFileAttribute[condition.id] ? { key: (condition.variable_selector || []).slice(-1)[0] } : undefined}
|
||||||
isSubVariableKey={isSubVariable}
|
isSubVariableKey={isSubVariable}
|
||||||
onAddSubVariableCondition={onAddSubVariableCondition}
|
onAddSubVariableCondition={onAddSubVariableCondition}
|
||||||
|
onUpdateSubVariableCondition={onUpdateSubVariableCondition}
|
||||||
/>
|
/>
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import {
|
|||||||
RiDeleteBinLine,
|
RiDeleteBinLine,
|
||||||
RiDraggable,
|
RiDraggable,
|
||||||
} from '@remixicon/react'
|
} from '@remixicon/react'
|
||||||
import type { CaseItem, HandleAddCondition, HandleAddSubVariableCondition, HandleRemoveCondition, HandleUpdateCondition, HandleUpdateConditionLogicalOperator } from '../types'
|
import type { CaseItem, HandleAddCondition, HandleAddSubVariableCondition, HandleRemoveCondition, HandleUpdateCondition, HandleUpdateConditionLogicalOperator, HandleUpdateSubVariableCondition } from '../types'
|
||||||
import type { Node, NodeOutPutVar, Var } from '../../../types'
|
import type { Node, NodeOutPutVar, Var } from '../../../types'
|
||||||
import { VarType } from '../../../types'
|
import { VarType } from '../../../types'
|
||||||
import { useGetAvailableVars } from '../../variable-assigner/hooks'
|
import { useGetAvailableVars } from '../../variable-assigner/hooks'
|
||||||
@ -19,8 +19,8 @@ import Button from '@/app/components/base/button'
|
|||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
isSubVariable?: boolean
|
isSubVariable?: boolean
|
||||||
conditionId?: string
|
|
||||||
caseId?: string
|
caseId?: string
|
||||||
|
conditionId?: string
|
||||||
nodeId: string
|
nodeId: string
|
||||||
cases: CaseItem[]
|
cases: CaseItem[]
|
||||||
readOnly: boolean
|
readOnly: boolean
|
||||||
@ -28,6 +28,7 @@ type Props = {
|
|||||||
handleRemoveCase: (caseId: string) => void
|
handleRemoveCase: (caseId: string) => void
|
||||||
handleAddCondition?: HandleAddCondition
|
handleAddCondition?: HandleAddCondition
|
||||||
handleAddSubVariableCondition?: HandleAddSubVariableCondition
|
handleAddSubVariableCondition?: HandleAddSubVariableCondition
|
||||||
|
handleUpdateSubVariableCondition?: HandleUpdateSubVariableCondition
|
||||||
handleUpdateCondition: HandleUpdateCondition
|
handleUpdateCondition: HandleUpdateCondition
|
||||||
handleRemoveCondition: HandleRemoveCondition
|
handleRemoveCondition: HandleRemoveCondition
|
||||||
handleUpdateConditionLogicalOperator: HandleUpdateConditionLogicalOperator
|
handleUpdateConditionLogicalOperator: HandleUpdateConditionLogicalOperator
|
||||||
@ -39,8 +40,8 @@ type Props = {
|
|||||||
|
|
||||||
const ConditionWrap: FC<Props> = ({
|
const ConditionWrap: FC<Props> = ({
|
||||||
isSubVariable,
|
isSubVariable,
|
||||||
conditionId: parentConditionId,
|
|
||||||
caseId: conditionParentCaseId,
|
caseId: conditionParentCaseId,
|
||||||
|
conditionId: parentConditionId,
|
||||||
nodeId: id,
|
nodeId: id,
|
||||||
cases = [],
|
cases = [],
|
||||||
readOnly,
|
readOnly,
|
||||||
@ -50,6 +51,7 @@ const ConditionWrap: FC<Props> = ({
|
|||||||
handleAddCondition,
|
handleAddCondition,
|
||||||
handleRemoveCondition,
|
handleRemoveCondition,
|
||||||
handleAddSubVariableCondition,
|
handleAddSubVariableCondition,
|
||||||
|
handleUpdateSubVariableCondition,
|
||||||
handleUpdateConditionLogicalOperator,
|
handleUpdateConditionLogicalOperator,
|
||||||
nodesOutputVars,
|
nodesOutputVars,
|
||||||
availableNodes,
|
availableNodes,
|
||||||
@ -116,6 +118,8 @@ const ConditionWrap: FC<Props> = ({
|
|||||||
<ConditionList
|
<ConditionList
|
||||||
disabled={readOnly}
|
disabled={readOnly}
|
||||||
caseItem={item}
|
caseItem={item}
|
||||||
|
caseId={isSubVariable ? conditionParentCaseId! : item.case_id}
|
||||||
|
conditionId={parentConditionId}
|
||||||
onUpdateCondition={handleUpdateCondition}
|
onUpdateCondition={handleUpdateCondition}
|
||||||
onRemoveCondition={handleRemoveCondition}
|
onRemoveCondition={handleRemoveCondition}
|
||||||
onUpdateConditionLogicalOperator={handleUpdateConditionLogicalOperator}
|
onUpdateConditionLogicalOperator={handleUpdateConditionLogicalOperator}
|
||||||
@ -124,6 +128,7 @@ const ConditionWrap: FC<Props> = ({
|
|||||||
numberVariables={getAvailableVars(id, '', filterNumberVar)}
|
numberVariables={getAvailableVars(id, '', filterNumberVar)}
|
||||||
varsIsVarFileAttribute={varsIsVarFileAttribute}
|
varsIsVarFileAttribute={varsIsVarFileAttribute}
|
||||||
onAddSubVariableCondition={handleAddSubVariableCondition}
|
onAddSubVariableCondition={handleAddSubVariableCondition}
|
||||||
|
onUpdateSubVariableCondition={handleUpdateSubVariableCondition}
|
||||||
isSubVariable={isSubVariable}
|
isSubVariable={isSubVariable}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -31,6 +31,7 @@ const Panel: FC<NodePanelProps<IfElseNodeType>> = ({
|
|||||||
handleUpdateCondition,
|
handleUpdateCondition,
|
||||||
handleRemoveCondition,
|
handleRemoveCondition,
|
||||||
handleAddSubVariableCondition,
|
handleAddSubVariableCondition,
|
||||||
|
handleUpdateSubVariableCondition,
|
||||||
handleUpdateConditionLogicalOperator,
|
handleUpdateConditionLogicalOperator,
|
||||||
nodesOutputVars,
|
nodesOutputVars,
|
||||||
availableNodes,
|
availableNodes,
|
||||||
@ -51,6 +52,7 @@ const Panel: FC<NodePanelProps<IfElseNodeType>> = ({
|
|||||||
handleRemoveCondition={handleRemoveCondition}
|
handleRemoveCondition={handleRemoveCondition}
|
||||||
handleUpdateConditionLogicalOperator={handleUpdateConditionLogicalOperator}
|
handleUpdateConditionLogicalOperator={handleUpdateConditionLogicalOperator}
|
||||||
handleAddSubVariableCondition={handleAddSubVariableCondition}
|
handleAddSubVariableCondition={handleAddSubVariableCondition}
|
||||||
|
handleUpdateSubVariableCondition={handleUpdateSubVariableCondition}
|
||||||
nodesOutputVars={nodesOutputVars}
|
nodesOutputVars={nodesOutputVars}
|
||||||
availableNodes={availableNodes}
|
availableNodes={availableNodes}
|
||||||
varsIsVarFileAttribute={varsIsVarFileAttribute}
|
varsIsVarFileAttribute={varsIsVarFileAttribute}
|
||||||
|
@ -61,4 +61,5 @@ export type HandleAddCondition = (caseId: string, valueSelector: ValueSelector,
|
|||||||
export type HandleAddSubVariableCondition = (caseId: string, conditionId: string) => void
|
export type HandleAddSubVariableCondition = (caseId: string, conditionId: string) => void
|
||||||
export type HandleRemoveCondition = (caseId: string, conditionId: string) => void
|
export type HandleRemoveCondition = (caseId: string, conditionId: string) => void
|
||||||
export type HandleUpdateCondition = (caseId: string, conditionId: string, newCondition: Condition) => void
|
export type HandleUpdateCondition = (caseId: string, conditionId: string, newCondition: Condition) => void
|
||||||
|
export type HandleUpdateSubVariableCondition = (caseId: string, conditionId: string, subConditionId: string, newSubCondition: Condition) => void
|
||||||
export type HandleUpdateConditionLogicalOperator = (caseId: string, value: LogicalOperator) => void
|
export type HandleUpdateConditionLogicalOperator = (caseId: string, value: LogicalOperator) => void
|
||||||
|
@ -13,6 +13,7 @@ import type {
|
|||||||
HandleRemoveCondition,
|
HandleRemoveCondition,
|
||||||
HandleUpdateCondition,
|
HandleUpdateCondition,
|
||||||
HandleUpdateConditionLogicalOperator,
|
HandleUpdateConditionLogicalOperator,
|
||||||
|
HandleUpdateSubVariableCondition,
|
||||||
IfElseNodeType,
|
IfElseNodeType,
|
||||||
} from './types'
|
} from './types'
|
||||||
import {
|
import {
|
||||||
@ -165,6 +166,22 @@ const useConfig = (id: string, payload: IfElseNodeType) => {
|
|||||||
})
|
})
|
||||||
setInputs(newInputs)
|
setInputs(newInputs)
|
||||||
}, [inputs, setInputs])
|
}, [inputs, setInputs])
|
||||||
|
// console.log(inputs.cases)
|
||||||
|
|
||||||
|
const handleUpdateSubVariableCondition = useCallback<HandleUpdateSubVariableCondition>((caseId, conditionId, subConditionId, newSubCondition) => {
|
||||||
|
const newInputs = produce(inputs, (draft) => {
|
||||||
|
const targetCase = draft.cases?.find(item => item.case_id === caseId)
|
||||||
|
if (targetCase) {
|
||||||
|
const targetCondition = targetCase.conditions.find(item => item.id === conditionId)
|
||||||
|
if (targetCondition && targetCondition.sub_variable_condition) {
|
||||||
|
const targetSubCondition = targetCondition.sub_variable_condition.conditions.find(item => item.id === subConditionId)
|
||||||
|
if (targetSubCondition)
|
||||||
|
Object.assign(targetSubCondition, newSubCondition)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
setInputs(newInputs)
|
||||||
|
}, [inputs, setInputs])
|
||||||
|
|
||||||
const handleAddSubVariableCondition = useCallback<HandleAddSubVariableCondition>((caseId: string, conditionId: string) => {
|
const handleAddSubVariableCondition = useCallback<HandleAddSubVariableCondition>((caseId: string, conditionId: string) => {
|
||||||
const newInputs = produce(inputs, (draft) => {
|
const newInputs = produce(inputs, (draft) => {
|
||||||
@ -217,6 +234,7 @@ const useConfig = (id: string, payload: IfElseNodeType) => {
|
|||||||
handleRemoveCondition,
|
handleRemoveCondition,
|
||||||
handleUpdateCondition,
|
handleUpdateCondition,
|
||||||
handleAddSubVariableCondition,
|
handleAddSubVariableCondition,
|
||||||
|
handleUpdateSubVariableCondition,
|
||||||
handleUpdateConditionLogicalOperator,
|
handleUpdateConditionLogicalOperator,
|
||||||
nodesOutputVars: availableVars,
|
nodesOutputVars: availableVars,
|
||||||
availableNodes: availableNodesWithParent,
|
availableNodes: availableNodesWithParent,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user