feat(conversations): swap button, year dividers, summary bar, new-doc link #43

Merged
marcel merged 11 commits from feat/conversation-page-improvements into main 2026-03-20 21:35:23 +01:00
2 changed files with 46 additions and 10 deletions
Showing only changes of commit 4026bb9003 - Show all commits

View File

@@ -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<void>[] = [];
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 = {

View File

@@ -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) {
<!-- Absender -->
<div>
<PersonTypeahead name="senderId" label={m.form_label_sender()} bind:value={senderId} />
<PersonTypeahead
name="senderId"
label={m.form_label_sender()}
bind:value={senderId}
initialName={data.initialSenderName}
/>
</div>
<!-- Empfänger -->