From 164fc735328262d0f7764c41cad8d48fd4347225 Mon Sep 17 00:00:00 2001 From: Thomas Richter Date: Sat, 31 Jan 2026 13:04:10 +0100 Subject: [PATCH] feat(04-02): add pin button, due date picker, and pinned section UI - Add pin button in expanded view with toggle functionality - Add due date picker in expanded view with date input - Show pin indicator and due date in collapsed view - Separate EntryList into pinned and unpinned sections - Pinned section appears at top with header label --- src/lib/components/EntryCard.svelte | 63 +++++++++++++++++++++++++++++ src/lib/components/EntryList.svelte | 27 ++++++++++--- 2 files changed, 85 insertions(+), 5 deletions(-) diff --git a/src/lib/components/EntryCard.svelte b/src/lib/components/EntryCard.svelte index 05b7918..2f94892 100644 --- a/src/lib/components/EntryCard.svelte +++ b/src/lib/components/EntryCard.svelte @@ -27,6 +27,7 @@ let editTitle = $state(entry.title || ''); let editContent = $state(entry.content); let editType = $state(entry.type); + let editDueDate = $state(entry.dueDate || ''); // Sync edit state when entry changes (after invalidateAll) $effect(() => { @@ -34,6 +35,7 @@ editTitle = entry.title || ''; editContent = entry.content; editType = entry.type; + editDueDate = entry.dueDate || ''; } }); @@ -155,6 +157,34 @@ // invalidateAll is called by ImageUpload, so nothing extra needed here } + async function handleTogglePin() { + const formData = new FormData(); + formData.append('id', entry.id); + + await fetch('?/togglePin', { + method: 'POST', + body: formData + }); + + await invalidateAll(); + } + + async function handleDueDateChange(e: Event) { + const input = e.target as HTMLInputElement; + editDueDate = input.value; + + const formData = new FormData(); + formData.append('id', entry.id); + formData.append('dueDate', input.value); + + await fetch('?/updateDueDate', { + method: 'POST', + body: formData + }); + + await invalidateAll(); + } + async function handleCameraInput(e: Event) { const input = e.target as HTMLInputElement; const file = input.files?.[0]; @@ -266,6 +296,14 @@ {#if isSaving} Saving... {/if} + {#if entry.pinned} + + + + {/if} + {#if entry.dueDate && !expanded} + {entry.dueDate} + {/if} {#if entry.images?.length > 0 && !expanded} + +
+ + +
+ + +
+
+
{:else} -
- {#each entries as entry (entry.id)} - - {/each} -
+ {#if pinnedEntries.length > 0} +
+

Pinned

+
+ {#each pinnedEntries as entry (entry.id)} + + {/each} +
+
+ {/if} + + {#if unpinnedEntries.length > 0} +
+ {#each unpinnedEntries as entry (entry.id)} + + {/each} +
+ {/if} {/if}