From b24f3230835e6c43fa43290f438f6e53a3c672d8 Mon Sep 17 00:00:00 2001 From: vegard Date: Sun, 15 Mar 2026 23:08:21 +0100 Subject: [PATCH] Fix: bevar SpacetimeDB-meldinger ved refresh, stille feil ved 404 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - loadFromPg() merger nå PG-data med eksisterende SpacetimeDB-meldinger i stedet for å overskrive (hindrer at chatten tømmes) - onReaction/onTogglePin kaller bare refresh() ved OK-respons - Fjernet debug-logging Co-Authored-By: Claude Opus 4.6 --- web/src/lib/blocks/ChatBlock.svelte | 32 ++++++++++++++++------------ web/src/lib/chat/spacetime.svelte.ts | 10 +++++++-- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/web/src/lib/blocks/ChatBlock.svelte b/web/src/lib/blocks/ChatBlock.svelte index b57d1e0..bca8b04 100644 --- a/web/src/lib/blocks/ChatBlock.svelte +++ b/web/src/lib/blocks/ChatBlock.svelte @@ -19,22 +19,26 @@ const chatCallbacks = { onMentionClick: (entityId: string) => goto(`/entities/${entityId}`), onReaction: async (messageId: string, reaction: string) => { - const msg = chat?.messages.find(m => m.id === messageId); - const existing = msg?.reactions?.find(r => r.reaction === reaction); - await fetch(`/api/messages/${messageId}/reactions`, { - method: existing?.user_reacted ? 'DELETE' : 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ reaction }) - }); - await chat?.refresh(); + try { + const msg = chat?.messages.find(m => m.id === messageId); + const existing = msg?.reactions?.find(r => r.reaction === reaction); + const res = await fetch(`/api/messages/${messageId}/reactions`, { + method: existing?.user_reacted ? 'DELETE' : 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ reaction }) + }); + if (res.ok) await chat?.refresh(); + } catch { /* stille feil */ } }, onTogglePin: async (messageId: string, pinned: boolean) => { - await fetch(`/api/messages/${messageId}`, { - method: 'PATCH', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ pinned }) - }); - await chat?.refresh(); + try { + const res = await fetch(`/api/messages/${messageId}`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ pinned }) + }); + if (res.ok) await chat?.refresh(); + } catch { /* stille feil */ } } }; diff --git a/web/src/lib/chat/spacetime.svelte.ts b/web/src/lib/chat/spacetime.svelte.ts index bad0e7a..9200b59 100644 --- a/web/src/lib/chat/spacetime.svelte.ts +++ b/web/src/lib/chat/spacetime.svelte.ts @@ -42,13 +42,19 @@ export function createSpacetimeChat( }; } - // Hent historikk fra PG + // Hent historikk fra PG (merger med SpacetimeDB-meldinger som ikke finnes i PG) async function loadFromPg() { try { const res = await fetch(`/api/channels/${channelId}/messages`); if (!res.ok) throw new Error('Feil ved lasting'); const raw: Record[] = await res.json(); - messages = raw.map(toMessageData); + const pgMessages = raw.map(toMessageData); + const pgIds = new Set(pgMessages.map(m => m.id)); + // Behold SpacetimeDB-meldinger som ikke finnes i PG ennå + const spacetimeOnly = messages.filter(m => !pgIds.has(m.id)); + messages = [...pgMessages, ...spacetimeOnly].sort( + (a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime() + ); } catch { error = 'Kunne ikke laste meldinger'; }