blob: d55582069e0d8ba18e477e480cce43cc4afff083 [file] [log] [blame]
Adrien Béraud150b4782021-04-21 19:40:59 -04001import React, {useEffect, useState} from 'react';
2import { useParams } from 'react-router';
Adrien Béraudab519ff2022-05-03 15:34:48 -04003import { Container, CircularProgress } from '@mui/material';
Adrien Béraud6ecaa402021-04-06 17:37:25 -04004import Header from '../components/Header'
5import AccountPreferences from '../components/AccountPreferences'
Adrien Béraud6ecaa402021-04-06 17:37:25 -04006import authManager from '../AuthManager'
7import Account from '../../../model/Account'
idillon531b6f22022-09-16 14:02:00 -04008import { useAppSelector, useAppDispatch } from '../../redux/hooks';
9import { setAccountId } from '../../redux/appSlice';
Adrien Béraud6ecaa402021-04-06 17:37:25 -040010
Adrien Béraud150b4782021-04-21 19:40:59 -040011const AccountSettings = (props) => {
12 const accountId = props.accountId || useParams().accountId
idillon531b6f22022-09-16 14:02:00 -040013 const dispatch = useAppDispatch();
14
Adrien Béraud150b4782021-04-21 19:40:59 -040015 const [state, setState] = useState({ loaded: false })
Adrien Béraud6ecaa402021-04-06 17:37:25 -040016
Adrien Béraud150b4782021-04-21 19:40:59 -040017 useEffect(() => {
idillon531b6f22022-09-16 14:02:00 -040018 dispatch(setAccountId(accountId))
19
Adrien Béraud150b4782021-04-21 19:40:59 -040020 const controller = new AbortController()
ervinanohf1758a42022-09-14 14:52:51 -040021 authManager.fetch(`/api/accounts/${accountId}`, { signal: controller.signal })
Adrien Béraud150b4782021-04-21 19:40:59 -040022 .then(res => res.json())
23 .then(result => {
ervinanohf1758a42022-09-14 14:52:51 -040024 let account = Account.from(result)
25 account.setDevices(result.devices)
26 setState({ loaded: true, account: account})
27
Adrien Béraud86986032021-04-25 12:04:53 -040028 }).catch(e => console.log(e))
idillon28996962022-09-06 17:49:41 -040029 // return () => controller.abort() // crash on React18
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040030 }, [accountId])
Adrien Béraud6ecaa402021-04-06 17:37:25 -040031
Adrien Béraud150b4782021-04-21 19:40:59 -040032 return (
33 <Container maxWidth="sm">
34 <Header />
Adrien Béraud86986032021-04-25 12:04:53 -040035 {state.loaded ? <AccountPreferences account={state.account} onAccontChanged={account => setState(state => {
idillon531b6f22022-09-16 14:02:00 -040036 state.account = account
Adrien Béraud86986032021-04-25 12:04:53 -040037 return state
38 })} /> : <CircularProgress />}
Adrien Béraud150b4782021-04-21 19:40:59 -040039 </Container>
40 )
Adrien Béraud6ecaa402021-04-06 17:37:25 -040041}
42
43export default AccountSettings;