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/ServerConfiguration.tsx b/client/src/pages/ServerConfiguration.tsx
new file mode 100644
index 0000000..e9e5328
--- /dev/null
+++ b/client/src/pages/ServerConfiguration.tsx
@@ -0,0 +1,41 @@
+import CircularProgress from '@mui/material/CircularProgress';
+import Container from '@mui/material/Container';
+import { useEffect, useState } from 'react';
+import { useParams } from 'react-router-dom';
+
+import Account from '../../../model/Account';
+import authManager from '../AuthManager';
+import AccountPreferences from '../components/AccountPreferences';
+import Header from '../components/Header';
+
+type ServerOverviewProps = {
+  accountId?: string;
+};
+
+const ServerOverview = (props: ServerOverviewProps) => {
+  const [account, setAccount] = useState<Account | null>(null);
+  const params = useParams();
+  const accountId = props.accountId || params.accountId;
+
+  useEffect(() => {
+    const controller = new AbortController();
+    authManager
+      .fetch(`/api/serverConfig`, { signal: controller.signal })
+      .then((res) => res.json())
+      .then((result) => {
+        console.log(result);
+        setAccount(Account.from(result));
+      })
+      .catch((e) => console.log(e));
+    // return () => controller.abort() // crash on React18
+  }, [accountId]);
+
+  return (
+    <Container maxWidth="sm" className="app">
+      <Header />
+      {account != null ? <AccountPreferences account={account} /> : <CircularProgress />}
+    </Container>
+  );
+};
+
+export default ServerOverview;