Skip to content

Commit 0e8d7e0

Browse files
author
nicosammito
committed
feat: enhance Flow service and components with improved parameter handling and validation logic
1 parent 31eb740 commit 0e8d7e0

3 files changed

Lines changed: 64 additions & 32 deletions

File tree

src/packages/ce/src/flow/services/Flow.service.ts

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import {
44
FlowSetting,
55
LiteralValue,
66
Maybe,
7-
Mutation, Namespace, NamespaceProject,
7+
Mutation,
8+
Namespace,
9+
NamespaceProject,
810
NamespacesProjectsFlowsCreateInput,
911
NamespacesProjectsFlowsCreatePayload,
1012
NamespacesProjectsFlowsDeleteInput,
@@ -311,24 +313,51 @@ export class FlowService extends ReactiveArrayService<FlowView, FlowDependencies
311313
const node = this.getNodeById(flowId, nodeId)
312314
if (!node) return
313315
const parameter = node.parameters?.nodes?.find(p => p?.id === parameterId)
314-
if (!parameter) return
315-
this.removeParameterNode(flow, parameter)
316-
if (value?.__typename === "NodeFunction") {
317-
const nextNodeIndex: number = Math.max(0, ...flow.nodes?.nodes?.map(node => Number(node?.id?.match(/NodeFunction\/(\d+)$/)?.[1] ?? 0)) ?? [0])
318-
const addingIdValue: NodeFunction = {
319-
...value,
320-
id: `gid://sagittarius/NodeFunction/${nextNodeIndex + 1}`
316+
if (!parameter) {
317+
const localParameter: NodeParameter = {
318+
__typename: "NodeParameter",
319+
id: parameterId,
320+
value: null
321321
}
322-
flow.nodes?.nodes?.push(addingIdValue)
323-
parameter.value = {
324-
id: `gid://sagittarius/NodeFunction/${nextNodeIndex + 1}`,
325-
__typename: "NodeFunctionIdWrapper"
326-
} as NodeFunctionIdWrapper
322+
323+
if (value?.__typename === "NodeFunction") {
324+
const nextNodeIndex: number = Math.max(0, ...flow.nodes?.nodes?.map(node => Number(node?.id?.match(/NodeFunction\/(\d+)$/)?.[1] ?? 0)) ?? [0])
325+
const addingIdValue: NodeFunction = {
326+
...value,
327+
id: `gid://sagittarius/NodeFunction/${nextNodeIndex + 1}`
328+
}
329+
flow.nodes?.nodes?.push(addingIdValue)
330+
localParameter.value = {
331+
id: `gid://sagittarius/NodeFunction/${nextNodeIndex + 1}`,
332+
__typename: "NodeFunctionIdWrapper"
333+
} as NodeFunctionIdWrapper
334+
} else {
335+
localParameter.value = value as LiteralValue | ReferenceValue
336+
}
337+
338+
flow.editedAt = new Date().toISOString()
339+
340+
node.parameters?.nodes?.push(localParameter)
327341
} else {
328-
parameter.value = value as LiteralValue | ReferenceValue
342+
this.removeParameterNode(flow, parameter)
343+
if (value?.__typename === "NodeFunction") {
344+
const nextNodeIndex: number = Math.max(0, ...flow.nodes?.nodes?.map(node => Number(node?.id?.match(/NodeFunction\/(\d+)$/)?.[1] ?? 0)) ?? [0])
345+
const addingIdValue: NodeFunction = {
346+
...value,
347+
id: `gid://sagittarius/NodeFunction/${nextNodeIndex + 1}`
348+
}
349+
flow.nodes?.nodes?.push(addingIdValue)
350+
parameter.value = {
351+
id: `gid://sagittarius/NodeFunction/${nextNodeIndex + 1}`,
352+
__typename: "NodeFunctionIdWrapper"
353+
} as NodeFunctionIdWrapper
354+
} else {
355+
parameter.value = value as LiteralValue | ReferenceValue
356+
}
357+
358+
flow.editedAt = new Date().toISOString()
329359
}
330360

331-
flow.editedAt = new Date().toISOString()
332361

333362
this.set(index, new View(flow))
334363
await this.syncFlow(flowId)

src/packages/ce/src/function/components/files/FunctionFileDefaultComponent.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,27 +126,28 @@ export const FunctionFileDefaultComponent: React.FC<FunctionFileDefaultComponent
126126
})
127127

128128
return <Flex style={{gap: ".7rem", flexDirection: "column"}}>
129-
{sortedParameters.map(parameter => {
129+
{definition?.parameterDefinitions?.map(parameterDefinition => {
130130

131-
if (!parameter) return null
131+
if (!parameterDefinition) return null
132+
133+
const nodeParameter = node.parameters?.nodes?.find(p => p?.parameterDefinition?.id === parameterDefinition.id)
132134

133-
const parameterDefinition = paramDefinitions[parameter?.parameterDefinition?.id!!]
134135
const title = parameterDefinition?.names ? parameterDefinition?.names!![0]?.content : parameterDefinition?.id
135136
const description = parameterDefinition?.descriptions ? parameterDefinition?.descriptions!![0]?.content : JSON.stringify(parameterDefinition?.dataTypeIdentifier)
136137

137138
return <div>
138139
{/*@ts-ignore*/}
139140
<DataTypeInputComponent flowId={flowId}
140141
nodeId={node.id}
141-
parameterId={parameter.id}
142+
parameterId={nodeParameter?.id}
142143
title={title}
143144
description={description}
144145
clearable
145146
onChange={() => {
146-
changedParameters.current.add(parameter.id!!)
147-
validate()
148-
}}
149-
{...inputs.getInputProps(parameter.id!!)}
147+
changedParameters.current.add(nodeParameter?.id!!)
148+
validate()
149+
}}
150+
{...inputs.getInputProps(nodeParameter?.id!!)}
150151
/>
151152
</div>
152153
})}

src/packages/ce/src/function/components/nodes/FunctionNodeDefaultComponent.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,35 +60,37 @@ export const FunctionNodeDefaultComponent: React.FC<FunctionNodeDefaultComponent
6060
);
6161

6262
const displayMessage = React.useMemo(() => splitTemplate(definition?.displayMessages!![0]?.content ?? "").map(item => {
63-
const param = node?.parameters?.nodes?.find(p => {
63+
const nodeParameter = node?.parameters?.nodes?.find(p => {
6464
const parameterDefinition = definition?.parameterDefinitions?.find(pd => pd.id == p?.parameterDefinition?.id)
6565
return parameterDefinition?.identifier == item
6666
})
6767

68-
const parameterValidation = validation?.filter(v => v.parameterId === param?.id)
68+
const parameterDefinition = definition?.parameterDefinitions?.find(pd => pd.identifier == item)
69+
70+
const parameterValidation = validation?.filter(v => v.parameterId === nodeParameter?.id)
6971
const decorationStyle: CSSProperties =
7072
parameterValidation?.length
7173
? underlineBySeverity[parameterValidation[0].type]
7274
: {};
7375

74-
if (param) {
75-
switch (param?.value?.__typename) {
76+
if (parameterDefinition) {
77+
switch (nodeParameter?.value?.__typename) {
7678
case "LiteralValue":
7779
return <div style={{...decorationStyle, display: "inline-block"}}>
78-
<LiteralBadgeComponent value={param.value}/>
80+
<LiteralBadgeComponent value={nodeParameter.value}/>
7981
</div>
8082
case "ReferenceValue":
8183
return <div style={{...decorationStyle, display: "inline-block"}}>
82-
<ReferenceBadgeComponent flowId={props.data.flowId} value={param.value}/>
84+
<ReferenceBadgeComponent flowId={props.data.flowId} value={nodeParameter.value}/>
8385
</div>
8486
case "NodeFunctionIdWrapper":
8587
return <div style={{...decorationStyle, display: "inline-block"}}>
86-
<NodeBadgeComponent value={param.value} flowId={props.data.flowId}/>
88+
<NodeBadgeComponent value={nodeParameter.value} flowId={props.data.flowId}/>
8789
<Handle
88-
key={param?.id}
90+
key={nodeParameter?.id}
8991
type={"target"}
9092
position={Position.Right}
91-
id={`param-${param?.id}`}
93+
id={`param-${nodeParameter?.id}`}
9294
isConnectable={false}
9395
className={"d-flow-node__handle d-flow-node__handle--target"}
9496
/>

0 commit comments

Comments
 (0)