Skip to content

Commit 2e13b51

Browse files
committed
feat: correct debounce for inputs
1 parent 7829731 commit 2e13b51

3 files changed

Lines changed: 70 additions & 23 deletions

File tree

src/packages/ce/src/datatype/components/inputs/generic/DataTypeGenericInputComponent.tsx

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,61 @@ export const DataTypeGenericInputComponent: React.FC<DataTypeGenericInputCompone
1212
const {title, description, onChange, formValidation} = props
1313

1414
const onChangeDebounced = useDebouncedCallback((value: LiteralValue | NodeFunction | ReferenceValue | null) => {
15-
formValidation?.setValue?.(value)
1615
onChange?.(value)
1716
}, 200)
1817

1918
return <>
2019
<InputLabel>{title}</InputLabel>
2120
<InputDescription>{description}</InputDescription>
2221
<ButtonGroup color={"secondary"}>
23-
<Button color={"tertiary"} onClick={() => onChangeDebounced({__typename: "LiteralValue", value: 0})}>
22+
<Button color={"tertiary"} onClick={() => {
23+
formValidation?.setValue?.({
24+
__typename: "LiteralValue", value: 0
25+
})
26+
onChangeDebounced({
27+
__typename: "LiteralValue", value: 0
28+
})
29+
}}>
2430
Number Value
2531
</Button>
26-
<Button color={"tertiary"} onClick={() => onChangeDebounced({__typename: "LiteralValue", value: false})}>
32+
<Button color={"tertiary"} onClick={() => {
33+
formValidation?.setValue?.({
34+
__typename: "LiteralValue", value: false
35+
})
36+
onChangeDebounced({
37+
__typename: "LiteralValue", value: false
38+
})
39+
}}>
2740
Boolean Value
2841
</Button>
29-
<Button color={"tertiary"} onClick={() => onChangeDebounced({__typename: "LiteralValue", value: ""})}>
42+
<Button color={"tertiary"} onClick={() => {
43+
formValidation?.setValue?.({
44+
__typename: "LiteralValue", value: ""
45+
})
46+
onChangeDebounced({
47+
__typename: "LiteralValue", value: ""
48+
})
49+
}}>
3050
Text Value
3151
</Button>
32-
<Button color={"tertiary"} onClick={() => onChangeDebounced({__typename: "LiteralValue", value: []})}>
52+
<Button color={"tertiary"} onClick={() => {
53+
formValidation?.setValue?.({
54+
__typename: "LiteralValue", value: []
55+
})
56+
onChangeDebounced({
57+
__typename: "LiteralValue", value: []
58+
})
59+
}}>
3360
List Value
3461
</Button>
35-
<Button color={"tertiary"} onClick={() => onChangeDebounced({__typename: "LiteralValue", value: {}})}>
62+
<Button color={"tertiary"} onClick={() => {
63+
formValidation?.setValue?.({
64+
__typename: "LiteralValue", value: {}
65+
})
66+
onChangeDebounced({
67+
__typename: "LiteralValue", value: {}
68+
})
69+
}}>
3670
Data Value
3771
</Button>
3872
</ButtonGroup>

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,8 @@ export const DataTypeJSONInputComponent: React.FC<DataTypeJSONInputComponentProp
2929
const [collapsedState, setCollapsedStateRaw] = React.useState<Record<string, boolean>>({})
3030

3131
const onChangeDebounced = useDebouncedCallback((value: LiteralValue | SubFlowValue | NodeFunction | ReferenceValue | null) => {
32-
formValidation?.setValue?.(value)
3332
onChange?.(value)
34-
}, 400)
33+
}, 200)
3534

3635
const value = React.useMemo(
3736
() => initialValue ?? (("functionSchema" in schema ? schema.functionSchema.input === "list" : schema.input === "list") ? {
@@ -59,14 +58,20 @@ export const DataTypeJSONInputComponent: React.FC<DataTypeJSONInputComponentProp
5958
entry={editEntry}
6059
value={value as LiteralValue}
6160
onOpenChange={open => setEditDialogOpen(open)}
62-
onObjectChange={onChangeDebounced}
61+
onObjectChange={(value) => {
62+
formValidation?.setValue?.(value)
63+
onChangeDebounced(value)
64+
}}
6365
/>
6466
)}
6567
<InputLabel>{title}</InputLabel>
6668
<InputDescription>{description}</InputDescription>
6769
<DataTypeInputValueComponent inside
6870
initialValue={value}
69-
onChange={onChangeDebounced}
71+
onChange={(value) => {
72+
formValidation?.setValue?.(value)
73+
onChangeDebounced(value)
74+
}}
7075
suggestions={suggestions}
7176
formValidation={formValidation}>
7277
<DataTypeJSONInputTreeComponent

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

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,22 @@ export const DataTypeSubFlowInputComponent: React.FC<DataTypeSubFlowInputCompone
3232
const result = useFunctionSuggestions()
3333

3434
const onChangeDebounced = useDebouncedCallback((value: LiteralValue | SubFlowValue | ReferenceValue | NodeFunction | null) => {
35-
36-
if (value?.__typename === "NodeFunction") {
37-
const nodeId = flowService.addNodeById(flowId, value)
38-
value = {
39-
__typename: "SubFlowValue",
40-
startingNodeId: nodeId
41-
}
42-
}
43-
44-
formValidation?.setValue?.(value ?? null)
4535
onChange?.(value ?? null)
4636
}, 200)
4737

4838
return React.useMemo(() => <>
4939
<SuggestionDialogComponent suggestions={[...suggestions!, ...result]}
5040
open={suggestionDialogOpen}
51-
onSuggestionSelect={suggestion => {
52-
onChangeDebounced(suggestion as NodeFunction)
41+
onSuggestionSelect={value => {
42+
if (value?.__typename === "NodeFunction") {
43+
const nodeId = flowService.addNodeById(flowId, value)
44+
value = {
45+
__typename: "SubFlowValue",
46+
startingNodeId: nodeId
47+
}
48+
}
49+
formValidation?.setValue?.(value ?? null)
50+
onChangeDebounced(value as NodeFunction)
5351
}}
5452
onOpenChange={setSuggestionDialogOpen}/>
5553
<InputLabel>{title}</InputLabel>
@@ -62,7 +60,17 @@ export const DataTypeSubFlowInputComponent: React.FC<DataTypeSubFlowInputCompone
6260
}
6361
}}
6462
initialValue={initialValue}
65-
onChange={onChangeDebounced}
63+
onChange={(value) => {
64+
if (value?.__typename === "NodeFunction") {
65+
const nodeId = flowService.addNodeById(flowId, value)
66+
value = {
67+
__typename: "SubFlowValue",
68+
startingNodeId: nodeId
69+
}
70+
}
71+
formValidation?.setValue?.(value ?? null)
72+
onChangeDebounced(value ?? null)
73+
}}
6674
suggestions={suggestions}
6775
formValidation={formValidation}>
6876
<Text>Select next node</Text>

0 commit comments

Comments
 (0)