From eeb049c0d09cf44c917c91c05d80b5e599f9381b Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Mon, 16 Jun 2025 14:36:12 +0200 Subject: [PATCH] fix tab selection on app builder --- .../components/helpers/RunnableWrapper.svelte | 1 - .../apps/components/layout/AppTabs.svelte | 19 +- .../components/apps/editor/AppEditor.svelte | 1 + .../apps/editor/GridEditorMenu.svelte | 77 ++-- .../component/ComponentCallbacks.svelte | 269 ------------- .../component/ComponentNavigation.svelte | 49 ++- .../component/componentCallbacks.svelte.ts | 357 ++++++++++++++++++ .../apps/editor/settingsPanel/GridTab.svelte | 11 +- .../components/apps/svelte-grid/Grid.svelte | 7 +- 9 files changed, 467 insertions(+), 324 deletions(-) delete mode 100644 frontend/src/lib/components/apps/editor/component/ComponentCallbacks.svelte create mode 100644 frontend/src/lib/components/apps/editor/component/componentCallbacks.svelte.ts diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte index 3ca0581cec..0bfaf7cbb1 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte @@ -343,7 +343,6 @@ on:resultSet={(e) => { const res = e.detail if ($initialized?.runnableInitialized?.[fullId] === undefined) { - console.log('resultSet', id) $initialized.runnableInitialized = { ...($initialized.runnableInitialized ?? {}), [fullId]: res diff --git a/frontend/src/lib/components/apps/components/layout/AppTabs.svelte b/frontend/src/lib/components/apps/components/layout/AppTabs.svelte index ed9ffed03c..e9d028a5ed 100644 --- a/frontend/src/lib/components/apps/components/layout/AppTabs.svelte +++ b/frontend/src/lib/components/apps/components/layout/AppTabs.svelte @@ -18,6 +18,7 @@ import InitializeComponent from '../helpers/InitializeComponent.svelte' import { twMerge } from 'tailwind-merge' import ResolveStyle from '../helpers/ResolveStyle.svelte' + import { deepEqual } from 'fast-equals' interface Props { id: string @@ -121,8 +122,24 @@ } } + let lastTabs: string[] | undefined = tabs + $effect.pre(() => { + if (!untrack(() => selected)) { + return + } + if ( + !deepEqual( + untrack(() => lastTabs), + tabs + ) + ) { + lastTabs = structuredClone($state.snapshot(tabs)) + } else { + return + } + untrack(() => handleTabSelection()) + }) $effect.pre(() => { - tabs selected != undefined && untrack(() => handleTabSelection()) }) diff --git a/frontend/src/lib/components/apps/editor/AppEditor.svelte b/frontend/src/lib/components/apps/editor/AppEditor.svelte index b0ea5f18ae..148742dc96 100644 --- a/frontend/src/lib/components/apps/editor/AppEditor.svelte +++ b/frontend/src/lib/components/apps/editor/AppEditor.svelte @@ -847,6 +847,7 @@ }} /> + {#if !$userStore?.operator} {#if $appStore} + - - + - - -
- - + + +
+ + {@render children?.()} {#if contextMenuVisible}
- + {#each menuItems as item} - - + + - {item.tooltip?.text} + {#snippet text()} + {item.tooltip?.text} {#if item.tooltip?.link}
@@ -192,8 +206,8 @@
- {/if}
+ {/if} + {/snippet}