From 532e91301796c45b271739e8f0a82d29ec3f3fa3 Mon Sep 17 00:00:00 2001 From: James Lindsay <78500760+0HyperCube@users.noreply.github.com> Date: Sat, 28 Jun 2025 03:59:03 +0100 Subject: [PATCH] Fix DropdownInput widget not reactively updating when its content changes (#2770) * Improve reactivity of DropdownInput.svelte * Fix formatting lint --------- Co-authored-by: Keavon Chambers --- .../src/components/widgets/inputs/DropdownInput.svelte | 9 ++++++++- node-graph/gcore/src/raster/image.rs | 10 +++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/widgets/inputs/DropdownInput.svelte b/frontend/src/components/widgets/inputs/DropdownInput.svelte index 6c458348..4317a519 100644 --- a/frontend/src/components/widgets/inputs/DropdownInput.svelte +++ b/frontend/src/components/widgets/inputs/DropdownInput.svelte @@ -30,6 +30,7 @@ let open = false; $: watchSelectedIndex(selectedIndex); + $: watchEntries(entries); $: watchActiveEntry(activeEntry); $: watchOpen(open); @@ -38,7 +39,13 @@ } // Called only when `selectedIndex` is changed from outside this component - function watchSelectedIndex(_?: number) { + function watchSelectedIndex(_?: typeof selectedIndex) { + activeEntrySkipWatcher = true; + activeEntry = makeActiveEntry(); + } + + // Called only when `entries` is changed from outside this component + function watchEntries(_?: typeof entries) { activeEntrySkipWatcher = true; activeEntry = makeActiveEntry(); } diff --git a/node-graph/gcore/src/raster/image.rs b/node-graph/gcore/src/raster/image.rs index b3b70849..e93fe60b 100644 --- a/node-graph/gcore/src/raster/image.rs +++ b/node-graph/gcore/src/raster/image.rs @@ -291,7 +291,15 @@ pub fn migrate_image_frame<'de, D: serde::Deserializer<'de>>(deserializer: D) -> *image_frame_table.instance_mut_iter().next().unwrap().alpha_blending = alpha_blending; image_frame_table } - FormatVersions::ImageFrame(image_frame) => RasterDataTable::new(Raster::new_cpu(image_frame.instance_ref_iter().next().unwrap().instance.image.clone())), + FormatVersions::ImageFrame(image_frame) => RasterDataTable::new(Raster::new_cpu( + image_frame + .instance_ref_iter() + .next() + .unwrap_or(Instances::new(ImageFrame::default()).instance_ref_iter().next().unwrap()) + .instance + .image + .clone(), + )), FormatVersions::ImageFrameTable(image_frame_table) => RasterDataTable::new(Raster::new_cpu(image_frame_table.instance_ref_iter().next().unwrap().instance.clone())), FormatVersions::RasterDataTable(raster_data_table) => raster_data_table, })