blob: fa29a7dc6c1bdbb47aaaa440d575bc748bc8eae5 [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';
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) => {
ervinanoh99655642022-09-01 15:11:31 -040012 console.log("ACCOUNT SETTINGS", props.account)
Adrien Béraud150b4782021-04-21 19:40:59 -040013 const accountId = props.accountId || useParams().accountId
idillon531b6f22022-09-16 14:02:00 -040014 const dispatch = useAppDispatch();
15
Adrien Béraud150b4782021-04-21 19:40:59 -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(() => {
idillon531b6f22022-09-16 14:02:00 -040019 dispatch(setAccountId(accountId))
20
Adrien Béraud150b4782021-04-21 19:40:59 -040021 const controller = new AbortController()
ervinanohf1758a42022-09-14 14:52:51 -040022 authManager.fetch(`/api/accounts/${accountId}`, { signal: controller.signal })
Adrien Béraud150b4782021-04-21 19:40:59 -040023 .then(res => res.json())
24 .then(result => {
ervinanohf1758a42022-09-14 14:52:51 -040025 let account = Account.from(result)
26 account.setDevices(result.devices)
ervinanoh99655642022-09-01 15:11:31 -040027 dispatch(setAccountObject(account))
ervinanohf1758a42022-09-14 14:52:51 -040028 setState({ loaded: true, account: account})
29
Adrien Béraud86986032021-04-25 12:04:53 -040030 }).catch(e => console.log(e))
idillon28996962022-09-06 17:49:41 -040031 // return () => controller.abort() // crash on React18
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040032 }, [accountId])
Adrien Béraud6ecaa402021-04-06 17:37:25 -040033
Adrien Béraud150b4782021-04-21 19:40:59 -040034 return (
35 <Container maxWidth="sm">
36 <Header />
Adrien Béraud86986032021-04-25 12:04:53 -040037 {state.loaded ? <AccountPreferences account={state.account} onAccontChanged={account => setState(state => {
idillon531b6f22022-09-16 14:02:00 -040038 state.account = account
Adrien Béraud86986032021-04-25 12:04:53 -040039 return state
40 })} /> : <CircularProgress />}
Adrien Béraud150b4782021-04-21 19:40:59 -040041 </Container>
42 )
Adrien Béraud6ecaa402021-04-06 17:37:25 -040043}
44
45export default AccountSettings;