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'; }