From a434ecc05aa0293bb3c09ce16cee17aa64b7f06a Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Wed, 12 Mar 2025 12:29:24 +0100 Subject: [PATCH] fix: improve oneOf arg input reactivity to value changes --- frontend/src/lib/components/ArgInput.svelte | 24 +++++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/frontend/src/lib/components/ArgInput.svelte b/frontend/src/lib/components/ArgInput.svelte index 1ab0073e0e..dbce58f111 100644 --- a/frontend/src/lib/components/ArgInput.svelte +++ b/frontend/src/lib/components/ArgInput.svelte @@ -135,13 +135,17 @@ } } } - function updateOneOfSelectedValue(oneOfSelected: string | undefined) { - if (oneOfSelected) { - value = { label: oneOfSelected } + + $: updateOneOfSelected(oneOf) + + $: oneOf && value && onOneOfChange() + + function onOneOfChange() { + const label = value?.['label'] + if (label && oneOf && oneOf.some((o) => o.title == label) && oneOfSelected != label) { + oneOfSelected = label } } - $: updateOneOfSelected(oneOf) - $: updateOneOfSelectedValue(oneOfSelected) const dispatch = createEventDispatcher() @@ -791,8 +795,14 @@ selected={oneOfSelected} on:selected={({ detail }) => { oneOfSelected = detail - value = { label: detail } - redraw += 1 + const prevValueKeys = Object.keys( + oneOf.find((o) => o.title == detail)?.properties ?? {} + ) + const toKeep = {} + for (const key of prevValueKeys) { + toKeep[key] = value[key] + } + value = { ...toKeep, label: detail } }} let:item >