netx/web/src/pages/topology/toolMode.ts
oliver c13ab48ba7 Improve topology UX, traffic discover logs, and CLI wrap parsing.
Paginate LLDP job items, surface port-traffic raw logs with a 300s default, harden topology discover/edit/zoom/fullscreen, and join mid-token CLI wraps before TextFSM.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 19:24:43 +08:00

54 lines
1.4 KiB
TypeScript

/** Topology editor interaction modes (NMS-style). */
export type ToolMode = "select" | "pan" | "connect";
export type ToolModeBehavior = {
nodesDraggable: boolean;
nodesConnectable: boolean;
elementsSelectable: boolean;
/** false = no pane pan on drag; true = left-drag pans; array = button indices */
panOnDrag: boolean | number[];
selectionOnDrag: boolean;
panOnScroll: boolean;
};
export function behaviorForMode(mode: ToolMode): ToolModeBehavior {
switch (mode) {
case "pan":
return {
nodesDraggable: false,
nodesConnectable: false,
elementsSelectable: false,
panOnDrag: true,
selectionOnDrag: false,
panOnScroll: true,
};
case "connect":
return {
nodesDraggable: false,
nodesConnectable: true,
elementsSelectable: true,
panOnDrag: [1, 2],
selectionOnDrag: false,
panOnScroll: true,
};
case "select":
default:
return {
nodesDraggable: true,
nodesConnectable: false,
elementsSelectable: true,
panOnDrag: [1, 2],
selectionOnDrag: true,
panOnScroll: true,
};
}
}
export function toolModeFromKey(key: string): ToolMode | null {
const k = key.toLowerCase();
if (k === "v") return "select";
if (k === "h") return "pan";
if (k === "c") return "connect";
return null;
}