diff --git a/frontend/src/lib/document/DocumentMultiSelect.svelte b/frontend/src/lib/document/DocumentMultiSelect.svelte index fba80f83..8da29855 100644 --- a/frontend/src/lib/document/DocumentMultiSelect.svelte +++ b/frontend/src/lib/document/DocumentMultiSelect.svelte @@ -1,22 +1,11 @@ @@ -105,7 +69,7 @@ function formatDocLabel(doc: DocumentOption): string { - {formatDocLabel(doc)} + {formatDocumentOption(doc)} removeDocument(doc.id)} @@ -152,7 +116,7 @@ function formatDocLabel(doc: DocumentOption): string { role="button" tabindex="0" > - {formatDocLabel(doc)} + {formatDocumentOption(doc)} {/each} {/if} diff --git a/frontend/src/lib/document/DocumentPickerDropdown.svelte b/frontend/src/lib/document/DocumentPickerDropdown.svelte index e80630e2..c6de5f4e 100644 --- a/frontend/src/lib/document/DocumentPickerDropdown.svelte +++ b/frontend/src/lib/document/DocumentPickerDropdown.svelte @@ -1,16 +1,11 @@ picker.close()} class="relative"> @@ -113,7 +83,7 @@ function formatDocLabel(doc: DocumentOption): string { : 'cursor-pointer hover:bg-muted focus:bg-muted focus:outline-none' ].join(' ')} > - {formatDocLabel(doc)} + {formatDocumentOption(doc)} {#if disabled} {m.journey_already_added()} {/if} diff --git a/frontend/src/lib/document/documentTypeahead.ts b/frontend/src/lib/document/documentTypeahead.ts new file mode 100644 index 00000000..4853298a --- /dev/null +++ b/frontend/src/lib/document/documentTypeahead.ts @@ -0,0 +1,40 @@ +import type { components } from '$lib/generated/api'; +import { createTypeahead } from '$lib/shared/hooks/useTypeahead.svelte'; +import { formatDocumentDate, type DatePrecision } from '$lib/shared/utils/documentDate'; +import { getLocale } from '$lib/paraglide/runtime.js'; + +type DocumentListItem = components['schemas']['DocumentListItem']; + +export type DocumentOption = Pick< + DocumentListItem, + 'id' | 'title' | 'documentDate' | 'metaDatePrecision' | 'metaDateEnd' +>; + +export function createDocumentTypeahead() { + return createTypeahead({ + fetchUrl: (q) => + fetch(`/api/documents/search?q=${encodeURIComponent(q)}&size=10`) + .then((r) => r.json()) + .then((b: { items: DocumentListItem[] }) => + b.items.map((it) => ({ + id: it.id, + title: it.title, + documentDate: it.documentDate, + metaDatePrecision: it.metaDatePrecision, + metaDateEnd: it.metaDateEnd + })) + ) + }); +} + +export function formatDocumentOption(doc: DocumentOption): string { + if (!doc.documentDate) return doc.title; + const label = formatDocumentDate( + doc.documentDate, + doc.metaDatePrecision as DatePrecision, + doc.metaDateEnd, + null, + getLocale() + ); + return `${doc.title} · ${label}`; +} diff --git a/frontend/src/lib/geschichte/JourneyAddBar.svelte b/frontend/src/lib/geschichte/JourneyAddBar.svelte index 0ce003f2..c9af4b61 100644 --- a/frontend/src/lib/geschichte/JourneyAddBar.svelte +++ b/frontend/src/lib/geschichte/JourneyAddBar.svelte @@ -1,13 +1,7 @@