import { useState } from 'react';
import { InventoryPage } from './pages/InventoryPage';
import './app-shell.css';
type TabKey = 'overview' | 'inventory' | 'discovery' | 'topology' | 'wip';
const tabs: { key: TabKey; label: string; description: string }[] = [
{ key: 'overview', label: 'Overview', description: 'Stato generale del workspace NetMapper.' },
{ key: 'inventory', label: 'Inventory', description: 'Tree fisico/logico e navigazione tra oggetti.' },
{ key: 'discovery', label: 'Discovery', description: 'Pipeline e job di raccolta dati.' },
{ key: 'topology', label: 'Topology', description: 'Vista futura della mappa multilivello.' },
{ key: 'wip', label: 'WIP', description: 'Blocchi provvisori, note e parti in corso.' },
];
function ShellCard({ title, children, tone = 'default' }: { title: string; children: React.ReactNode; tone?: 'default' | 'accent' | 'warning' }) {
return (
);
}
function OverviewTab() {
return (
- Frontend inventory collegato al backend.
- Tree gerarchico e context panel attivi.
- Navigazione tra parent, children e relazioni disponibile.
- Reintegro layout persistente.
- Tab dedicate per viste future.
- Preparazione vista topology multilivello.
- La discovery avanzata è ancora in fase iniziale.
- I badge e il contesto nodo sono MVP, non finali.
- Serve reintegro progressivo delle sezioni storiche.
);
}
function DiscoveryTab() {
return (
- Seed scan subnet.
- Classificazione host e object binding.
- Correlazione con relazioni inventory.
- SNMP collector — WIP.
- LLDP ingestion — WIP.
- Port mapping inference — WIP.
);
}
function TopologyTab() {
return (
- Vista fisica dispositivi.
- Vista logica host / VM / container / app.
- Layer networking e dipendenze.
- Drag & drop dei contenitori.
- Link fisici e logici cliccabili.
- Focus node e highlight dei vicini.
);
}
function WipTab() {
return (
- Placeholder per pannelli legacy reintegrati.
- Spazio riservato ai blocchi non ancora consolidati.
- Promemoria tecnico per le parti temporanee.
- Non rimuovere più la shell quando si aggiungono nuove viste.
- Le nuove sezioni devono entrare come tab del workspace.
- Persistenza dello stato UI da migliorare nei prossimi step.
);
}
function App() {
const [activeTab, setActiveTab] = useState('inventory');
const currentTab = tabs.find((tab) => tab.key === activeTab)!;
return (
);
}
export default App;