mirror of
https://github.com/bunny-lab-io/Borealis.git
synced 2025-09-11 01:48:42 -06:00
Made online status persistent while viewing device details.
This commit is contained in:
@@ -26,6 +26,16 @@ export default function DeviceDetails({ device, onBack }) {
|
|||||||
const [softwareOrder, setSoftwareOrder] = useState("asc");
|
const [softwareOrder, setSoftwareOrder] = useState("asc");
|
||||||
const [softwareSearch, setSoftwareSearch] = useState("");
|
const [softwareSearch, setSoftwareSearch] = useState("");
|
||||||
const [description, setDescription] = useState("");
|
const [description, setDescription] = useState("");
|
||||||
|
// Snapshotted status for the lifetime of this page
|
||||||
|
const [lockedStatus, setLockedStatus] = useState(() => {
|
||||||
|
// Prefer status provided by the device list row if available
|
||||||
|
if (device?.status) return device.status;
|
||||||
|
// Fallback: compute once from the provided lastSeen timestamp
|
||||||
|
const tsSec = device?.lastSeen;
|
||||||
|
if (!tsSec) return "Offline";
|
||||||
|
const now = Date.now() / 1000;
|
||||||
|
return now - tsSec <= 15 ? "Online" : "Offline";
|
||||||
|
});
|
||||||
|
|
||||||
const statusFromHeartbeat = (tsSec, offlineAfter = 15) => {
|
const statusFromHeartbeat = (tsSec, offlineAfter = 15) => {
|
||||||
if (!tsSec) return "Offline";
|
if (!tsSec) return "Offline";
|
||||||
@@ -53,6 +63,11 @@ export default function DeviceDetails({ device, onBack }) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
// When navigating to a different device, take a fresh snapshot of its status
|
||||||
|
if (device) {
|
||||||
|
setLockedStatus(device.status || statusFromHeartbeat(device.lastSeen));
|
||||||
|
}
|
||||||
|
|
||||||
if (!device || !device.hostname) return;
|
if (!device || !device.hostname) return;
|
||||||
const load = async () => {
|
const load = async () => {
|
||||||
try {
|
try {
|
||||||
@@ -461,7 +476,8 @@ export default function DeviceDetails({ device, onBack }) {
|
|||||||
{ label: "Storage", content: renderStorage() },
|
{ label: "Storage", content: renderStorage() },
|
||||||
{ label: "Network", content: renderNetwork() }
|
{ label: "Network", content: renderNetwork() }
|
||||||
];
|
];
|
||||||
const status = statusFromHeartbeat(agent.last_seen || device?.lastSeen);
|
// Use the snapshotted status so it stays static while on this page
|
||||||
|
const status = lockedStatus || statusFromHeartbeat(agent.last_seen || device?.lastSeen);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Paper sx={{ m: 2, p: 2, bgcolor: "#1e1e1e" }} elevation={2}>
|
<Paper sx={{ m: 2, p: 2, bgcolor: "#1e1e1e" }} elevation={2}>
|
||||||
|
Reference in New Issue
Block a user