blob: 0e715b5127bb83b24ad16acad60e866b11b5a0ec [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
simonfe1de722022-10-02 00:21:43 -040012type AccountSettingsProps = {
13 accountId?: string;
14 account?: Account;
15};
16
17const AccountSettings = (props: AccountSettingsProps) => {
simond47ef9e2022-09-28 22:24:28 -040018 console.log('ACCOUNT SETTINGS', props.account);
simonfe1de722022-10-02 00:21:43 -040019 const params = useParams();
20 const accountId = props.accountId || params.accountId;
21
22 if (accountId == null) {
23 throw new Error('Missing accountId');
simon80b7b3b2022-09-28 17:50:10 -040024 }
simonfe1de722022-10-02 00:21:43 -040025
idillon531b6f22022-09-16 14:02:00 -040026 const dispatch = useAppDispatch();
27
simonfe1de722022-10-02 00:21:43 -040028 const [account, setAccount] = useState<Account | null>(null);
Adrien Béraud6ecaa402021-04-06 17:37:25 -040029
Adrien Béraud150b4782021-04-21 19:40:59 -040030 useEffect(() => {
simond47ef9e2022-09-28 22:24:28 -040031 dispatch(setAccountId(accountId));
idillon531b6f22022-09-16 14:02:00 -040032
simond47ef9e2022-09-28 22:24:28 -040033 const controller = new AbortController();
34 authManager
35 .fetch(`/api/accounts/${accountId}`, { signal: controller.signal })
36 .then((res) => res.json())
37 .then((result) => {
simonfe1de722022-10-02 00:21:43 -040038 const account = Account.from(result);
simond47ef9e2022-09-28 22:24:28 -040039 account.setDevices(result.devices);
40 dispatch(setAccountObject(account));
simonfe1de722022-10-02 00:21:43 -040041 setAccount(account);
simond47ef9e2022-09-28 22:24:28 -040042 })
43 .catch((e) => console.log(e));
44 // return () => controller.abort() // crash on React18
simon80b7b3b2022-09-28 17:50:10 -040045 }, [accountId, dispatch]);
Adrien Béraud6ecaa402021-04-06 17:37:25 -040046
Adrien Béraud150b4782021-04-21 19:40:59 -040047 return (
48 <Container maxWidth="sm">
49 <Header />
simonfe1de722022-10-02 00:21:43 -040050 {account != null ? (
51 <AccountPreferences account={account} onAccountChanged={(account: Account) => setAccount(account)} />
simond47ef9e2022-09-28 22:24:28 -040052 ) : (
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;