From c7ebeebe2995205ec728009d68fa7000fe3cb35c Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Thu, 7 May 2026 16:57:58 -0400 Subject: [PATCH] Add dirty-tracking to Archive Content edit: disable Save, hide Cancel when unchanged MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ArchiveContentForm interface + factory for controlled input bindings - obj_changed bindable prop wired to Cancel button visibility in parent page - Split Save button: edit mode disables when clean, create mode always enabled - Post-upload/select/remove syncs orig snapshot so file ops do not dirty the form - Fix archive_content_id_random / archive_id_random → V3 field names in edit component - Add missing file_extension field to ae_ArchiveContent type Co-Authored-By: Claude Sonnet 4.6 --- src/lib/types/ae_types.ts | 1 + .../(idaa)/archives/[archive_id]/+page.svelte | 9 +- ...a_comp__archive_content_obj_id_edit.svelte | 295 +++++++++--------- 3 files changed, 160 insertions(+), 145 deletions(-) diff --git a/src/lib/types/ae_types.ts b/src/lib/types/ae_types.ts index 896dfea6..ae41a833 100644 --- a/src/lib/types/ae_types.ts +++ b/src/lib/types/ae_types.ts @@ -863,6 +863,7 @@ export interface ae_ArchiveContent extends ae_BaseObj { hosted_file_id_random?: string; // NO LONGER USE "_random" filename?: string; + file_extension?: string; subdirectory_path?: string; } diff --git a/src/routes/idaa/(idaa)/archives/[archive_id]/+page.svelte b/src/routes/idaa/(idaa)/archives/[archive_id]/+page.svelte index 569e2a61..c6a920dd 100644 --- a/src/routes/idaa/(idaa)/archives/[archive_id]/+page.svelte +++ b/src/routes/idaa/(idaa)/archives/[archive_id]/+page.svelte @@ -51,6 +51,8 @@ import { page } from '$app/state'; // let ae_tmp: key_val = {}; // let ae_triggers: key_val = {}; +let archive_content_edit_dirty = $state(false); + // *** Quickly pull out data from parent(s) let ae_acct = $derived(data[data.account_id]); $effect(() => { @@ -502,8 +504,8 @@ onDestroy(() => { {#snippet header()}

- {#if $ae_loc.trusted_access} - + {#if $ae_loc.trusted_access && (!$idaa_slct.archive_content_id || archive_content_edit_dirty)} + - {/if} Edit Content: @@ -526,7 +527,7 @@ onDestroy(() => {

{/snippet} - + {#snippet footer()} - - @@ -761,9 +796,7 @@ $effect(() => { type="text" id="file_extension" name="file_extension" - value={$idaa_slct.archive_content_obj.file_extension - ? $idaa_slct.archive_content_obj.file_extension - : 'ext'} + bind:value={archive_content_form.file_extension} readonly={!$ae_loc.administrator_access} class="input w-24" /> @@ -787,24 +820,14 @@ $effect(() => { type="date" id="original_datetime_date" name="original_datetime_date" - value={$idaa_slct.archive_content_obj.original_datetime - ? ae_util.iso_datetime_formatter( - $idaa_slct.archive_content_obj.original_datetime, - 'date_iso' - ) - : ''} + bind:value={archive_content_form.original_datetime_date} placeholder="YYYY-MM-DD" class="input w-48" /> @@ -816,11 +839,7 @@ $effect(() => { {/if} @@ -850,7 +865,7 @@ $effect(() => { type="text" id="original_location" name="original_location" - value={$idaa_slct.archive_content_obj.original_location} + bind:value={archive_content_form.original_location} class="input w-96" /> @@ -895,9 +910,7 @@ $effect(() => { id="hide_yes" name="hide" value={true} - bind:group={ - $idaa_slct.archive_content_obj.hide - } + bind:group={archive_content_form.hide} class="radio form-check-input" /> @@ -907,9 +920,7 @@ $effect(() => { id="hide_no" name="hide" value={false} - bind:group={ - $idaa_slct.archive_content_obj.hide - } + bind:group={archive_content_form.hide} class="radio form-check-input" /> @@ -926,10 +937,7 @@ $effect(() => { id="priority_yes" name="priority" value={true} - bind:group={ - $idaa_slct.archive_content_obj - .priority - } + bind:group={archive_content_form.priority} class="radio form-check-input" /> @@ -939,10 +947,7 @@ $effect(() => { id="priority_no" name="priority" value={false} - bind:group={ - $idaa_slct.archive_content_obj - .priority - } + bind:group={archive_content_form.priority} class="radio form-check-input" /> @@ -960,7 +965,7 @@ $effect(() => { >Sort @@ -988,10 +992,7 @@ $effect(() => { id="enable_yes" name="enable" value={true} - bind:group={ - $idaa_slct.archive_content_obj - .enable - } + bind:group={archive_content_form.enable} class="radio form-check-input" /> @@ -1001,10 +1002,7 @@ $effect(() => { id="enable_no" name="enable" value={false} - bind:group={ - $idaa_slct.archive_content_obj - .enable - } + bind:group={archive_content_form.enable} class="radio form-check-input" /> @@ -1014,7 +1012,7 @@ $effect(() => { + value={archive_content_form.enable} /> {/if} @@ -1049,22 +1047,37 @@ $effect(() => { d-flex align-items-center justify-content-between flex w-full flex-row items-center justify-between gap-1 "> - + {#if $idaa_slct.archive_content_id} + + {:else} + + {/if} {#if $idaa_slct.archive_content_id && !$idaa_slct.archive_content_obj?.hosted_file_id}