Skip to content

Commit e0f4d66

Browse files
committed
feat: better performance
1 parent 4d9ca64 commit e0f4d66

8 files changed

Lines changed: 35 additions & 50 deletions

File tree

src/packages/ce/src/datatype/components/inputs/DataTypeInputComponent.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
import {Schema} from "@code0-tech/triangulum/dist/util/schema.util";
2121

2222
export interface DataTypeInputComponentProps extends Omit<InputWrapperProps<NodeParameterValue | NodeFunction>, "onChange"> {
23-
schema: NodeSchema | Schema
23+
schema: (NodeSchema | Schema) & {blocked?: boolean}
2424
clearable?: boolean
2525
onChange?: (value: ReferenceValue | SubFlowValue | LiteralValue | NodeFunction | undefined) => void
2626
suggestions?: (NodeFunction | SubFlowValue | ReferenceValue | LiteralValue)[]
@@ -33,6 +33,11 @@ export const DataTypeInputComponent: React.FC<DataTypeInputComponentProps> = (pr
3333

3434
const suggestions = "schema" in schema ? schema?.schema?.suggestions as (NodeFunction | ReferenceValue | LiteralValue)[] : []
3535
const inputName = "schema" in schema ? (schema?.schema?.input === "generic" ? schema.functionSchema.input : schema?.schema?.input) : schema.input
36+
const blocked = schema?.blocked
37+
38+
if (blocked) {
39+
return null
40+
}
3641

3742
switch (inputName) {
3843
case "boolean":

src/packages/ce/src/datatype/components/inputs/json/DataTypeJSONInputComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export const DataTypeJSONInputComponent: React.FC<DataTypeJSONInputComponentProp
3131
const onChangeDebounced = useDebouncedCallback((value: LiteralValue | SubFlowValue | NodeFunction | ReferenceValue | undefined) => {
3232
formValidation?.setValue?.(value)
3333
onChange?.(value)
34-
}, 200)
34+
}, 400)
3535

3636
const value = React.useMemo(
3737
() => initialValue ?? (("functionSchema" in schema ? schema.functionSchema.input === "list" : schema.input === "list") ? {

src/packages/ce/src/datatype/components/inputs/number/DataTypeNumberInputComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export const DataTypeNumberInputComponent: React.FC<DataTypeNumberInputComponent
3030
formValidation?.setValue?.(value)
3131
onChange?.(value)
3232
}
33-
}, 200)
33+
}, 400)
3434

3535
return React.useMemo(() => <>
3636
<InputLabel>{title}</InputLabel>

src/packages/ce/src/datatype/components/inputs/sub-flow/DataTypeSubFlowInputComponent.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ export const DataTypeSubFlowInputComponent: React.FC<DataTypeSubFlowInputCompone
2828
return initialValue && lodash.isMatch(initialValue, suggest)
2929
}), [suggestions])!
3030

31-
3231
const [suggestionDialogOpen, setSuggestionDialogOpen] = React.useState(false)
3332
const result = useFunctionSuggestions()
3433

src/packages/ce/src/datatype/components/inputs/text/DataTypeTextInputComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export const DataTypeTextInputComponent: React.FC<DataTypeTextInputComponentProp
3030
formValidation?.setValue?.(value)
3131
onChange?.(value)
3232
}
33-
}, 200)
33+
}, 400)
3434

3535
return React.useMemo(() => <>
3636
<InputLabel>{title}</InputLabel>

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

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import {
55
LiteralValue,
66
NodeFunction,
77
NodeParameterValue,
8-
ReferenceValue, SubFlowValue
8+
ReferenceValue,
9+
SubFlowValue
910
} from "@code0-tech/sagittarius-graphql-types";
1011
import {useFlowValidation} from "@edition/flow/hooks/Flow.validation.hook";
1112
import {FlowService} from "@edition/flow/services/Flow.service";
@@ -16,7 +17,7 @@ import {
1617
FALLBACK_FUNCTION_PARAMETER_DESCRIPTION,
1718
FALLBACK_FUNCTION_PARAMETER_NAME
1819
} from "@core/util/fallback-translations";
19-
import {useNodes} from "@xyflow/react";
20+
import {useNodes, useNodesData} from "@xyflow/react";
2021
import {NodeSchema} from "@code0-tech/triangulum";
2122

2223
export interface FunctionFileDefaultComponentProps {
@@ -30,12 +31,11 @@ export const FunctionFileDefaultComponent: React.FC<FunctionFileDefaultComponent
3031

3132
const flowService = useService(FlowService)
3233
const validation = useFlowValidation(flowId)
33-
34-
const changedValue = React.useRef(false)
34+
const changedParameter = React.useRef<Set<string>>(new Set())
3535

3636
const definition = React.useMemo(
3737
() => node.functionDefinition!,
38-
[node]
38+
[node.functionDefinition]
3939
)
4040

4141
const initialValues = React.useMemo(() => {
@@ -51,7 +51,7 @@ export const FunctionFileDefaultComponent: React.FC<FunctionFileDefaultComponent
5151

5252
const nodeValidation = React.useMemo(
5353
() => validation?.find(v => v.nodeId === node.id && v.parameterIndex === null),
54-
[validation]
54+
[validation?.length]
5555
)
5656

5757
const parameterValidations = React.useMemo(() => {
@@ -66,37 +66,31 @@ export const FunctionFileDefaultComponent: React.FC<FunctionFileDefaultComponent
6666
}
6767
})
6868
return values
69-
}, [validation, node, definition])
69+
}, [validation?.length, node.id, definition])
7070

7171
const onSubmit = React.useCallback((values: Record<string, NodeParameterValue | undefined>) => {
7272
for (const parameterDefinition of definition?.parameterDefinitions?.nodes ?? []) {
7373

74+
if (!changedParameter.current.has(parameterDefinition?.id!)) continue
75+
7476
const parameterIndex = definition?.parameterDefinitions?.nodes?.findIndex(p => p?.id === parameterDefinition?.id)
7577
if (typeof parameterIndex !== "number") return
7678

7779
const value = values[parameterDefinition!.id!]
7880
flowService.setParameterValue(flowId, node.id!!, parameterIndex, (value ?? undefined) as SubFlowValue | ReferenceValue | LiteralValue | undefined, definition);
7981

80-
changedValue.current = false
82+
changedParameter.current.delete(parameterDefinition?.id!)
8183
}
8284
}, [flowService, definition])
8385

84-
const [inputs, validate, values] = useForm<Record<string, NodeParameterValue | undefined>>({
86+
const [inputs, validate] = useForm<Record<string, NodeParameterValue | undefined>>({
8587
useInitialValidation: true,
8688
truthyValidationBeforeSubmit: false,
8789
initialValues: initialValues,
8890
validate: parameterValidations,
8991
onSubmit: onSubmit
9092
})
9193

92-
React.useEffect(
93-
() => {
94-
if (changedValue.current)
95-
validate()
96-
},
97-
[values]
98-
)
99-
10094
React.useEffect(
10195
() => validate(undefined, false),
10296
[validation]
@@ -124,13 +118,23 @@ export const FunctionFileDefaultComponent: React.FC<FunctionFileDefaultComponent
124118
const title = parameterDefinition?.names?.[0]?.content ?? FALLBACK_FUNCTION_PARAMETER_NAME
125119
const description = parameterDefinition?.descriptions?.[0]?.content ?? FALLBACK_FUNCTION_PARAMETER_DESCRIPTION
126120

121+
const schema = (flowNode?.data?.schema as NodeSchema[])?.[index]
122+
/* schema.blocked = schema?.blockedBy?.some(blockedBy => {
123+
const val = node.parameters?.nodes?.[blockedBy]?.value;
124+
return val === undefined || val === null;
125+
}) ?? false;*/
126+
127127
return <div>
128128
<DataTypeInputComponent data-qa-selector={"flow-builder-parameter"}
129129
title={title}
130-
schema={(flowNode?.data?.schema as NodeSchema[])?.[index]}
130+
schema={schema}
131131
description={description}
132132
clearable
133-
onChange={() => changedValue.current = true}
133+
key={parameterDefinition.id}
134+
onChange={() => {
135+
changedParameter.current.add(parameterDefinition.id!)
136+
validate()
137+
}}
134138
{...inputs.getInputProps(parameterDefinition.id!)}
135139
/>
136140
<Spacing spacing={"xl"}/>

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ export const FunctionFileTriggerComponent: React.FC<FunctionFileTriggerComponent
2828
const flowTypeStore = useStore(FlowTypeService)
2929
const flowService = useService(FlowService)
3030
const validation = useFlowValidation(flowId)
31-
const changedValue = React.useRef(false)
3231
const changedSettings = React.useRef<Set<string>>(new Set())
3332

3433
const instance = React.useMemo(
@@ -88,7 +87,6 @@ export const FunctionFileTriggerComponent: React.FC<FunctionFileTriggerComponent
8887

8988
changedSettings.current.delete(flowTypeSetting.id!)
9089
}
91-
changedValue.current = false
9290
})
9391
}, [flowService, definition])
9492

@@ -105,10 +103,6 @@ export const FunctionFileTriggerComponent: React.FC<FunctionFileTriggerComponent
105103
[validation]
106104
)
107105

108-
React.useEffect(
109-
() => console.log("test")
110-
)
111-
112106
return <>
113107
<Text size={"md"}>{definition?.names?.[0]?.content ?? FALLBACK_FLOW_TYPE_NAME}</Text>
114108
<Spacing spacing={"xs"}/>
@@ -140,7 +134,6 @@ export const FunctionFileTriggerComponent: React.FC<FunctionFileTriggerComponent
140134
clearable
141135
key={settingDefinition.id}
142136
onChange={() => {
143-
changedValue.current = true
144137
changedSettings.current.add(settingDefinition.id!)
145138
validate()
146139
}}

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

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -82,24 +82,6 @@ export const FunctionFilesComponent: React.FC<FunctionFilesComponentProps> = (pr
8282
[flow, functionStore]
8383
)
8484

85-
React.useEffect(() => {
86-
//if (activeTab) setSelectedFunctionNode(activeTab, reactFlow);
87-
/*setTimeout(() => {
88-
const parent = document.querySelector("[data-id=" + '"' + id + '"' + "]") as HTMLDivElement
89-
const tabList = parent?.querySelector(".file-tabs__list-content") as HTMLDivElement
90-
const trigger = tabList?.querySelector("[data-value=" + '"' + activeTab + '"' + "]") as HTMLDivElement
91-
92-
if (tabList && trigger) {
93-
const offset = (trigger.offsetLeft + (trigger.offsetWidth / 2)) - (tabList.offsetWidth / 2)
94-
tabList.scrollLeft = 0 //reset to 0
95-
tabList.scrollBy({
96-
left: offset,
97-
behavior: 'smooth'
98-
});
99-
}
100-
}, 0)*/
101-
}, [activeTab])
102-
10385
React.useEffect(() => {
10486
setActiveTab(selectedNode?.id ?? undefined)
10587
}, [selectedNode?.id])
@@ -192,7 +174,9 @@ export const FunctionFilesComponent: React.FC<FunctionFilesComponentProps> = (pr
192174
value={flowId!}
193175
h={"100%"}
194176
key={flowId!}>
195-
<FunctionFileTriggerComponent instance={flow!}/>
177+
<FunctionFileTriggerComponent flowId={flowId}
178+
namespaceId={namespaceId}
179+
projectId={projectId}/>
196180
</FileTabsContent>
197181
{
198182
nodes?.map(node => {

0 commit comments

Comments
 (0)