diff --git a/frontend/src/routes/documents/new/+page.server.ts b/frontend/src/routes/documents/new/+page.server.ts index 4cfe77e7..6ef92f14 100644 --- a/frontend/src/routes/documents/new/+page.server.ts +++ b/frontend/src/routes/documents/new/+page.server.ts @@ -5,10 +5,12 @@ import { parseBackendError, getErrorMessage } from '$lib/errors'; export async function load({ fetch, - locals + locals, + url }: { fetch: typeof globalThis.fetch; locals: App.Locals; + url: URL; }) { const canWrite = locals.user?.groups?.some((g: { permissions: string[] }) => @@ -16,14 +18,41 @@ export async function load({ ) ?? false; if (!canWrite) throw error(403, 'Forbidden'); - const api = createApiClient(fetch); - const personsResult = await api.GET('/api/persons'); + const senderId = url.searchParams.get('senderId') || ''; + const receiverId = url.searchParams.get('receiverId') || ''; - if (!personsResult.response.ok) { - return { persons: [] }; + const api = createApiClient(fetch); + + let initialSenderName = ''; + let initialReceivers: { id: string; firstName: string; lastName: string }[] = []; + + const requests: Promise[] = []; + + if (senderId) { + requests.push( + api.GET('/api/persons/{id}', { params: { path: { id: senderId } } }).then(({ data }) => { + if (data) initialSenderName = `${data.firstName} ${data.lastName}`; + }) + ); } - return { persons: personsResult.data }; + if (receiverId) { + requests.push( + api.GET('/api/persons/{id}', { params: { path: { id: receiverId } } }).then(({ data }) => { + if (data) + initialReceivers = [{ id: data.id!, firstName: data.firstName, lastName: data.lastName }]; + }) + ); + } + + const [personsResult] = await Promise.all([api.GET('/api/persons'), ...requests]); + + return { + persons: personsResult.response.ok ? personsResult.data : [], + initialSenderId: senderId, + initialSenderName, + initialReceivers + }; } export const actions = { diff --git a/frontend/src/routes/documents/new/+page.svelte b/frontend/src/routes/documents/new/+page.svelte index e1b1d2d4..3727283b 100644 --- a/frontend/src/routes/documents/new/+page.svelte +++ b/frontend/src/routes/documents/new/+page.svelte @@ -5,11 +5,13 @@ import PersonTypeahead from '$lib/components/PersonTypeahead.svelte'; import PersonMultiSelect from '$lib/components/PersonMultiSelect.svelte'; import { m } from '$lib/paraglide/messages.js'; -let { form } = $props(); +let { data, form } = $props(); let tags: string[] = $state([]); -let senderId = $state(''); -let selectedReceivers: { id: string; firstName: string; lastName: string }[] = $state([]); +let senderId = $state(data.initialSenderId); +let selectedReceivers: { id: string; firstName: string; lastName: string }[] = $state( + data.initialReceivers +); let dateDisplay = $state(''); let dateIso = $state(''); @@ -120,7 +122,12 @@ function handleDateInput(e: Event) {
- +