blob: 0cd9e29ccb9cbd8ad04b96c9c96148ecbc9243c1 [file] [log] [blame]
Adrien Béraud150b4782021-04-21 19:40:59 -04001import React, { useEffect, useState } from 'react';
Adrien Béraud88a52442021-04-26 12:11:41 -04002import { Avatar, Card, CardHeader, Container, List } from '@material-ui/core';
Adrien Béraud150b4782021-04-21 19:40:59 -04003import Header from '../components/Header'
Adrien Béraud150b4782021-04-21 19:40:59 -04004import authManager from '../AuthManager'
Adrien Béraud6ecaa402021-04-06 17:37:25 -04005import Account from '../../../model/Account';
Adrien Béraud150b4782021-04-21 19:40:59 -04006import LoadingPage from '../components/loading';
Adrien Béraud88a52442021-04-26 12:11:41 -04007import ListItemLink from '../components/ListItemLink';
8import ConversationAvatar from '../components/ConversationAvatar';
9import { AddRounded } from '@material-ui/icons';
Adrien Béraud6ecaa402021-04-06 17:37:25 -040010
Adrien Béraud150b4782021-04-21 19:40:59 -040011const AccountSelection = (props) => {
12 const [state, setState] = useState({
13 loaded: false,
14 error: false,
15 accounts: []
16 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -040017
Adrien Béraud150b4782021-04-21 19:40:59 -040018 useEffect(() => {
19 const controller = new AbortController()
20 authManager.fetch(`/api/accounts`, {signal: controller.signal})
21 .then(res => res.json())
22 .then(result => {
23 console.log(result)
24 setState({
25 loaded: true,
26 accounts: result.map(account => Account.from(account)),
Adrien Béraud6ecaa402021-04-06 17:37:25 -040027 })
Adrien Béraud150b4782021-04-21 19:40:59 -040028 }, error => {
29 console.log(`get error ${error}`)
30 setState({
31 loaded: true,
32 error: true
33 })
Adrien Béraud88a52442021-04-26 12:11:41 -040034 }).catch(e => console.log(e))
Adrien Béraud150b4782021-04-21 19:40:59 -040035 return () => controller.abort()
36 }, [])
Adrien Béraud6ecaa402021-04-06 17:37:25 -040037
Adrien Béraud150b4782021-04-21 19:40:59 -040038 if (!state.loaded)
39 return <LoadingPage />
40 return (
41 <React.Fragment>
42 <Header />
43 <Container maxWidth="sm" style={{paddingBottom:32}}>
44 <Card style={{marginTop:32, marginBottom:32}}>
45 <CardHeader title="Choose an account" />
Adrien Béraud88a52442021-04-26 12:11:41 -040046 <List>
47 {state.accounts.map(account => <ListItemLink key={account.getId()}
48 icon={<ConversationAvatar displayName={account.getDisplayNameNoFallback()} />}
49 to={`/account/${account.getId()}/settings`}
50 primary={account.getDisplayName()}
51 secondary={account.getDisplayUri()} />)}
52 <ListItemLink
53 icon={<Avatar><AddRounded /></Avatar>}
54 to='/newAccount'
55 primary="Create new account" />
56 </List>
Adrien Béraud150b4782021-04-21 19:40:59 -040057 </Card>
58 </Container>
59 </React.Fragment>
60 )
Adrien Béraud6ecaa402021-04-06 17:37:25 -040061}
62
Adrien Béraud88a52442021-04-26 12:11:41 -040063export default AccountSelection