Fix: Space/piltaster i inputs, reaktiv node-visning, edit-tilgang

Canvas: keyboard-events ignoreres når bruker skriver i input/textarea.
Space fungerer nå i søkefelt og tekstredigering.

Node Explorer: selectedNode er nå reaktiv mot nodeStore — endringer
reflekteres umiddelbart etter lagring uten å velge noden på nytt.
✏️-knapp vises bare for noder brukeren eier.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
vegard 2026-03-20 03:33:57 +00:00
parent 7974c9d53a
commit e96368cb7c
2 changed files with 23 additions and 5 deletions

View file

@ -120,6 +120,12 @@
// Keyboard listeners
$effect(() => {
function onKeyDown(e: KeyboardEvent) {
// Ikke fang tastatur-events når bruker skriver i inputs/textareas
const tag = (e.target as HTMLElement)?.tagName;
const isEditing = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'
|| (e.target as HTMLElement)?.isContentEditable;
if (isEditing) return;
if (e.code === 'Space' && !e.repeat) {
spaceHeld = true;
e.preventDefault();

View file

@ -17,9 +17,20 @@
let searchQuery = $state('');
let filterKind = $state('');
let selectedNode = $state<Node | undefined>(undefined);
let selectedNodeId = $state<string | undefined>(undefined);
let limit = $state(50);
// Reaktiv: følger nodeStore slik at endringer reflekteres umiddelbart
const selectedNode = $derived(selectedNodeId ? nodeStore.get(selectedNodeId) : undefined);
// Kan brukeren redigere denne noden?
const canEdit = $derived(
selectedNode && userId && (
selectedNode.createdBy === userId ||
userId === 'd3eebc99-9c0b-4ef8-bb6d-6bb9bd380a44' // TODO: ekte admin-sjekk
)
);
// Editing state
let editing = $state(false);
let editTitle = $state('');
@ -67,14 +78,15 @@
});
function selectNode(node: Node) {
selectedNode = node;
selectedNodeId = node.id;
editing = false;
saveError = '';
}
function navigateToNode(id: string) {
const node = nodeStore.get(id);
if (node) selectNode(node);
selectedNodeId = id;
editing = false;
saveError = '';
}
function startEditing() {
@ -201,7 +213,7 @@
<div class="ne-detail-header">
<span class="ne-detail-kind">{selectedNode.nodeKind}</span>
<div class="ne-detail-actions">
{#if !editing}
{#if !editing && canEdit}
<button class="ne-action-btn" onclick={startEditing} title="Rediger">✏️</button>
{/if}
</div>