From 03a5e9860904ce9fb6390db689271bf71f52a976 Mon Sep 17 00:00:00 2001 From: Diego Imbert Date: Tue, 12 May 2026 17:26:46 +0200 Subject: [PATCH] feat(frontend): wire ScheduleEditor to UserDraft MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same pattern, keyed on schedule_schedule. ScheduleEditor doesn't track an originalConfig (its saveDisabled doesn't compare against a baseline) so ordering is simpler — initialConfig snapshotted from backend, local autosave overlaid after. This completes UserDraft wiring across all 11 trigger editors. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../triggers/schedules/ScheduleEditorInner.svelte | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/components/triggers/schedules/ScheduleEditorInner.svelte b/frontend/src/lib/components/triggers/schedules/ScheduleEditorInner.svelte index 24a7fdb26d..e58289b4b6 100644 --- a/frontend/src/lib/components/triggers/schedules/ScheduleEditorInner.svelte +++ b/frontend/src/lib/components/triggers/schedules/ScheduleEditorInner.svelte @@ -38,6 +38,8 @@ import { runScheduleNow } from '../scheduled/utils' import { handleConfigChange } from '../utils' import { withForkConflictRetry } from '$lib/utils/forkConflict' + import { deepEqual } from 'fast-equals' + import { UserDraft } from '$lib/userDraft.svelte' import TextInput from '$lib/components/text_input/TextInput.svelte' import { twMerge } from 'tailwind-merge' import PermissionedAsLine from '../PermissionedAsLine.svelte' @@ -142,10 +144,14 @@ path = defaultCfg?.path ?? ePath await loadSchedule(defaultCfg) edit = true - } finally { if (!defaultCfg) { initialConfig = structuredClone($state.snapshot(getScheduleCfg())) } + const localCfg = UserDraft.get>('schedule_schedule', ePath) + if (localCfg && !deepEqual(localCfg, getScheduleCfg())) { + await loadScheduleCfg(localCfg) + } + } finally { clearTimeout(loadingTimeout) drawerLoading = false showLoading = false @@ -527,10 +533,12 @@ } async function scheduleScript(): Promise { + const previousPath = initialPath const scheduleCfg = getScheduleCfg() deploymentLoading = true const isSaved = await saveScheduleFromCfg(scheduleCfg, edit, $workspaceStore!) if (isSaved) { + UserDraft.remove('schedule_schedule', previousPath) onUpdate?.(scheduleCfg.path) drawer?.closeDrawer() } @@ -654,6 +662,11 @@ handleConfigChange(scheduleCfg, initialConfig, saveDisabled, edit, onConfigChange) } }) + + $effect(() => { + if (drawerLoading || !initialPath) return + UserDraft.save('schedule_schedule', initialPath, scheduleCfg) + })