| import React, { useMemo } from 'react'; | |
| import Sidebar from './components/Layout/Sidebar'; | |
| import Header from './components/Layout/Header'; | |
| import StatsCard from './components/Dashboard/StatsCard'; | |
| import UserTable from './components/Dashboard/UserTable'; | |
| import NetworkMap from './components/Dashboard/NetworkMap'; | |
| import { mockUsers } from './data/mockUsers'; | |
| import { Users, Globe2, Activity, RadioReceiver } from 'lucide-react'; | |
| function App() { | |
| const stats = useMemo(() => { | |
| return { | |
| total: mockUsers.length, | |
| online: mockUsers.filter(u => u.status === 'Online').length, | |
| roaming: mockUsers.filter(u => u.isRoaming).length, | |
| avgSignal: (mockUsers.reduce((acc, u) => acc + u.signalStrength, 0) / mockUsers.length).toFixed(1) | |
| }; | |
| }, []); | |
| return ( | |
| <div style={{ display: 'flex', width: '100%', height: '100vh', background: 'var(--bg-app)', color: 'var(--text-main)' }}> | |
| <Sidebar /> | |
| <div style={{ flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden', position: 'relative' }}> | |
| {/* Background Grid/Effect */} | |
| <div style={{ | |
| position: 'absolute', inset: 0, | |
| backgroundImage: 'linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px)', | |
| backgroundSize: '40px 40px', | |
| pointerEvents: 'none' | |
| }} /> | |
| <Header /> | |
| <main style={{ flex: 1, padding: 'var(--space-md)', overflowY: 'auto', zIndex: 1 }}> | |
| <div style={{ marginBottom: 'var(--space-xl)' }}> | |
| <h1 className="text-glow" style={{ fontSize: '1.5rem', marginBottom: 'var(--space-xs)' }}>Network Overview</h1> | |
| <p style={{ color: 'var(--text-muted)' }}>Real-time monitoring of GlobeSIM subscriber activities.</p> | |
| </div> | |
| {/* KPI Cards */} | |
| <div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 'var(--space-md)', marginBottom: 'var(--space-xl)' }}> | |
| <StatsCard title="Total Subscribers" value={stats.total} icon={Users} trend={2.5} /> | |
| <StatsCard title="Active Connections" value={stats.online} icon={Activity} trend={5.2} /> | |
| <StatsCard title="Roaming Users" value={stats.roaming} icon={Globe2} trend={-1.1} /> | |
| <StatsCard title="Avg Signal Strength" value={`${stats.avgSignal}/5`} icon={RadioReceiver} /> | |
| </div> | |
| <div style={{ display: 'grid', gridTemplateColumns: '2fr 1fr', gap: 'var(--space-md)', marginBottom: 'var(--space-xl)', height: '500px' }}> | |
| <UserTable users={mockUsers} /> | |
| <NetworkMap users={mockUsers} /> | |
| </div> | |
| </main> | |
| </div> | |
| </div> | |
| ); | |
| } | |
| export default App; | |