From bc0da66d2a28c36754a1a0241f403361fee9f047 Mon Sep 17 00:00:00 2001 From: vegard Date: Mon, 16 Mar 2026 03:40:44 +0100 Subject: [PATCH] Fix: revisions-API brukte created_at men kolonnen heter edited_at MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ga 500 Internal Error når frontend forsøkte å laste revisjoner. Co-Authored-By: Claude Opus 4.6 --- web/src/lib/components/MessageBox.svelte | 114 ++++++++++++++---- .../messages/[messageId]/revisions/+server.ts | 4 +- 2 files changed, 95 insertions(+), 23 deletions(-) diff --git a/web/src/lib/components/MessageBox.svelte b/web/src/lib/components/MessageBox.svelte index e68d707..26179e1 100644 --- a/web/src/lib/components/MessageBox.svelte +++ b/web/src/lib/components/MessageBox.svelte @@ -122,11 +122,24 @@ editBody = ''; } + let confirmingDelete = $state(false); + function handleDelete(e: MouseEvent) { e.stopPropagation(); + confirmingDelete = true; + } + + function confirmDelete(e: MouseEvent) { + e.stopPropagation(); + confirmingDelete = false; callbacks.onDelete?.(message.id); } + function cancelDelete(e: MouseEvent) { + e.stopPropagation(); + confirmingDelete = false; + } + function handleReply(e: MouseEvent) { e.stopPropagation(); callbacks.onReply?.(message.id); @@ -154,7 +167,7 @@ interface Revision { id: string; body: string; - created_at: string; + edited_at: string; } let revisions = $state([]); @@ -253,32 +266,44 @@ {/if} {/if} - +
- {#if callbacks.onReply} - - {/if} - {#if callbacks.onConvertToKanban} - - {/if} - {#if callbacks.onConvertToCalendar} - - {/if} - {#if callbacks.onMagic} - - {/if} - {#if callbacks.onTogglePin} - - {/if} - {#if isOwnMessage && !editing} - {#if callbacks.onEdit} +
+ {#if callbacks.onReply} + + {/if} + {#if isOwnMessage && !editing && callbacks.onEdit} {/if} - {#if callbacks.onDelete} - + {#if callbacks.onConvertToKanban} + {/if} + {#if callbacks.onConvertToCalendar} + + {/if} + {#if callbacks.onMagic} + + {/if} +
+ {#if callbacks.onTogglePin || (isOwnMessage && !editing && callbacks.onDelete)} +
+
+ {#if callbacks.onTogglePin} + + {/if} + {#if isOwnMessage && !editing && callbacks.onDelete} + + {/if} +
{/if}
+ {#if confirmingDelete} +
+ Slette melding? + + +
+ {/if} {#if editing}
{ if (e.key === 'Escape') cancelEdit(); }}> @@ -472,6 +497,53 @@ background: rgba(220, 38, 38, 0.25); } + .messagebox__toolbar-group { + display: flex; + gap: 0.1rem; + } + + .messagebox__toolbar-divider { + width: 1px; + background: #2d3148; + margin: 0.1rem 0.15rem; + } + + .messagebox__confirm-delete { + display: flex; + align-items: center; + gap: 0.4rem; + font-size: 0.7rem; + color: #f87171; + padding: 0.2rem 0; + } + + .messagebox__confirm-btn { + font-size: 0.65rem; + padding: 0.15rem 0.4rem; + border-radius: 4px; + border: none; + cursor: pointer; + font-family: inherit; + } + + .messagebox__confirm-btn--yes { + background: rgba(220, 38, 38, 0.3); + color: #f87171; + } + + .messagebox__confirm-btn--yes:hover { + background: rgba(220, 38, 38, 0.5); + } + + .messagebox__confirm-btn--no { + background: none; + color: #8b92a5; + } + + .messagebox__confirm-btn--no:hover { + color: #e1e4e8; + } + /* === Inline edit === */ .messagebox__edit { margin-top: 0.2rem; diff --git a/web/src/routes/api/messages/[messageId]/revisions/+server.ts b/web/src/routes/api/messages/[messageId]/revisions/+server.ts index 210bf2e..41ac565 100644 --- a/web/src/routes/api/messages/[messageId]/revisions/+server.ts +++ b/web/src/routes/api/messages/[messageId]/revisions/+server.ts @@ -10,13 +10,13 @@ export const GET: RequestHandler = async ({ params, locals }) => { if (!locals.workspace || !locals.user) error(401); const revisions = await sql` - SELECT r.id, r.body, r.created_at + SELECT r.id, r.body, r.edited_at FROM message_revisions r JOIN messages m ON m.id = r.message_id JOIN nodes n ON n.id = m.id WHERE r.message_id = ${params.messageId}::uuid AND n.workspace_id = ${locals.workspace.id} - ORDER BY r.created_at DESC + ORDER BY r.edited_at DESC `; return json({ revisions });