Fixed bugs on user section

This commit is contained in:
Noe 2024-01-25 21:57:53 +01:00
parent c8210f601c
commit 668f1fe7d4
6 changed files with 259 additions and 219 deletions

View File

@ -197,7 +197,7 @@ function Installation(props: singleInstallationProps) {
{openModalDeleteInstallation && ( {openModalDeleteInstallation && (
<Modal <Modal
open={openModalDeleteInstallation} open={openModalDeleteInstallation}
onClose={() => setOpenModalDeleteInstallation(false)} onClose={deleteInstallationModalHandleCancel}
aria-labelledby="error-modal" aria-labelledby="error-modal"
aria-describedby="error-modal-description" aria-describedby="error-modal-description"
> >

View File

@ -82,7 +82,7 @@ export const getChartOptions = (
} }
}, },
{ {
seriesName: 'Pv Production', seriesName: 'Grid Power',
show: false, show: false,
min: min:
chartInfo.min >= 0 chartInfo.min >= 0

View File

@ -1,6 +1,6 @@
import { Box, Card, Container, Grid, Modal, Typography } from '@mui/material'; import { Box, Card, Container, Grid, Modal, Typography } from '@mui/material';
import ReactApexChart from 'react-apexcharts'; import ReactApexChart from 'react-apexcharts';
import React, { useEffect, useState } from 'react'; import React, { useContext, useEffect, useState } from 'react';
import { I_S3Credentials } from 'src/interfaces/S3Types'; import { I_S3Credentials } from 'src/interfaces/S3Types';
import { getChartOptions } from './chartOptions'; import { getChartOptions } from './chartOptions';
import { import {
@ -17,6 +17,7 @@ import { TimeSpan, UnixTime } from '../../../dataCache/time';
import { DateTimePicker, LocalizationProvider } from '@mui/x-date-pickers'; import { DateTimePicker, LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { UserContext } from '../../../contexts/userContext';
interface OverviewProps { interface OverviewProps {
s3Credentials: I_S3Credentials; s3Credentials: I_S3Credentials;
@ -39,6 +40,9 @@ const computeLast7Days = (): string[] => {
}; };
function Overview(props: OverviewProps) { function Overview(props: OverviewProps) {
const context = useContext(UserContext);
const { currentUser, setUser } = context;
const [dailyData, setDailyData] = useState(true); const [dailyData, setDailyData] = useState(true);
const [weeklyData, setWeeklyData] = useState(false); const [weeklyData, setWeeklyData] = useState(false);
const [weeklybalance, setWeeklyBalance] = useState([]); const [weeklybalance, setWeeklyBalance] = useState([]);
@ -676,7 +680,7 @@ function Overview(props: OverviewProps) {
color: '#ff9900' color: '#ff9900'
}, },
{ {
name: 'Balance', name: 'Net Energy',
color: '#666666', color: '#666666',
type: 'line', type: 'line',
data: weeklybalance data: weeklybalance
@ -713,7 +717,7 @@ function Overview(props: OverviewProps) {
type: 'bar' type: 'bar'
}, },
{ {
name: 'Balance', name: 'Net Energy',
type: 'line', type: 'line',
data: monthlybalance, data: monthlybalance,
color: '#666666' color: '#666666'
@ -727,6 +731,7 @@ function Overview(props: OverviewProps) {
</Grid> </Grid>
</Grid> </Grid>
)} )}
<Grid <Grid
container container
direction="row" direction="row"
@ -942,6 +947,7 @@ function Overview(props: OverviewProps) {
</Grid> </Grid>
</Grid> </Grid>
{currentUser.hasWriteAccess && (
<Grid <Grid
container container
direction="row" direction="row"
@ -1084,7 +1090,8 @@ function Overview(props: OverviewProps) {
<ReactApexChart <ReactApexChart
options={{ options={{
...getChartOptions( ...getChartOptions(
dailyDataArray[chartState].chartOverview.gridPower, dailyDataArray[chartState].chartOverview
.gridPower,
'daily', 'daily',
[] []
), ),
@ -1151,8 +1158,9 @@ function Overview(props: OverviewProps) {
</Card> </Card>
</Grid> </Grid>
</Grid> </Grid>
)}
{dailyData && ( {dailyData && currentUser.hasWriteAccess && (
<Grid <Grid
container container
direction="row" direction="row"

View File

@ -38,12 +38,32 @@ function User(props: singleUserProps) {
const tokencontext = useContext(TokenContext); const tokencontext = useContext(TokenContext);
const { removeToken } = tokencontext; const { removeToken } = tokencontext;
const tabs = [{ value: 'user', label: 'User' }]; const tabs = [{ value: 'user', label: 'User' }];
const [openModalDeleteFolder, setOpenModalDeleteFolder] = useState(false); const [openModalDeleteUser, setOpenModalDeleteUser] = useState(false);
useEffect(() => { useEffect(() => {
setFormValues(props.current_user); setFormValues(props.current_user);
}, [props.current_user]); }, [props.current_user]);
useEffect(() => {
// Use a timer to automatically close the Alert after 2 seconds
const timerId = setTimeout(() => {
setUpdated(false);
}, 2000);
// Clean up the timer when the component unmounts or when updated changes
return () => clearTimeout(timerId);
}, [updated]);
useEffect(() => {
// Use a timer to automatically close the Alert after 2 seconds
const timerId = setTimeout(() => {
setError(false);
}, 2000);
// Clean up the timer when the component unmounts or when updated changes
return () => clearTimeout(timerId);
}, [error]);
if (formValues == undefined) { if (formValues == undefined) {
return null; return null;
} }
@ -60,21 +80,35 @@ function User(props: singleUserProps) {
[name]: value [name]: value
}); });
}; };
const handleSubmit = (e) => { const handleSubmit = async (e) => {
setLoading(true); setLoading(true);
setError(false); setError(false);
const res = await axiosConfig
.put(`/UpdateUser`, formValues)
.catch((err) => {
if (err.response) {
setError(true);
setLoading(false);
}
});
if (res) {
setUpdated(true);
setLoading(false);
}
}; };
const handleDelete = (e) => { const handleDelete = (e) => {
setLoading(true); setLoading(true);
setError(false); setError(false);
setOpenModalDeleteFolder(true); setOpenModalDeleteUser(true);
}; };
const deleteUserModalHandleCancel = (e) => { const deleteUserModalHandleCancel = (e) => {
setLoading(false); setLoading(false);
setError(false); setError(false);
setOpenModalDeleteFolder(false); setOpenModalDeleteUser(false);
}; };
const deleteUserModalHandle = (e) => { const deleteUserModalHandle = (e) => {
@ -94,7 +128,7 @@ function User(props: singleUserProps) {
.catch((error) => { .catch((error) => {
setLoading(false); setLoading(false);
setError(true); setError(true);
setOpenModalDeleteFolder(false); setOpenModalDeleteUser(false);
if (error.response && error.response.status == 401) { if (error.response && error.response.status == 401) {
removeToken(); removeToken();
} }
@ -105,10 +139,10 @@ function User(props: singleUserProps) {
return ( return (
<> <>
{openModalDeleteFolder && ( {openModalDeleteUser && (
<Modal <Modal
open={openModalDeleteFolder} open={openModalDeleteUser}
onClose={() => setOpenModalDeleteFolder(false)} onClose={deleteUserModalHandleCancel}
aria-labelledby="error-modal" aria-labelledby="error-modal"
aria-describedby="error-modal-description" aria-describedby="error-modal-description"
> >

View File

@ -5,8 +5,7 @@ import {
Grid, Grid,
IconButton, IconButton,
InputAdornment, InputAdornment,
TextField, TextField
useTheme
} from '@mui/material'; } from '@mui/material';
import SearchTwoToneIcon from '@mui/icons-material/SearchTwoTone'; import SearchTwoToneIcon from '@mui/icons-material/SearchTwoTone';
import FlatUsersView from './FlatUsersView'; import FlatUsersView from './FlatUsersView';
@ -18,7 +17,6 @@ import { FormattedMessage } from 'react-intl';
import { Close as CloseIcon } from '@mui/icons-material'; import { Close as CloseIcon } from '@mui/icons-material';
function UsersSearch() { function UsersSearch() {
const theme = useTheme();
const [searchTerm, setSearchTerm] = useState(''); const [searchTerm, setSearchTerm] = useState('');
const { availableUsers, fetchAvailableUsers } = useContext(AccessContext); const { availableUsers, fetchAvailableUsers } = useContext(AccessContext);
const [filteredData, setFilteredData] = useState(availableUsers); const [filteredData, setFilteredData] = useState(availableUsers);
@ -26,7 +24,7 @@ function UsersSearch() {
const context = useContext(UserContext); const context = useContext(UserContext);
const [userCreated, setUserCreated] = useState(false); const [userCreated, setUserCreated] = useState(false);
const [errorOccured, setErrorOccured] = useState(false); const [errorOccured, setErrorOccured] = useState(false);
const { currentUser, setUser } = context; const { currentUser } = context;
useEffect(() => { useEffect(() => {
fetchAvailableUsers(); fetchAvailableUsers();
@ -54,7 +52,7 @@ function UsersSearch() {
setTimeout(() => { setTimeout(() => {
setUserCreated(false); setUserCreated(false);
}, 8000); }, 2000);
}; };
const handleUserFormCancel = () => { const handleUserFormCancel = () => {
@ -66,7 +64,7 @@ function UsersSearch() {
setErrorOccured(true); setErrorOccured(true);
setTimeout(() => { setTimeout(() => {
setErrorOccured(false); setErrorOccured(false);
}, 3000); }, 2000);
}; };
const isMobile = window.innerWidth <= 1490; const isMobile = window.innerWidth <= 1490;

View File

@ -312,13 +312,13 @@ export const transformInputToAggregatedData = async (
'temp6' 'temp6'
]; ];
//while (currentDay.isBefore(currentDate)) { while (currentDay.isBefore(currentDate)) {
for (let i = 0; i < 7; i++) { //for (let i = 0; i < 7; i++) {
// console.log('Current day:', currentDay.format('YYYY-MM-DD')); // console.log('Current day:', currentDay.format('YYYY-MM-DD'));
let result = await Promise.resolve( let result = await Promise.resolve(
//fetchDailyData(currentDay.format('YYYY-MM-DD'), s3Credentials) fetchDailyData(currentDay.format('YYYY-MM-DD'), s3Credentials)
fetchDailyData(fake_data[i], s3Credentials) //fetchDailyData(fake_data[i], s3Credentials)
); );
if ( if (
result === FetchResult.notAvailable || result === FetchResult.notAvailable ||