refactor(web): pushToast store + ToastHost; 8 sites migrated (W3)
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
} from '$lib/api/admin';
|
||||
import { qk } from '$lib/api/queries';
|
||||
import { errCode } from '$lib/api/errors';
|
||||
import { pushToast } from '$lib/stores/toast.svelte';
|
||||
import Modal from '$lib/components/Modal.svelte';
|
||||
import type { LidarrConfig, LidarrTestResult } from '$lib/api/types';
|
||||
|
||||
@@ -235,17 +236,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Toast -------------------------------------------------------------------
|
||||
|
||||
let toast = $state<string | null>(null);
|
||||
let toastTimer: ReturnType<typeof setTimeout> | undefined;
|
||||
|
||||
function showToast(msg: string) {
|
||||
toast = msg;
|
||||
if (toastTimer) clearTimeout(toastTimer);
|
||||
toastTimer = setTimeout(() => { toast = null; }, 4000);
|
||||
}
|
||||
|
||||
// SMTP config -------------------------------------------------------------
|
||||
|
||||
const smtpStore = $derived(createSMTPConfigQuery());
|
||||
@@ -272,11 +262,11 @@
|
||||
await updateSMTPConfig({ ...smtpForm, password: smtpPasswordInput });
|
||||
await client.invalidateQueries({ queryKey: qk.smtpConfig() });
|
||||
smtpPasswordInput = '';
|
||||
showToast('SMTP config saved.');
|
||||
pushToast('SMTP config saved.');
|
||||
} catch (e: unknown) {
|
||||
const code = errCode(e);
|
||||
if (code === 'missing_fields') showToast('Host and from address are required when enabled.');
|
||||
else showToast(`Save failed: ${code}`);
|
||||
if (code === 'missing_fields') pushToast('Host and from address are required when enabled.', 'error');
|
||||
else pushToast(`Save failed: ${code}`, 'error');
|
||||
} finally {
|
||||
smtpSaving = false;
|
||||
}
|
||||
@@ -286,14 +276,14 @@
|
||||
smtpTesting = true;
|
||||
try {
|
||||
await testSMTPConfig();
|
||||
showToast('Test email sent. Check your inbox.');
|
||||
pushToast('Test email sent. Check your inbox.');
|
||||
} catch (e: unknown) {
|
||||
const code = errCode(e);
|
||||
const message = (e as { message?: string })?.message;
|
||||
if (code === 'no_email_on_file') showToast('Set your email in /settings before testing.');
|
||||
else if (code === 'not_configured') showToast('Save the SMTP config first.');
|
||||
else if (code === 'send_failed') showToast(`Send failed: ${message || 'see server logs'}`);
|
||||
else showToast(`Test failed: ${code}`);
|
||||
if (code === 'no_email_on_file') pushToast('Set your email in /settings before testing.', 'error');
|
||||
else if (code === 'not_configured') pushToast('Save the SMTP config first.', 'error');
|
||||
else if (code === 'send_failed') pushToast(`Send failed: ${message || 'see server logs'}`, 'error');
|
||||
else pushToast(`Test failed: ${code}`, 'error');
|
||||
} finally {
|
||||
smtpTesting = false;
|
||||
}
|
||||
@@ -302,13 +292,6 @@
|
||||
|
||||
<svelte:head><title>{pageTitle('Admin · Integrations')}</title></svelte:head>
|
||||
|
||||
{#if toast}
|
||||
<div data-testid="toast" role="status"
|
||||
class="fixed bottom-4 right-4 z-50 rounded-md border border-border bg-surface px-4 py-2 text-sm text-text-primary shadow">
|
||||
{toast}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="space-y-6">
|
||||
<header class="flex items-center justify-between">
|
||||
<h2 class="font-display text-2xl font-medium text-text-primary">Integrations</h2>
|
||||
|
||||
Reference in New Issue
Block a user