Convert all pages to Typescript
Convert all files in `client/src/pages` to Typescript
Gitlab: #30
Change-Id: I9b5ec5b042487d732bb7d46b584f797049eb068c
diff --git a/client/src/pages/AccountSettings.tsx b/client/src/pages/AccountSettings.tsx
new file mode 100644
index 0000000..0e715b5
--- /dev/null
+++ b/client/src/pages/AccountSettings.tsx
@@ -0,0 +1,59 @@
+import { CircularProgress, Container } from '@mui/material';
+import { useEffect, useState } from 'react';
+import { useParams } from 'react-router';
+
+import Account from '../../../model/Account';
+import { setAccountId, setAccountObject } from '../../redux/appSlice';
+import { useAppDispatch } from '../../redux/hooks';
+import authManager from '../AuthManager';
+import AccountPreferences from '../components/AccountPreferences';
+import Header from '../components/Header';
+
+type AccountSettingsProps = {
+ accountId?: string;
+ account?: Account;
+};
+
+const AccountSettings = (props: AccountSettingsProps) => {
+ console.log('ACCOUNT SETTINGS', props.account);
+ const params = useParams();
+ const accountId = props.accountId || params.accountId;
+
+ if (accountId == null) {
+ throw new Error('Missing accountId');
+ }
+
+ const dispatch = useAppDispatch();
+
+ const [account, setAccount] = useState<Account | null>(null);
+
+ useEffect(() => {
+ dispatch(setAccountId(accountId));
+
+ const controller = new AbortController();
+ authManager
+ .fetch(`/api/accounts/${accountId}`, { signal: controller.signal })
+ .then((res) => res.json())
+ .then((result) => {
+ const account = Account.from(result);
+ account.setDevices(result.devices);
+ dispatch(setAccountObject(account));
+ setAccount(account);
+ })
+ .catch((e) => console.log(e));
+ // return () => controller.abort() // crash on React18
+ }, [accountId, dispatch]);
+
+ return (
+ <Container maxWidth="sm">
+ <Header />
+ {account != null ? (
+ <AccountPreferences account={account} onAccountChanged={(account: Account) => setAccount(account)} />
+ ) : (
+ <CircularProgress />
+ )}
+ </Container>
+ );
+};
+
+export default AccountSettings;