feat: Phase 2 — auth, node/edge modals, API wiring

- Login page: full-screen dark, grid bg, JWT flow
- Auth store (Zustand) + API client (axios + interceptors)
- NodeModal: add/edit form (type, label, hostname, IP, check method)
- EdgeModal: link type picker + VLAN ID + label on connect
- App: auth gate, canvas load from API (fallback to demo), Ctrl+S save
- CanvasContainer: expose onConnect prop for edge modal flow
This commit is contained in:
Pouzor
2026-03-06 23:33:55 +01:00
parent 9bb34c99cc
commit 150302c3f7
10 changed files with 776 additions and 29 deletions
@@ -7,6 +7,7 @@ import {
BackgroundVariant,
type Node,
type Edge,
type Connection,
} from '@xyflow/react'
import '@xyflow/react/dist/style.css'
import { useCanvasStore } from '@/stores/canvasStore'
@@ -14,10 +15,14 @@ import { nodeTypes } from './nodes'
import { edgeTypes } from './edges'
import type { NodeData, EdgeData } from '@/types'
export function CanvasContainer() {
interface CanvasContainerProps {
onConnect?: (connection: Connection) => void
}
export function CanvasContainer({ onConnect: onConnectProp }: CanvasContainerProps) {
const {
nodes, edges,
onNodesChange, onEdgesChange, onConnect,
onNodesChange, onEdgesChange,
setSelectedNode,
} = useCanvasStore()
@@ -36,7 +41,7 @@ export function CanvasContainer() {
edges={edges as Edge<EdgeData>[]}
onNodesChange={onNodesChange}
onEdgesChange={onEdgesChange}
onConnect={onConnect}
onConnect={onConnectProp}
onNodeClick={onNodeClick}
onPaneClick={onPaneClick}
nodeTypes={nodeTypes}