blob: 10dab29db630a55f2bb867623035836b1be778d8 [file] [log] [blame]
simon07b4eb02022-09-29 17:50:26 -04001import { CircularProgress, Container } from '@mui/material';
simond47ef9e2022-09-28 22:24:28 -04002import { useEffect, useState } from 'react';
Adrien Béraud150b4782021-04-21 19:40:59 -04003import { useParams } from 'react-router';
simon07b4eb02022-09-29 17:50:26 -04004
simond47ef9e2022-09-28 22:24:28 -04005import Account from '../../../model/Account';
ervinanoh99655642022-09-01 15:11:31 -04006import { setAccountId, setAccountObject } from '../../redux/appSlice';
simon07b4eb02022-09-29 17:50:26 -04007import { useAppDispatch } from '../../redux/hooks';
8import authManager from '../AuthManager';
9import AccountPreferences from '../components/AccountPreferences';
10import Header from '../components/Header';
Adrien Béraud6ecaa402021-04-06 17:37:25 -040011
Adrien Béraud150b4782021-04-21 19:40:59 -040012const AccountSettings = (props) => {
simond47ef9e2022-09-28 22:24:28 -040013 console.log('ACCOUNT SETTINGS', props.account);
simon80b7b3b2022-09-28 17:50:10 -040014 let accountId = useParams().accountId;
15 if (props.accountId) {
16 accountId = props.accountId;
17 }
idillon531b6f22022-09-16 14:02:00 -040018 const dispatch = useAppDispatch();
19
simond47ef9e2022-09-28 22:24:28 -040020 const [state, setState] = useState({ loaded: false });
Adrien Béraud6ecaa402021-04-06 17:37:25 -040021
Adrien Béraud150b4782021-04-21 19:40:59 -040022 useEffect(() => {
simond47ef9e2022-09-28 22:24:28 -040023 dispatch(setAccountId(accountId));
idillon531b6f22022-09-16 14:02:00 -040024
simond47ef9e2022-09-28 22:24:28 -040025 const controller = new AbortController();
26 authManager
27 .fetch(`/api/accounts/${accountId}`, { signal: controller.signal })
28 .then((res) => res.json())
29 .then((result) => {
30 let account = Account.from(result);
31 account.setDevices(result.devices);
32 dispatch(setAccountObject(account));
33 setState({ loaded: true, account: account });
34 })
35 .catch((e) => console.log(e));
36 // return () => controller.abort() // crash on React18
simon80b7b3b2022-09-28 17:50:10 -040037 }, [accountId, dispatch]);
Adrien Béraud6ecaa402021-04-06 17:37:25 -040038
Adrien Béraud150b4782021-04-21 19:40:59 -040039 return (
40 <Container maxWidth="sm">
41 <Header />
simond47ef9e2022-09-28 22:24:28 -040042 {state.loaded ? (
43 <AccountPreferences
44 account={state.account}
45 onAccontChanged={(account) =>
46 setState((state) => {
47 state.account = account;
48 return state;
49 })
50 }
51 />
52 ) : (
53 <CircularProgress />
54 )}
Adrien Béraud150b4782021-04-21 19:40:59 -040055 </Container>
simond47ef9e2022-09-28 22:24:28 -040056 );
57};
Adrien Béraud6ecaa402021-04-06 17:37:25 -040058
simond47ef9e2022-09-28 22:24:28 -040059export default AccountSettings;