diff --git a/beszel/site/src/components/routes/home.tsx b/beszel/site/src/components/routes/home.tsx index 7f0245f..4e945df 100644 --- a/beszel/site/src/components/routes/home.tsx +++ b/beszel/site/src/components/routes/home.tsx @@ -18,14 +18,16 @@ export default function () { const alerts = useStore($alerts) const systems = useStore($systems) + // todo: maybe remove active alert if changed const activeAlerts = useMemo(() => { - if (!systems.length) { - return [] - } - const activeAlerts = alerts.filter((alert) => alert.triggered && alert.name in alertInfo) - for (const alert of activeAlerts) { + const activeAlerts = alerts.filter((alert) => { + const active = alert.triggered && alert.name in alertInfo + if (!active) { + return false + } alert.sysname = systems.find((system) => system.id === alert.system)?.name - } + return true + }) return activeAlerts }, [alerts]) @@ -61,21 +63,21 @@ export default function () { {activeAlerts.length > 0 && ( -
+
{activeAlerts.map((alert) => { - const a = alertInfo[alert.name as keyof typeof alertInfo] + const info = alertInfo[alert.name as keyof typeof alertInfo] return ( - + - {alert.sysname} {a.name} + {alert.sysname} {info.name} Exceeds {alert.value} - {a.unit} threshold in last {alert.min} min + {info.unit} average in last {alert.min} min import('./ui/slider')) @@ -29,19 +28,22 @@ const failedUpdateToast = () => export default function AlertsButton({ system }: { system: SystemRecord }) { const alerts = useStore($alerts) + const [opened, setOpened] = useState(false) - const active = useMemo(() => { - return alerts.find((alert) => alert.system === system.id) - }, [alerts, system]) + const systemAlerts = alerts.filter((alert) => alert.system === system.id) as AlertRecord[] - const systemAlerts = useMemo(() => { - return alerts.filter((alert) => alert.system === system.id) as AlertRecord[] - }, [alerts, system]) + const active = systemAlerts.length > 0 return ( - - - - {system.name} alerts - - See{' '} - - notification settings - {' '} - to configure how you receive alerts. - - -
- - - - - - -
+ setOpened(false)} + > + {opened && ( + <> + + {system.name} alerts + + See{' '} + + notification settings + {' '} + to configure how you receive alerts. + + +
+ + {Object.keys(alertInfo).map((key) => { + const alert = alertInfo[key as keyof typeof alertInfo] + return ( + + ) + })} +
+ + )}
) @@ -113,9 +95,7 @@ export default function AlertsButton({ system }: { system: SystemRecord }) { function AlertStatus({ system, alerts }: { system: SystemRecord; alerts: AlertRecord[] }) { const [pendingChange, setPendingChange] = useState(false) - const alert = useMemo(() => { - return alerts.find((alert) => alert.name === 'Status') - }, [alerts]) + const alert = alerts.find((alert) => alert.name === 'Status') return (
}>
-
-