import { useEffect, useState } from 'react';
import { InventoryPage } from './pages/InventoryPage';
import { LoginPage } from './pages/LoginPage';
import './app-shell.css';
type TabKey = 'overview' | 'inventory' | 'discovery' | 'topology' | 'options';
const tabs = [
{ 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: 'options', label: 'Options', description: 'Utenti, impostazioni, servizi di sistema e sicurezza.' },
] as const;
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 completato.
- Roadmap di security e options introdotta.
- Preparazione vista topology multilivello.
- I moduli servizi confluiranno nel menu Options.
- L'accesso dovrà essere autenticato prima delle integrazioni remote.
- Serve hardening progressivo di sessione e permessi.
; }
function DiscoveryTab(){ return - Seed scan subnet.
- Classificazione host e object binding.
- Correlazione con relazioni inventory.
- SNMP collector.
- LLDP ingestion.
- Port mapping inference.
; }
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 OptionsTab(){ return - Utenti locali e ruoli applicativi.
- Disattivazione account inattivi o non più autorizzati.
- Storico accessi e audit trail amministrativo.
- Parametri workspace e branding dell'istanza.
- Configurazione discovery, inventory e policy future.
- Feature flags per moduli sperimentali.
- La sezione Servizi viene assorbita nel menu Options.
- Qui confluiranno terminale remoto, job runner e integrazioni di sistema.
- Ogni funzione sensibile dovrà essere protetta da permessi espliciti.
- Login obbligatorio per tutte le viste non pubbliche.
- MFA per admin e per funzioni ad alto impatto.
- Controlli server-side su ogni richiesta, deny-by-default e audit centralizzato.
; }
function AppShell(){ const [activeTab,setActiveTab]=useState('inventory'); const currentTab=tabs.find((t)=>t.key===activeTab)!; return ; }
export default function App(){ const [token,setToken]=useState(null); useEffect(()=>{const t=window.localStorage.getItem('nm_token'); if(t) setToken(t);},[]); const login=(nextToken:string)=>{window.localStorage.setItem('nm_token', nextToken); setToken(nextToken);}; const logout=()=>{window.localStorage.removeItem('nm_token'); setToken(null);}; if(!token) return ; return <>>; }