From d203a16f97b0eecbb902b32a586acbb1a7b53706 Mon Sep 17 00:00:00 2001 From: Diego Imbert Date: Tue, 12 May 2026 17:14:45 +0200 Subject: [PATCH] feat(frontend): wire MqttTrigger editor to UserDraft Same pattern: persist getSaveCfg() on edits, overlay local autosave in openEdit (with initialConfig/originalConfig snapshotted from backend first), drop the entry on successful update. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../mqtt/MqttTriggerEditorInner.svelte | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/frontend/src/lib/components/triggers/mqtt/MqttTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/mqtt/MqttTriggerEditorInner.svelte index e925082b1e..ec441864bf 100644 --- a/frontend/src/lib/components/triggers/mqtt/MqttTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/mqtt/MqttTriggerEditorInner.svelte @@ -39,6 +39,7 @@ import TriggerSuspendedJobsAlert from '../TriggerSuspendedJobsAlert.svelte' import TriggerSuspendedJobsModal from '../TriggerSuspendedJobsModal.svelte' import { deepEqual } from 'fast-equals' + import { UserDraft } from '$lib/userDraft.svelte' interface Props { useDrawer?: boolean @@ -144,13 +145,17 @@ edit = true dirtyPath = false await loadTrigger(defaultConfig) - } catch (err) { - sendUserToast(`Could not load mqtt trigger: ${err.body}`, true) - } finally { if (!defaultConfig) { initialConfig = structuredClone($state.snapshot(getSaveCfg())) } originalConfig = structuredClone($state.snapshot(getSaveCfg())) + const localCfg = UserDraft.get>('schedule_mqtt', ePath) + if (localCfg && !deepEqual(localCfg, getSaveCfg())) { + await loadTriggerConfig(localCfg) + } + } catch (err) { + sendUserToast(`Could not load mqtt trigger: ${err.body}`, true) + } finally { clearTimeout(loadingTimeout) drawerLoading = false showLoading = false @@ -282,6 +287,7 @@ async function updateTrigger(): Promise { deploymentLoading = true + const previousPath = initialPath const cfg = getSaveCfg() const isSaved = await saveMqttTriggerFromCfg( initialPath, @@ -291,6 +297,7 @@ usedTriggerKinds ) if (isSaved) { + UserDraft.remove('schedule_mqtt', previousPath) onUpdate?.(cfg.path) originalConfig = structuredClone($state.snapshot(getSaveCfg())) initialPath = cfg.path @@ -337,6 +344,11 @@ handleConfigChange(mqttConfig, initialConfig, saveDisabled, edit, onConfigChange) } }) + + $effect(() => { + if (drawerLoading || !initialPath) return + UserDraft.save('schedule_mqtt', initialPath, mqttConfig) + }) {#if mode === 'suspended'}