= { '1h': 1, '6h': 6, '24h': 24, '7d': 168 };
+ const hrs = ranges[chartRange] ?? 24;
+ // eslint-disable-next-line react-hooks/purity
+ const now = Date.now();
+ return [now - hrs * 60 * 60 * 1000, now];
+ })();
return (
diff --git a/frontend/src/pages/DevicesPage.tsx b/frontend/src/pages/DevicesPage.tsx
index 2c12cad..ed2b3e9 100644
--- a/frontend/src/pages/DevicesPage.tsx
+++ b/frontend/src/pages/DevicesPage.tsx
@@ -161,14 +161,15 @@ export default function DevicesPage() {
enabled: d.status === 'online',
})),
});
- const cpuHistories = useMemo(() => {
- const map: Record = {};
- devices.forEach((d, i) => {
- const pts = cpuHistoryResults[i]?.data ?? [];
- map[d.id] = pts.map((p: { cpu_load?: number }) => p.cpu_load ?? 0).filter((v: number) => v > 0);
- });
- return map;
- }, [devices, cpuHistoryResults]);
+ const cpuHistories = useMemo(
+ () => Object.fromEntries(
+ devices.map((d, i) => {
+ const pts = cpuHistoryResults[i]?.data ?? [];
+ return [d.id, pts.map((p: { cpu_load?: number }) => p.cpu_load ?? 0).filter((v: number) => v > 0)];
+ })
+ ) as Record,
+ [devices, cpuHistoryResults],
+ );
const filtered = useMemo(() => {
const base = devices.filter(d => {
@@ -205,7 +206,7 @@ export default function DevicesPage() {
return deviceSort.dir === 'asc' ? cmp : -cmp;
});
return sorted;
- }, [devices, search, deviceSort]);
+ }, [devices, search, statusFilter, typeFilter, deviceSort]);
const discoveredList = discovered as DiscoveredDevice[];
const duplicateCount = useMemo(