From fc2211c146fcf5f26c77da7cc72814933571afa5 Mon Sep 17 00:00:00 2001 From: Sam Chau Date: Sat, 3 Jan 2026 00:39:11 +1030 Subject: [PATCH] feat(dirty-tracking): implement dirty tracking and unsaved changes modal for media settings and naming sections --- .../components/MediaSettingsSection.svelte | 21 ++++-- .../components/NamingSection.svelte | 67 +++++++++++++++++-- .../QualityDefinitionsSection.svelte | 11 +-- .../[databaseId]/radarr/+page.svelte | 62 +++++++++++++++++ .../[databaseId]/sonarr/+page.svelte | 62 +++++++++++++++++ 5 files changed, 208 insertions(+), 15 deletions(-) diff --git a/src/routes/media-management/[databaseId]/components/MediaSettingsSection.svelte b/src/routes/media-management/[databaseId]/components/MediaSettingsSection.svelte index a8e1e28..81923e5 100644 --- a/src/routes/media-management/[databaseId]/components/MediaSettingsSection.svelte +++ b/src/routes/media-management/[databaseId]/components/MediaSettingsSection.svelte @@ -16,8 +16,9 @@ export let arrType: 'radarr' | 'sonarr'; export let canWriteToBase: boolean = false; - // Edit mode state - let isEditing = false; + // Edit mode state (exported for parent dirty tracking) + export let isEditing = false; + export let hasChanges = false; let isSaving = false; // Layer selection @@ -29,6 +30,15 @@ let formPropersRepacks: PropersRepacks = settings?.propers_repacks ?? 'doNotPrefer'; let formEnableMediaInfo: boolean = settings?.enable_media_info ?? true; + // Original values for dirty tracking + let originalPropersRepacks: PropersRepacks = 'doNotPrefer'; + let originalEnableMediaInfo: boolean = true; + + // Dirty tracking + $: hasChanges = + formPropersRepacks !== originalPropersRepacks || + formEnableMediaInfo !== originalEnableMediaInfo; + // Reset form to current settings function resetForm() { formPropersRepacks = settings?.propers_repacks ?? 'doNotPrefer'; @@ -37,6 +47,9 @@ function startEditing() { resetForm(); + // Save original values for dirty tracking + originalPropersRepacks = settings?.propers_repacks ?? 'doNotPrefer'; + originalEnableMediaInfo = settings?.enable_media_info ?? true; isEditing = true; } @@ -187,8 +200,8 @@