From df68aa8aef82e10826b6806c0454c7141eb499f0 Mon Sep 17 00:00:00 2001 From: "bert.hausmans" Date: Wed, 15 Apr 2026 20:28:38 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20email=20infrastructure=20frontend=20?= =?UTF-8?q?=E2=80=94=20settings,=20templates,=20and=20log=20tabs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds three new tabs to the organisation settings page: - E-mail opmaak: replaces old EmailBrandingTab to use the new organisation_email_settings API (logo, colors, footer, reply-to) - E-mail templates: list/edit/preview/test/reset all 6 template types with variable hints, defaults comparison, and iframe preview - E-mail log: server-side paginated table with filters (search, status, type, date range), status chips, and expandable row details Supporting files: - types/email.ts: TypeScript interfaces for settings, templates, logs - composables/api/useEmail.ts: TanStack Query hooks for all email endpoints Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/app/components.d.ts | 2 + .../organisation/EmailBrandingTab.vue | 208 +++++--- .../components/organisation/EmailLogTab.vue | 349 ++++++++++++++ .../organisation/EmailTemplatesTab.vue | 450 ++++++++++++++++++ apps/app/src/composables/api/useEmail.ts | 164 +++++++ apps/app/src/pages/organisation/settings.vue | 12 +- apps/app/src/types/email.ts | 102 ++++ 7 files changed, 1211 insertions(+), 76 deletions(-) create mode 100644 apps/app/src/components/organisation/EmailLogTab.vue create mode 100644 apps/app/src/components/organisation/EmailTemplatesTab.vue create mode 100644 apps/app/src/composables/api/useEmail.ts create mode 100644 apps/app/src/types/email.ts diff --git a/apps/app/components.d.ts b/apps/app/components.d.ts index 3642cb50..02a2e69c 100644 --- a/apps/app/components.d.ts +++ b/apps/app/components.d.ts @@ -59,6 +59,8 @@ declare module 'vue' { EditPersonDialog: typeof import('./src/components/persons/EditPersonDialog.vue')['default'] EditSectionDialog: typeof import('./src/components/sections/EditSectionDialog.vue')['default'] EmailBrandingTab: typeof import('./src/components/organisation/EmailBrandingTab.vue')['default'] + EmailLogTab: typeof import('./src/components/organisation/EmailLogTab.vue')['default'] + EmailTemplatesTab: typeof import('./src/components/organisation/EmailTemplatesTab.vue')['default'] EnableOneTimePasswordDialog: typeof import('./src/components/dialogs/EnableOneTimePasswordDialog.vue')['default'] ErrorHeader: typeof import('./src/components/ErrorHeader.vue')['default'] EventMetricCards: typeof import('./src/components/events/EventMetricCards.vue')['default'] diff --git a/apps/app/src/components/organisation/EmailBrandingTab.vue b/apps/app/src/components/organisation/EmailBrandingTab.vue index 33e1bfac..bb4845eb 100644 --- a/apps/app/src/components/organisation/EmailBrandingTab.vue +++ b/apps/app/src/components/organisation/EmailBrandingTab.vue @@ -1,6 +1,6 @@ + + +
+ + + + + + + +
+
+ + + + - + Opslaan - - diff --git a/apps/app/src/components/organisation/EmailLogTab.vue b/apps/app/src/components/organisation/EmailLogTab.vue new file mode 100644 index 00000000..431929aa --- /dev/null +++ b/apps/app/src/components/organisation/EmailLogTab.vue @@ -0,0 +1,349 @@ + + + diff --git a/apps/app/src/components/organisation/EmailTemplatesTab.vue b/apps/app/src/components/organisation/EmailTemplatesTab.vue new file mode 100644 index 00000000..12cd44c2 --- /dev/null +++ b/apps/app/src/components/organisation/EmailTemplatesTab.vue @@ -0,0 +1,450 @@ + + +