From 7a001d27a5204b792ee33093eaa52fbc0d601c6b Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Wed, 11 Jun 2025 20:18:46 +0200 Subject: [PATCH] refactor: email template preview modal (#19119) --- .../template-settings.svelte | 109 ++++++++---------- .../modals/EmailTemplatePreviewModal.svelte | 23 ++++ 2 files changed, 68 insertions(+), 64 deletions(-) create mode 100644 web/src/lib/modals/EmailTemplatePreviewModal.svelte diff --git a/web/src/lib/components/admin-page/settings/template-settings/template-settings.svelte b/web/src/lib/components/admin-page/settings/template-settings/template-settings.svelte index 8e85664750..872b4b9833 100644 --- a/web/src/lib/components/admin-page/settings/template-settings/template-settings.svelte +++ b/web/src/lib/components/admin-page/settings/template-settings/template-settings.svelte @@ -4,9 +4,11 @@ import LoadingSpinner from '$lib/components/shared-components/loading-spinner.svelte'; import SettingAccordion from '$lib/components/shared-components/settings/setting-accordion.svelte'; import SettingTextarea from '$lib/components/shared-components/settings/setting-textarea.svelte'; + import { modalManager } from '$lib/managers/modal-manager.svelte'; + import EmailTemplatePreviewModal from '$lib/modals/EmailTemplatePreviewModal.svelte'; import { handleError } from '$lib/utils/handle-error'; import { type SystemConfigDto, type SystemConfigTemplateEmailsDto, getNotificationTemplateAdmin } from '@immich/sdk'; - import { Button, Modal, ModalBody } from '@immich/ui'; + import { Button } from '@immich/ui'; import { mdiEyeOutline } from '@mdi/js'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; @@ -18,14 +20,13 @@ let { savedConfig, config = $bindable() }: Props = $props(); - let htmlPreview = $state(''); let loadingPreview = $state(false); const getTemplate = async (name: string, template: string) => { try { loadingPreview = true; - const result = await getNotificationTemplateAdmin({ name, templateDto: { template } }); - htmlPreview = result.html; + const { html } = await getNotificationTemplateAdmin({ name, templateDto: { template } }); + await modalManager.show(EmailTemplatePreviewModal, { html }); } catch (error) { handleError(error, 'Could not load template.'); } finally { @@ -33,10 +34,6 @@ } }; - const closePreviewModal = () => { - htmlPreview = ''; - }; - const templateConfigs = [ { label: $t('admin.template_email_welcome'), @@ -66,63 +63,47 @@ }; -
-
-
-
- -
-

- - {$t('admin.template_email_if_empty')} - -

-
- {#if loadingPreview} - - {/if} +
+ +
+ +
+

+ + {$t('admin.template_email_if_empty')} + +

+
+ {#if loadingPreview} + + {/if} - {#each templateConfigs as { label, templateKey, descriptionTags, templateName } (templateKey)} - -
- -
- {/each} -
-
-
- - {#if htmlPreview} - - -
- + > + + {$t('admin.template_email_preview')} +
-
-
- {/if} - -
+ {/each} +
+
+
+
diff --git a/web/src/lib/modals/EmailTemplatePreviewModal.svelte b/web/src/lib/modals/EmailTemplatePreviewModal.svelte new file mode 100644 index 0000000000..3165c654da --- /dev/null +++ b/web/src/lib/modals/EmailTemplatePreviewModal.svelte @@ -0,0 +1,23 @@ + + + + +
+ +
+
+