blob: e7d08c206377f038535d58943082cf44aed105a3 [file] [log] [blame]
simond47ef9e2022-09-28 22:24:28 -04001import { useEffect, useState } from 'react';
Adrien Béraud150b4782021-04-21 19:40:59 -04002import { useParams } from 'react-router';
Adrien Béraudab519ff2022-05-03 15:34:48 -04003import { Container, CircularProgress } from '@mui/material';
simond47ef9e2022-09-28 22:24:28 -04004import Header from '../components/Header';
5import AccountPreferences from '../components/AccountPreferences';
6import authManager from '../AuthManager';
7import Account from '../../../model/Account';
8import { useAppDispatch } from '../../redux/hooks';
ervinanoh99655642022-09-01 15:11:31 -04009import { setAccountId, setAccountObject } from '../../redux/appSlice';
Adrien Béraud6ecaa402021-04-06 17:37:25 -040010
Adrien Béraud150b4782021-04-21 19:40:59 -040011const AccountSettings = (props) => {
simond47ef9e2022-09-28 22:24:28 -040012 console.log('ACCOUNT SETTINGS', props.account);
13 const accountId = props.accountId || useParams().accountId;
idillon531b6f22022-09-16 14:02:00 -040014 const dispatch = useAppDispatch();
15
simond47ef9e2022-09-28 22:24:28 -040016 const [state, setState] = useState({ loaded: false });
Adrien Béraud6ecaa402021-04-06 17:37:25 -040017
Adrien Béraud150b4782021-04-21 19:40:59 -040018 useEffect(() => {
simond47ef9e2022-09-28 22:24:28 -040019 dispatch(setAccountId(accountId));
idillon531b6f22022-09-16 14:02:00 -040020
simond47ef9e2022-09-28 22:24:28 -040021 const controller = new AbortController();
22 authManager
23 .fetch(`/api/accounts/${accountId}`, { signal: controller.signal })
24 .then((res) => res.json())
25 .then((result) => {
26 let account = Account.from(result);
27 account.setDevices(result.devices);
28 dispatch(setAccountObject(account));
29 setState({ loaded: true, account: account });
30 })
31 .catch((e) => console.log(e));
32 // return () => controller.abort() // crash on React18
33 }, [accountId]);
Adrien Béraud6ecaa402021-04-06 17:37:25 -040034
Adrien Béraud150b4782021-04-21 19:40:59 -040035 return (
36 <Container maxWidth="sm">
37 <Header />
simond47ef9e2022-09-28 22:24:28 -040038 {state.loaded ? (
39 <AccountPreferences
40 account={state.account}
41 onAccontChanged={(account) =>
42 setState((state) => {
43 state.account = account;
44 return state;
45 })
46 }
47 />
48 ) : (
49 <CircularProgress />
50 )}
Adrien Béraud150b4782021-04-21 19:40:59 -040051 </Container>
simond47ef9e2022-09-28 22:24:28 -040052 );
53};
Adrien Béraud6ecaa402021-04-06 17:37:25 -040054
simond47ef9e2022-09-28 22:24:28 -040055export default AccountSettings;