From 002ee1010a0dab6982751d3a5277f5f7684df596 Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 7 Apr 2026 13:31:07 +0200 Subject: [PATCH] feat(ui): add Namensverlauf read-only card to person detail page Shows historical name aliases in the left column with type labels and firstName fallback. Fetches aliases in parallel with other data. Co-Authored-By: Claude Sonnet 4.6 --- .../src/routes/persons/[id]/+page.server.ts | 6 ++- frontend/src/routes/persons/[id]/+page.svelte | 8 ++- .../persons/[id]/NameHistoryCard.svelte | 53 +++++++++++++++++++ 3 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 frontend/src/routes/persons/[id]/NameHistoryCard.svelte diff --git a/frontend/src/routes/persons/[id]/+page.server.ts b/frontend/src/routes/persons/[id]/+page.server.ts index 6b7e8f79..3c5f0f5c 100644 --- a/frontend/src/routes/persons/[id]/+page.server.ts +++ b/frontend/src/routes/persons/[id]/+page.server.ts @@ -11,10 +11,11 @@ export async function load({ params, fetch, locals }) { g.permissions.includes('WRITE_ALL') ) ?? false; - const [personResult, sentDocsResult, receivedDocsResult] = await Promise.all([ + const [personResult, sentDocsResult, receivedDocsResult, aliasesResult] = await Promise.all([ api.GET('/api/persons/{id}', { params: { path: { id } } }), api.GET('/api/persons/{id}/documents', { params: { path: { id } } }), - api.GET('/api/persons/{id}/received-documents', { params: { path: { id } } }) + api.GET('/api/persons/{id}/received-documents', { params: { path: { id } } }), + api.GET('/api/persons/{id}/aliases', { params: { path: { id } } }) ]); if (!personResult.response.ok) { @@ -26,6 +27,7 @@ export async function load({ params, fetch, locals }) { person: personResult.data!, sentDocuments: sentDocsResult.data ?? [], receivedDocuments: receivedDocsResult.data ?? [], + aliases: aliasesResult.data ?? [], canWrite }; } diff --git a/frontend/src/routes/persons/[id]/+page.svelte b/frontend/src/routes/persons/[id]/+page.svelte index e14ea2a5..a4e6380b 100644 --- a/frontend/src/routes/persons/[id]/+page.svelte +++ b/frontend/src/routes/persons/[id]/+page.svelte @@ -2,6 +2,7 @@ import { m } from '$lib/paraglide/messages.js'; import { SvelteMap } from 'svelte/reactivity'; import PersonCard from './PersonCard.svelte'; +import NameHistoryCard from './NameHistoryCard.svelte'; import CoCorrespondentsList from './CoCorrespondentsList.svelte'; import PersonDocumentList from './PersonDocumentList.svelte'; @@ -65,9 +66,14 @@ const coCorrespondents = $derived.by(() => {
- +
+ {#if data.aliases.length > 0} +
+ +
+ {/if}
diff --git a/frontend/src/routes/persons/[id]/NameHistoryCard.svelte b/frontend/src/routes/persons/[id]/NameHistoryCard.svelte new file mode 100644 index 00000000..84e34852 --- /dev/null +++ b/frontend/src/routes/persons/[id]/NameHistoryCard.svelte @@ -0,0 +1,53 @@ + + +
+

+ {m.person_alias_heading()} +

+ + {#if sorted.length === 0} +

{m.person_alias_empty()}

+ {:else} +
    + {#each sorted as alias (alias.id)} +
  • + {typeLabel(alias.type)} + + {alias.firstName ?? personFirstName} + {alias.lastName} + +
  • + {/each} +
+ {/if} +