From bc1788941fe8b5f9c7fca3817a2af46bfa843de2 Mon Sep 17 00:00:00 2001 From: Till JS Date: Tue, 31 Mar 2026 13:10:55 +0200 Subject: [PATCH] refactor(contacts,todo): extract shared utilities, eliminate duplication Contacts: - Extract getDisplayName() + getInitials() to lib/utils/contact-display.ts (was duplicated across 7 files) - Export UNKNOWN_CONTACT_NAME constant Todo: - Extract getSubtaskProgress() to lib/utils/task-helpers.ts (was duplicated in TaskItem + KanbanTaskCard) - Add formatDateForInput() + dateInputToISO() to date-display.ts Co-Authored-By: Claude Opus 4.6 (1M context) --- .../lib/components/ContactDetailModal.svelte | 14 +++------- .../web/src/lib/components/SearchModal.svelte | 15 +---------- .../components/duplicates/MergeModal.svelte | 15 +---------- .../views/ContactAlphabetView.svelte | 15 +---------- .../components/views/ContactGridView.svelte | 15 +---------- .../apps/web/src/lib/utils/contact-display.ts | 26 +++++++++++++++++++ .../web/src/routes/(app)/archive/+page.svelte | 15 +---------- .../src/routes/(app)/duplicates/+page.svelte | 15 +---------- .../web/src/lib/components/TaskItem.svelte | 10 +++---- .../components/kanban/KanbanTaskCard.svelte | 7 ++--- .../apps/web/src/lib/utils/date-display.ts | 17 ++++++++++++ .../apps/web/src/lib/utils/task-helpers.ts | 9 +++++++ 12 files changed, 67 insertions(+), 106 deletions(-) create mode 100644 apps/contacts/apps/web/src/lib/utils/contact-display.ts create mode 100644 apps/todo/apps/web/src/lib/utils/task-helpers.ts diff --git a/apps/contacts/apps/web/src/lib/components/ContactDetailModal.svelte b/apps/contacts/apps/web/src/lib/components/ContactDetailModal.svelte index 7393f4661..2cb384cd2 100644 --- a/apps/contacts/apps/web/src/lib/components/ContactDetailModal.svelte +++ b/apps/contacts/apps/web/src/lib/components/ContactDetailModal.svelte @@ -2,6 +2,7 @@ import { goto } from '$app/navigation'; import { onMount } from 'svelte'; import { contactsApi, photoApi, type Contact } from '$lib/api/contacts'; + import { getDisplayName } from '$lib/utils/contact-display'; import ContactNotes from './ContactNotes.svelte'; import ContactTasks from './ContactTasks.svelte'; import { ContactDetailSkeleton } from '$lib/components/skeletons'; @@ -128,15 +129,6 @@ bluesky = contact.bluesky || ''; } - function getDisplayName() { - if (!contact) return ''; - if (contact.displayName) return contact.displayName; - if (contact.firstName || contact.lastName) { - return [contact.firstName, contact.lastName].filter(Boolean).join(' '); - } - return contact.email || 'Unbekannt'; - } - async function loadContact() { loading = true; error = null; @@ -551,7 +543,7 @@ {#if contact.photoUrl} {getDisplayName()}