diff --git a/docs/fikseliste.md b/docs/fikseliste.md index 2dab8b4..6f946d5 100644 --- a/docs/fikseliste.md +++ b/docs/fikseliste.md @@ -27,7 +27,7 @@ Funnet ved manuell testing av frontend. Fikses som en samlet sesjon. - [x] NodeEditor.svelte og NewChatDialog.svelte slettet (kun brukt av mottak). - [x] LandingPage.svelte slettet (landingssiden er statisk HTML på synops.no). - [ ] Alle separate ruter (/chat, /board, /calendar, /diary, /graph, /studio, /collection, /editorial, /admin) blir deep links som åpner workspace med riktig panel. -- [ ] "Ny samtale", "Nytt brett", "Ny samling" flyttes til verktøymeny i header. +- [x] "Ny samtale", "Nytt brett", "Ny samling" flyttes til verktøymeny i header. - [ ] Dagbok, kalender, graf er paneler du henter fra verktøymenyen. ## Domene/ruting/auth (ferdig) diff --git a/frontend/src/lib/components/ContextHeader.svelte b/frontend/src/lib/components/ContextHeader.svelte index bde1b65..eca610a 100644 --- a/frontend/src/lib/components/ContextHeader.svelte +++ b/frontend/src/lib/components/ContextHeader.svelte @@ -6,7 +6,7 @@ import type { Node } from '$lib/realtime'; import { getRankedNodeIds, recordVisit } from '$lib/workspace/recency.js'; import { TRAIT_PANEL_INFO } from '$lib/workspace/types.js'; - import { updateNode, createNode, createEdge, deleteNode } from '$lib/api'; + import { updateNode, createNode, createEdge, deleteNode, createCommunication } from '$lib/api'; import { type ThemeConfig, type ThemeSurface, @@ -245,6 +245,56 @@ toolMenuOpen = false; } + // --- Quick-create actions --- + let isCreatingItem = $state(false); + + async function createNewChat() { + if (!accessToken || !userId || isCreatingItem) return; + isCreatingItem = true; + toolMenuOpen = false; + try { + const { node_id } = await createCommunication(accessToken, { + title: 'Ny samtale', + participants: [userId], + visibility: 'hidden', + }); + goto(`/chat/${node_id}`); + } catch (e) { + console.error('Feil ved oppretting av samtale:', e); + } finally { + isCreatingItem = false; + } + } + + async function createNewBoard() { + if (!accessToken || !userId || isCreatingItem) return; + isCreatingItem = true; + toolMenuOpen = false; + try { + const { node_id } = await createNode(accessToken, { + node_kind: 'collection', + title: 'Nytt brett', + visibility: 'hidden', + metadata: { traits: { kanban: {} } }, + }); + await createEdge(accessToken, { + source_id: userId, + target_id: node_id, + edge_type: 'owner', + }); + goto(`/collection/${node_id}`); + } catch (e) { + console.error('Feil ved oppretting av brett:', e); + } finally { + isCreatingItem = false; + } + } + + function createNewCollection() { + toolMenuOpen = false; + goto('/collection/new'); + } + // ========================================================================= // Settings menu (theme + sign out) // ========================================================================= @@ -467,6 +517,31 @@ {#if toolMenuOpen}