feat: Adressbuch-Block mit Suche, Org- und Buchstabenfilter
- AdressbuchBlock: listet alle Kontakte alphabetisch mit Suche, Org-Filter-Chips und A–Z-Buchstabenfilter; /adressbuch-Seite - ContactCard: neues Design passend zu OrganisationsCard (Badges, Links) - ContactsBlock: Karussell mit snap-scroll, volle Breite - block-types, blog-utils, cms: AdressbuchBlockData, resolveAdressbuchBlocks, getContacts; BlockRenderer registriert adressbuch - Kontakt-Seite: Link auf /adressbuch statt eingebettetem Block Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1067,3 +1067,20 @@ export async function getCommentCounts(
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
/** Alle Kontakte (GET /api/content/contact), alphabetisch nach Name. */
|
||||
export async function getContacts(): Promise<Record<string, unknown>[]> {
|
||||
return cached("contact", "contact:list:all", async () => {
|
||||
const base = getBaseUrl();
|
||||
const url = new URL(`${base}/api/content/contact`);
|
||||
url.searchParams.set("_per_page", "1000");
|
||||
url.searchParams.set("_resolve", "all");
|
||||
url.searchParams.set("_depth", "2");
|
||||
url.searchParams.set("_sort", "name");
|
||||
url.searchParams.set("_order", "asc");
|
||||
const res = await cmsFetch(url.toString());
|
||||
if (!res.ok) return [];
|
||||
const data = (await res.json()) as { items?: Record<string, unknown>[] };
|
||||
return data.items ?? [];
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user