diff --git a/public/locales/en/common.json b/public/locales/en/common.json index d53d480c7..63b597644 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -36,6 +36,11 @@ "uptime": "System Uptime", "days": "Days", "wan": "WAN", + "lan": "LAN", + "wlan": "WLAN", + "devices": "Devices", + "lan_devices": "LAN Devices", + "wlan_devices": "WLAN Devices", "lan_users": "LAN Users", "wlan_users": "WLAN Users", "up": "UP", diff --git a/src/components/services/widget/container.jsx b/src/components/services/widget/container.jsx index ef2ddcfd2..60536e86b 100644 --- a/src/components/services/widget/container.jsx +++ b/src/components/services/widget/container.jsx @@ -11,7 +11,7 @@ export default function Container({ error = false, children, service }) { const fields = service?.widget?.fields; const type = service?.widget?.type; if (fields && type) { - visibleChildren = children.filter(child => fields.some(field => `${type}.${field}` === child.props?.label)); + visibleChildren = children.filter(child => fields.some(field => `${type}.${field}` === child?.props?.label)); } return
{visibleChildren}
; diff --git a/src/components/widgets/unifi_console/unifi_console.jsx b/src/components/widgets/unifi_console/unifi_console.jsx index 889a517f1..3e3e135e7 100644 --- a/src/components/widgets/unifi_console/unifi_console.jsx +++ b/src/components/widgets/unifi_console/unifi_console.jsx @@ -1,4 +1,4 @@ -import { BiError, BiWifi, BiCheckCircle, BiXCircle } from "react-icons/bi"; +import { BiError, BiWifi, BiCheckCircle, BiXCircle, BiNetworkChart } from "react-icons/bi"; import { MdSettingsEthernet } from "react-icons/md"; import { useTranslation } from "next-i18next"; import { SiUbiquiti } from "react-icons/si"; @@ -48,71 +48,89 @@ export default function Widget({ options }) { const wan = defaultSite.health.find(h => h.subsystem === "wan"); const lan = defaultSite.health.find(h => h.subsystem === "lan"); const wlan = defaultSite.health.find(h => h.subsystem === "wlan"); - const data = { - name: wan.gw_name, - uptime: wan["gw_system-stats"].uptime, - up: wan.status === 'ok', - wlan: { - users: wlan.num_user, - status: wlan.status - }, - lan: { - users: lan.num_user, - status: lan.status - } - }; + [wan, lan, wlan].forEach(s => { + s.up = s.status === "ok" // eslint-disable-line no-param-reassign + s.show = s.status !== "unknown" // eslint-disable-line no-param-reassign + }); + const name = wan.gw_name ?? defaultSite.desc; + const uptime = wan["gw_system-stats"] ? wan["gw_system-stats"].uptime : null; return (
-
+
- {data.name} + {name}
-
+ {uptime &&
{t("common.number", { - value: data.uptime / 86400, + value: uptime / 86400, maximumFractionDigits: 1, })}
{t("unifi.days")}
-
-
+
} + {wan.show &&
{t("unifi.wan")}
- { data.up + {wan.up ? : } -
+
} + {!wan.show && !lan.show && wlan.show &&
+
{t("unifi.wlan")}
+ {wlan.up + ? + : + } +
} + {!wan.show && !wlan.show && lan.show &&
+
{t("unifi.lan")}
+ {lan.up + ? + : + } +
}
-
+ {wlan.show &&
{t("common.number", { - value: data.wlan.users, + value: wlan.num_user, maximumFractionDigits: 0, })}
-
-
+
} + {lan.show &&
{t("common.number", { - value: data.lan.users, + value: lan.num_user, maximumFractionDigits: 0, })}
-
+
} + {(wlan.show && !lan.show || !wlan.show && lan.show) &&
+ +
+
+ {t("common.number", { + value: wlan.show ? wlan.num_adopted : lan.num_adopted, + maximumFractionDigits: 0, + })} +
+
+
}
); diff --git a/src/widgets/unifi/component.jsx b/src/widgets/unifi/component.jsx index e2db8e77f..9a3232599 100644 --- a/src/widgets/unifi/component.jsx +++ b/src/widgets/unifi/component.jsx @@ -31,28 +31,25 @@ export default function Component({ service }) { const wan = defaultSite.health.find(h => h.subsystem === "wan"); const lan = defaultSite.health.find(h => h.subsystem === "lan"); const wlan = defaultSite.health.find(h => h.subsystem === "wlan"); - const data = { - name: wan.gw_name, - uptime: wan["gw_system-stats"].uptime, - up: wan.status === 'ok', - wlan: { - users: wlan.num_user, - status: wlan.status - }, - lan: { - users: lan.num_user, - status: lan.status - }, - }; - - const uptime = `${t("common.number", { value: data.uptime / 86400, maximumFractionDigits: 1 })} ${t("unifi.days")}`; + [wan, lan, wlan].forEach(s => { + s.up = s.status === "ok" // eslint-disable-line no-param-reassign + s.show = s.status !== "unknown" // eslint-disable-line no-param-reassign + }); + + const uptime = wan["gw_system-stats"] ? `${t("common.number", { value: wan["gw_system-stats"].uptime / 86400, maximumFractionDigits: 1 })} ${t("unifi.days")}` : null; return ( - - - - + {uptime && } + {wan.show && } + + {lan.show && } + {lan.show && !wlan.show && } + {lan.show && !wlan.show && } + + {wlan.show && } + {wlan.show && !lan.show && } + {wlan.show && !lan.show && } ); } diff --git a/src/widgets/unifi/proxy.js b/src/widgets/unifi/proxy.js index dc1c437b9..95ac331e0 100644 --- a/src/widgets/unifi/proxy.js +++ b/src/widgets/unifi/proxy.js @@ -98,7 +98,7 @@ export default async function unifiProxyHandler(req, res) { } const json = JSON.parse(data.toString()); - if (!(json?.meta?.rc === "ok" || json.login_time)) { + if (!(json?.meta?.rc === "ok" || json?.login_time || json?.update_time)) { logger.error("Error logging in to Unifi: Data: %s", data); return res.status(401).end(data); }