implemented live web socket on the devices page for status readings
This commit is contained in:
parent
c7016be6cd
commit
b96787698b
1 changed files with 24 additions and 2 deletions
|
|
@ -6,7 +6,9 @@ import ResponsiveTable, { Column } from "common/ResponsiveTable";
|
||||||
import ProvisionDevice from "device/ProvisionDevice";
|
import ProvisionDevice from "device/ProvisionDevice";
|
||||||
import { pond } from "protobuf-ts/pond";
|
import { pond } from "protobuf-ts/pond";
|
||||||
import { useDeviceAPI, useGlobalState, useGroupAPI, useTeamAPI } from "providers";
|
import { useDeviceAPI, useGlobalState, useGroupAPI, useTeamAPI } from "providers";
|
||||||
import { useCallback, useEffect, useState } from "react";
|
import { useHTTP } from "hooks";
|
||||||
|
import { useDeviceStatusStreams } from "hooks/useDeviceStatusStreams";
|
||||||
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||||
import PageContainer from "./PageContainer";
|
import PageContainer from "./PageContainer";
|
||||||
import { useMobile } from "hooks";
|
import { useMobile } from "hooks";
|
||||||
import { useLocation, useNavigate, useParams } from "react-router-dom";
|
import { useLocation, useNavigate, useParams } from "react-router-dom";
|
||||||
|
|
@ -191,6 +193,26 @@ export default function Devices() {
|
||||||
const [preferencesAnchor, setPreferencesAnchor] = useState<any>(null)
|
const [preferencesAnchor, setPreferencesAnchor] = useState<any>(null)
|
||||||
|
|
||||||
const [{ as, team }] = useGlobalState()
|
const [{ as, team }] = useGlobalState()
|
||||||
|
const { token } = useHTTP()
|
||||||
|
|
||||||
|
const deviceIds = useMemo(() => devices.map((d) => d.id().toString()), [devices])
|
||||||
|
const handleStatusUpdate = useCallback((deviceId: string, status: pond.DeviceStatus) => {
|
||||||
|
setDevices((prev) =>
|
||||||
|
prev.map((d) => {
|
||||||
|
if (d.id().toString() !== deviceId) return d
|
||||||
|
const updated = Device.clone(d)
|
||||||
|
updated.status = status
|
||||||
|
return updated
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
useDeviceStatusStreams({
|
||||||
|
deviceIds,
|
||||||
|
onStatusUpdate: handleStatusUpdate,
|
||||||
|
token,
|
||||||
|
enabled: devices.length > 0 && !!token,
|
||||||
|
})
|
||||||
|
|
||||||
const updateGroups = (newGroups: Group[]) => {
|
const updateGroups = (newGroups: Group[]) => {
|
||||||
setGroups(newGroups);
|
setGroups(newGroups);
|
||||||
|
|
@ -242,7 +264,7 @@ export default function Devices() {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const oneDayAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000);
|
const oneDayAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000);
|
||||||
if (compareTimestamps(device.status.sen5x?.timestamp, oneDayAgo.toISOString()) > 0) {
|
if (compareTimestamps(device.status.sen5x?.timestamp, oneDayAgo.toISOString()) > 0) {
|
||||||
// console.log("timestamp success " + device.settings?.deviceId)
|
// console.log("timestamp success " + device.settings?.deviceId + ": " + device.status.sen5x?.timestamp)
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
// console.log("timestamp fail " + device.settings?.deviceId)
|
// console.log("timestamp fail " + device.settings?.deviceId)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue