From 6b74ea793333313ae578d7f7203aad0e5b854f7d Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 30 Dec 2023 15:21:02 -0800 Subject: Support unknown devices logs --- modern/src/reports/LogsPage.jsx | 40 ++++++++++++++++++++++++++- modern/src/reports/components/ReportsMenu.jsx | 2 ++ modern/src/settings/DevicePage.jsx | 7 ++++- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/modern/src/reports/LogsPage.jsx b/modern/src/reports/LogsPage.jsx index 9bc04201..4b689944 100644 --- a/modern/src/reports/LogsPage.jsx +++ b/modern/src/reports/LogsPage.jsx @@ -1,14 +1,33 @@ import React, { useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; import { useDispatch, useSelector } from 'react-redux'; import { - Table, TableRow, TableCell, TableHead, TableBody, + Table, TableRow, TableCell, TableHead, TableBody, IconButton, Tooltip, } from '@mui/material'; +import makeStyles from '@mui/styles/makeStyles'; +import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; +import HelpOutlineIcon from '@mui/icons-material/HelpOutline'; import { useTranslation } from '../common/components/LocalizationProvider'; import PageLayout from '../common/components/PageLayout'; import ReportsMenu from './components/ReportsMenu'; import { sessionActions } from '../store'; +const useStyles = makeStyles((theme) => ({ + columnAction: { + width: '1%', + paddingLeft: theme.spacing(1), + }, + success: { + color: theme.palette.success.main, + }, + error: { + color: theme.palette.error.main, + }, +})); + const LogsPage = () => { + const classes = useStyles(); + const navigate = useNavigate(); const dispatch = useDispatch(); const t = useTranslation(); @@ -19,11 +38,17 @@ const LogsPage = () => { const items = useSelector((state) => state.session.logs); + const registerDevice = (uniqueId) => { + const query = new URLSearchParams({ uniqueId }); + navigate(`/settings/device?${query.toString()}`); + } + return ( } breadcrumbs={['reportTitle', 'statisticsTitle']}> + {t('deviceIdentifier')} {t('positionProtocol')} {t('commandData')} @@ -32,6 +57,19 @@ const LogsPage = () => { {items.map((item, index) => ( + + {item.deviceId ? ( + + + + ) : ( + + registerDevice(item.uniqueId)}> + + + + )} + {item.uniqueId} {item.protocol} {item.data} diff --git a/modern/src/reports/components/ReportsMenu.jsx b/modern/src/reports/components/ReportsMenu.jsx index 76564e11..a45a4500 100644 --- a/modern/src/reports/components/ReportsMenu.jsx +++ b/modern/src/reports/components/ReportsMenu.jsx @@ -90,12 +90,14 @@ const ReportsMenu = () => { title={t('sharedLogs')} link="/reports/logs" icon={} + selected={location.pathname === '/reports/logs'} /> {!readonly && ( } + selected={location.pathname === '/reports/scheduled'} /> )} {admin && ( diff --git a/modern/src/settings/DevicePage.jsx b/modern/src/settings/DevicePage.jsx index 435a48bd..d8a30cbf 100644 --- a/modern/src/settings/DevicePage.jsx +++ b/modern/src/settings/DevicePage.jsx @@ -22,6 +22,7 @@ import { useAdministrator } from '../common/util/permissions'; import SettingsMenu from './components/SettingsMenu'; import useCommonDeviceAttributes from '../common/attributes/useCommonDeviceAttributes'; import { useCatch } from '../reactHelper'; +import useQuery from '../common/util/useQuery'; const useStyles = makeStyles((theme) => ({ details: { @@ -41,7 +42,10 @@ const DevicePage = () => { const commonDeviceAttributes = useCommonDeviceAttributes(t); const deviceAttributes = useDeviceAttributes(t); - const [item, setItem] = useState(); + const query = useQuery(); + const uniqueId = query.get('uniqueId'); + + const [item, setItem] = useState(uniqueId ? { uniqueId } : null); const handleFiles = useCatch(async (files) => { if (files.length > 0) { @@ -87,6 +91,7 @@ const DevicePage = () => { onChange={(event) => setItem({ ...item, uniqueId: event.target.value })} label={t('deviceIdentifier')} helperText={t('deviceIdentifierHelp')} + disabled={Boolean(uniqueId)} /> -- cgit v1.2.3