working epics ioc and tested

This commit is contained in:
Martino Ferrari
2026-05-04 21:13:36 +02:00
parent 90669c5fd6
commit 0a5a85e4c4
25 changed files with 1550 additions and 136 deletions
+12 -5
View File
@@ -15,6 +15,8 @@ export default function App() {
const [mode, setMode] = useState<AppMode>('view');
const [wsStatus, setWsStatus] = useState('connecting');
const [editTarget, setEditTarget] = useState<Interface | null>(null);
// Interface to show when returning to view mode after editing
const [viewTarget, setViewTarget] = useState<Interface | null>(null);
useEffect(() => {
const unsub = wsClient.status.subscribe(setWsStatus);
@@ -36,7 +38,8 @@ export default function App() {
setMode('edit');
}
function exitEdit() {
function exitEdit(iface: Interface) {
setViewTarget(iface);
setMode('view');
setEditTarget(null);
}
@@ -46,10 +49,14 @@ export default function App() {
{wsStatus === 'disconnected' && (
<div class="connection-banner">WebSocket disconnected reconnecting</div>
)}
{mode === 'view'
? <ViewMode onEdit={enterEdit} />
: <EditMode initial={editTarget} onDone={exitEdit} />
}
{/* ViewMode is always mounted so PlotPanel ring-buffers are never destroyed.
EditMode is conditionally rendered; it resets from props each time anyway. */}
<div style={`display:${mode === 'view' ? 'contents' : 'none'}`}>
<ViewMode onEdit={enterEdit} initialInterface={viewTarget} />
</div>
{mode === 'edit' && (
<EditMode initial={editTarget} onDone={exitEdit} />
)}
</div>
);
}