From 1a372fb0f8a7be5766267c80adf73abf589afa4e Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 2 Oct 2022 09:32:45 -0700 Subject: Persist report form (fix #1019) --- modern/src/reports/components/ReportFilter.js | 43 ++++++++++++++++----------- 1 file changed, 25 insertions(+), 18 deletions(-) (limited to 'modern/src/reports') diff --git a/modern/src/reports/components/ReportFilter.js b/modern/src/reports/components/ReportFilter.js index 75c9d43d..804d0d4b 100644 --- a/modern/src/reports/components/ReportFilter.js +++ b/modern/src/reports/components/ReportFilter.js @@ -1,28 +1,35 @@ -import React, { useState } from 'react'; +import React from 'react'; import { FormControl, InputLabel, Select, MenuItem, Button, TextField, Typography, } from '@mui/material'; -import { useSelector } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import moment from 'moment'; import { useTranslation } from '../../common/components/LocalizationProvider'; import useReportStyles from '../common/useReportStyles'; +import { reportsActions } from '../../store'; const ReportFilter = ({ children, handleSubmit, showOnly, ignoreDevice, multiDevice, includeGroups }) => { const classes = useReportStyles(); + const dispatch = useDispatch(); const t = useTranslation(); const devices = useSelector((state) => state.devices.items); const groups = useSelector((state) => state.groups.items); const selectedDeviceId = useSelector((state) => state.devices.selectedId); - const [deviceId, setDeviceId] = useState(selectedDeviceId); - const [deviceIds, setDeviceIds] = useState(selectedDeviceId ? [selectedDeviceId] : []); - const [groupIds, setGroupIds] = useState([]); - const [period, setPeriod] = useState('today'); - const [from, setFrom] = useState(moment().subtract(1, 'hour')); - const [to, setTo] = useState(moment()); + const deviceId = useSelector((state) => state.reports.deviceId || selectedDeviceId); + const deviceIds = useSelector((state) => ( + state.reports.deviceIds.length + ? state.reports.deviceIds : state.reports.deviceId + ? [state.reports.deviceId] : selectedDeviceId + ? [selectedDeviceId] : [] + )); + const groupIds = useSelector((state) => state.reports.groupIds); + const period = useSelector((state) => state.reports.period); + const from = useSelector((state) => state.reports.from); + const to = useSelector((state) => state.reports.to); - const disabled = !ignoreDevice && !deviceId && !deviceIds.length && !groupIds.length; + const disabled = !ignoreDevice && !selectedDeviceId && !deviceId && !deviceIds.length && !groupIds.length; const handleClick = (type) => { let selectedFrom; @@ -53,8 +60,8 @@ const ReportFilter = ({ children, handleSubmit, showOnly, ignoreDevice, multiDev selectedTo = moment().subtract(1, 'month').endOf('month'); break; default: - selectedFrom = from; - selectedTo = to; + selectedFrom = moment(from, moment.HTML5_FMT.DATETIME_LOCAL); + selectedTo = moment(to, moment.HTML5_FMT.DATETIME_LOCAL); break; } @@ -77,7 +84,7 @@ const ReportFilter = ({ children, handleSubmit, showOnly, ignoreDevice, multiDev setGroupIds(e.target.value)} + onChange={(e) => dispatch(reportsActions.updateGroupIds(e.target.value))} multiple > {Object.values(groups).sort((a, b) => a.name.localeCompare(b.name)).map((group) => ( @@ -107,7 +114,7 @@ const ReportFilter = ({ children, handleSubmit, showOnly, ignoreDevice, multiDev
{t('reportPeriod')} - dispatch(reportsActions.updatePeriod(e.target.value))}> {t('reportToday')} {t('reportYesterday')} {t('reportThisWeek')} @@ -123,8 +130,8 @@ const ReportFilter = ({ children, handleSubmit, showOnly, ignoreDevice, multiDev setFrom(moment(e.target.value, moment.HTML5_FMT.DATETIME_LOCAL))} + value={from} + onChange={(e) => dispatch(reportsActions.updateFrom(e.target.value))} fullWidth />
@@ -134,8 +141,8 @@ const ReportFilter = ({ children, handleSubmit, showOnly, ignoreDevice, multiDev setTo(moment(e.target.value, moment.HTML5_FMT.DATETIME_LOCAL))} + value={to} + onChange={(e) => dispatch(reportsActions.updateTo(e.target.value))} fullWidth /> -- cgit v1.2.3