implemented device statistics
This commit is contained in:
parent
0076f2d208
commit
3a000b0094
8 changed files with 276 additions and 111 deletions
|
|
@ -1,5 +1,5 @@
|
|||
import { DeveloperBoard as ProvisionIcon, LibraryAdd as CreateGroupIcon } from "@mui/icons-material";
|
||||
import { Box, Chip, CircularProgress, IconButton, Tab, Tabs, Theme, Tooltip, Typography } from "@mui/material";
|
||||
import { DeveloperBoard as ProvisionIcon, LibraryAdd as CreateGroupIcon, CheckCircle } from "@mui/icons-material";
|
||||
import { Box, Card, Chip, CircularProgress, Grid2, IconButton, Tab, Tabs, Theme, Tooltip, Typography } from "@mui/material";
|
||||
import { blue, green } from "@mui/material/colors";
|
||||
import { makeStyles } from "@mui/styles";
|
||||
import ResponsiveTable, { Column } from "common/ResponsiveTable";
|
||||
|
|
@ -16,6 +16,8 @@ import { Device, Group } from "models";
|
|||
import GroupSettings from "group/GroupSettings";
|
||||
import SmartBreadcrumb from "common/SmartBreadcrumb";
|
||||
import GroupActions from "group/GroupActions";
|
||||
import CircleGraphIcon from "common/CircleGraphIcon";
|
||||
import DevicesSummary from "device/DevicesSummary";
|
||||
|
||||
const useStyles = makeStyles((theme: Theme) => {
|
||||
return ({
|
||||
|
|
@ -74,6 +76,8 @@ export default function Devices() {
|
|||
const [total, setTotal] = useState(0);
|
||||
const [devices, setDevices] = useState<Device[]>([])
|
||||
const [isProvisionDialogOpen, setIsProvisionDialogOpen] = useState<boolean>(false);
|
||||
const [stats, setStats] = useState<pond.DeviceStatistics>(pond.DeviceStatistics.create())
|
||||
const [loadingStats, setLoadingStats] = useState(false)
|
||||
|
||||
const [groupsLoading, setGroupsLoading] = useState(false)
|
||||
const [groups, setGroups] = useState<Group[]>([]);
|
||||
|
|
@ -190,10 +194,28 @@ export default function Devices() {
|
|||
})
|
||||
}
|
||||
|
||||
const loadDeviceStatistics = () => {
|
||||
setLoadingStats(true)
|
||||
deviceAPI.statistics(
|
||||
getContextKeys(),
|
||||
getContextTypes()
|
||||
).then(resp => {
|
||||
let stats = pond.DeviceStatistics.fromObject(resp.data.stats)
|
||||
// console.log(stats)
|
||||
setStats(stats)
|
||||
}).finally(() => {
|
||||
setLoadingStats(false)
|
||||
})
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
loadDevices()
|
||||
}, [limit, page, order, orderBy, search, tab])
|
||||
|
||||
useEffect(() => {
|
||||
loadDeviceStatistics()
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
// console.log("groups loaded")
|
||||
loadGroups()
|
||||
|
|
@ -313,78 +335,9 @@ export default function Devices() {
|
|||
return group
|
||||
}
|
||||
|
||||
// interface MyTabButtonProps {
|
||||
// onClick?: React.MouseEventHandler<HTMLButtonElement>;
|
||||
// disabled?: boolean;
|
||||
// }
|
||||
// const [leftButtonProps, setLeftButtonProps] = useState<MyTabButtonProps>({disabled: true})
|
||||
// const [rightButtonProps, setRightButtonProps] = useState<MyTabButtonProps>({disabled: true})
|
||||
// Use refs to store the props received during render
|
||||
// const leftButtonRef = useRef<MyTabButtonProps>({});
|
||||
// const rightButtonRef = useRef<MyTabButtonProps>({});
|
||||
// const [tabsHovered, setTabsHovered] = useState(false)
|
||||
// const location = useLocation()
|
||||
|
||||
// Update state using useEffect based on ref changes (the props received)
|
||||
// useEffect(() => {
|
||||
// if (leftButtonRef.current.disabled !== leftButtonProps.disabled) {
|
||||
// setLeftButtonProps({ disabled: leftButtonRef.current.disabled, onClick: leftButtonRef.current.onClick });
|
||||
// }
|
||||
// if (rightButtonRef.current.disabled !== rightButtonProps.disabled) {
|
||||
// setRightButtonProps({ disabled: rightButtonRef.current.disabled, onClick: rightButtonRef.current.onClick });
|
||||
// }
|
||||
// }, [leftButtonRef.current, rightButtonRef.current]);
|
||||
|
||||
// const handleScrollButtonProps = (props: TabScrollButtonProps) => {
|
||||
// if ((props.direction === "left" &&
|
||||
// leftButtonProps.disabled !== props.disabled)
|
||||
// ) {
|
||||
// let newProps: any = {}
|
||||
// newProps.disabled = props.disabled
|
||||
// newProps.onClick = props.onClick
|
||||
// setLeftButtonProps(newProps)
|
||||
// // leftButtonRef.current = newProps
|
||||
// }
|
||||
// if (props.direction === "right" &&
|
||||
// rightButtonProps.disabled !== props.disabled
|
||||
// ) {
|
||||
// let newProps: any = {}
|
||||
// newProps.disabled = props.disabled
|
||||
// newProps.onClick = props.onClick
|
||||
// setRightButtonProps(newProps)
|
||||
// // rightButtonRef.current = newProps
|
||||
// }
|
||||
// }
|
||||
|
||||
// useEffect(() => {
|
||||
// if (tab !== "all") {
|
||||
// const group = groups[typeof(tab) === "number" ? tab-1 : parseInt(tab)-1]
|
||||
// const url = location.pathname;
|
||||
// if (group) {
|
||||
// const updatedUrl = url.replace(
|
||||
// /(\/groups\/[^/]+)?\/devices$/, // Matches "/groups/some-id/devices" or just "/devices"
|
||||
// `/groups/${group.id()}/devices`
|
||||
// );
|
||||
// navigate(updatedUrl, { replace: true });
|
||||
// loadDevices()
|
||||
// }
|
||||
// } else {
|
||||
// const url = location.pathname;
|
||||
// const updatedUrl = url.replace(
|
||||
// /(\/groups\/[^/]+)?\/devices$/, // Matches "/groups/some-id/devices" or just "/devices"
|
||||
// `/devices`
|
||||
// );
|
||||
// navigate(updatedUrl, { replace: true });
|
||||
// loadDevices()
|
||||
// }
|
||||
// }, [tab])
|
||||
|
||||
return(
|
||||
<PageContainer padding={isMobile ? 0 : 2}>
|
||||
{/* <SmartBreadcrumb /> */}
|
||||
<Box
|
||||
// onMouseEnter={() => setTabsHovered(true)}
|
||||
// onMouseLeave={() => setTabsHovered(false)}
|
||||
sx={{
|
||||
borderRadius: 1,
|
||||
border: "1px solid rgba(150, 150, 150, 0.2)",
|
||||
|
|
@ -410,6 +363,7 @@ export default function Devices() {
|
|||
<Tab wrapped value={"never"} label={<CreateGroupIcon className={classes.green} />} onClick={() => openGroupSettings(undefined, "add")} />
|
||||
</Tabs>
|
||||
</Box>
|
||||
<DevicesSummary />
|
||||
<ResponsiveTable<Device>
|
||||
title={<SmartBreadcrumb prependPaths={getGroup() && ["groups", getGroup().id().toString()]} groupName={getGroup() && getGroup().name()} paddingBottom={1}/>}
|
||||
subtitle={subtitle()}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue