fix(core): modern Svelte 5 cleanup — Dexie .get() bug, typed API calls, inline confirms
- person_view.svelte: fix liveQuery using .get() (primary key, never set by V3)
→ .where('person_id').equals().first()
- people/[person_id]: same Dexie .get() fix for lq__person_obj
- person_view.svelte: replace 4x generic api.update_ae_obj → core_func.update_ae_obj__person
(removes unused api import)
- Replace all browser confirm()/alert() dialogs (9 occurrences, 6 files) with
inline two-click confirm state pattern (confirm_action = $state<string|null>)
Affected: users, accounts, contacts, addresses, people, sites
- Bootstrap doc: add Dexie .get() trap to Section 5 and Mistake #8
This commit is contained in:
@@ -22,6 +22,8 @@ let account_id = $derived($page.params.account_id ?? '');
|
||||
let account: any = $state(null);
|
||||
let loading = $state(true);
|
||||
let saving = $state(false);
|
||||
let save_success = $state(false);
|
||||
let confirm_action = $state<string | null>(null);
|
||||
|
||||
async function load_account() {
|
||||
loading = true;
|
||||
@@ -59,13 +61,18 @@ async function handle_save() {
|
||||
});
|
||||
|
||||
if (result) {
|
||||
alert('Account updated successfully');
|
||||
save_success = true;
|
||||
setTimeout(() => (save_success = false), 2500);
|
||||
}
|
||||
saving = false;
|
||||
}
|
||||
|
||||
async function handle_delete() {
|
||||
if (!confirm('Are you sure you want to disable this account?')) return;
|
||||
if (confirm_action !== 'disable_account') {
|
||||
confirm_action = 'disable_account';
|
||||
return;
|
||||
}
|
||||
confirm_action = null;
|
||||
|
||||
const result = await delete_ae_obj_id__account({
|
||||
api_cfg: $ae_api,
|
||||
@@ -98,13 +105,33 @@ async function handle_delete() {
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-2">
|
||||
<button
|
||||
class="btn btn-sm preset-filled-error font-bold shadow-lg"
|
||||
onclick={handle_delete}
|
||||
disabled={loading || saving}>
|
||||
<Trash2 size={16} class="mr-2" /> Disable
|
||||
</button>
|
||||
<div class="flex items-center gap-2">
|
||||
{#if confirm_action === 'disable_account'}
|
||||
<span class="text-sm font-bold text-red-600">Disable this account?</span>
|
||||
<button
|
||||
class="btn btn-sm preset-filled-error font-bold shadow-lg"
|
||||
onclick={handle_delete}
|
||||
disabled={loading || saving}>
|
||||
<Trash2 size={16} class="mr-2" /> Confirm Disable
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-sm preset-tonal-surface"
|
||||
onclick={() => (confirm_action = null)}>
|
||||
Cancel
|
||||
</button>
|
||||
{:else}
|
||||
<button
|
||||
class="btn btn-sm preset-filled-error font-bold shadow-lg"
|
||||
onclick={handle_delete}
|
||||
disabled={loading || saving}>
|
||||
<Trash2 size={16} class="mr-2" /> Disable
|
||||
</button>
|
||||
{/if}
|
||||
{#if save_success}
|
||||
<span class="flex items-center gap-1 text-sm font-bold text-green-600">
|
||||
<Info size={16} /> Saved
|
||||
</span>
|
||||
{/if}
|
||||
<button
|
||||
class="btn btn-sm preset-filled-primary font-bold shadow-lg"
|
||||
onclick={handle_save}
|
||||
|
||||
Reference in New Issue
Block a user