import { useEffect, useState } from 'react'; import { Group, AppShell } from '@mantine/core'; import { usePreferencesStore } from '@/stores/preferences'; import type { CpuMetrics, MemoryMetrics, GpuMetrics, } from '@/main/modules/monitoring'; import { PerformanceBadge } from './PerformanceBadge'; interface StatusBarProps { maxDataPoints?: number; } export const StatusBar = ({ maxDataPoints = 60 }: StatusBarProps) => { const [cpuMetrics, setCpuMetrics] = useState(null); const [memoryMetrics, setMemoryMetrics] = useState( null ); const [gpuMetrics, setGpuMetrics] = useState(null); const { resolvedColorScheme: colorScheme } = usePreferencesStore(); useEffect(() => { let isMounted = true; const handleCpuMetrics = (metrics: CpuMetrics) => { if (!isMounted) return; setCpuMetrics(metrics); }; const handleMemoryMetrics = (metrics: MemoryMetrics) => { if (!isMounted) return; setMemoryMetrics(metrics); }; const handleGpuMetrics = (metrics: GpuMetrics) => { if (!isMounted) return; setGpuMetrics(metrics); }; const cleanupCpu = window.electronAPI.monitoring.onCpuMetrics(handleCpuMetrics); const cleanupMemory = window.electronAPI.monitoring.onMemoryMetrics(handleMemoryMetrics); const cleanupGpu = window.electronAPI.monitoring.onGpuMetrics(handleGpuMetrics); const stopMonitoring = window.electronAPI.monitoring.start(); return () => { isMounted = false; cleanupCpu(); cleanupMemory(); cleanupGpu(); stopMonitoring(); }; }, [maxDataPoints]); return ( {cpuMetrics && memoryMetrics && ( <> )} {gpuMetrics?.gpus.map((gpu, index) => ( 1 ? ` ${index + 1}` : ''}`} value={`${gpu.usage}%`} tooltipLabel={`${gpu.usage}%`} /> 1 ? ` ${index + 1}` : ''}`} value={`${gpu.memoryUsage}%`} tooltipLabel={`${gpu.memoryUsed.toFixed(2)} GB / ${gpu.memoryTotal.toFixed(2)} GB (${gpu.memoryUsage}%)`} /> ))} ); };