blob: c95b02beff89d52d7e63fa1f7c971053ddae5a85 [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éraude5cad982021-06-07 10:05:50 -040010import { useHistory } from 'react-router';
Adrien Béraud6ecaa402021-04-06 17:37:25 -040011
Adrien Béraud150b4782021-04-21 19:40:59 -040012const AccountSelection = (props) => {
Adrien Béraude5cad982021-06-07 10:05:50 -040013 const history = useHistory()
Adrien Béraud150b4782021-04-21 19:40:59 -040014 const [state, setState] = useState({
15 loaded: false,
16 error: false,
17 accounts: []
18 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -040019
Adrien Béraud150b4782021-04-21 19:40:59 -040020 useEffect(() => {
21 const controller = new AbortController()
22 authManager.fetch(`/api/accounts`, {signal: controller.signal})
23 .then(res => res.json())
24 .then(result => {
25 console.log(result)
Adrien Béraude5cad982021-06-07 10:05:50 -040026 if (result.length === 0) {
27 history.replace('/newAccount')
28 } else {
29 setState({
30 loaded: true,
31 accounts: result.map(account => Account.from(account)),
32 })
33 }
Adrien Béraud150b4782021-04-21 19:40:59 -040034 }, error => {
35 console.log(`get error ${error}`)
36 setState({
37 loaded: true,
38 error: true
39 })
Adrien Béraud88a52442021-04-26 12:11:41 -040040 }).catch(e => console.log(e))
Adrien Béraud150b4782021-04-21 19:40:59 -040041 return () => controller.abort()
42 }, [])
Adrien Béraud6ecaa402021-04-06 17:37:25 -040043
Adrien Béraud150b4782021-04-21 19:40:59 -040044 if (!state.loaded)
45 return <LoadingPage />
46 return (
47 <React.Fragment>
48 <Header />
49 <Container maxWidth="sm" style={{paddingBottom:32}}>
50 <Card style={{marginTop:32, marginBottom:32}}>
51 <CardHeader title="Choose an account" />
Adrien Béraud88a52442021-04-26 12:11:41 -040052 <List>
53 {state.accounts.map(account => <ListItemLink key={account.getId()}
54 icon={<ConversationAvatar displayName={account.getDisplayNameNoFallback()} />}
55 to={`/account/${account.getId()}/settings`}
56 primary={account.getDisplayName()}
57 secondary={account.getDisplayUri()} />)}
58 <ListItemLink
59 icon={<Avatar><AddRounded /></Avatar>}
60 to='/newAccount'
61 primary="Create new account" />
62 </List>
Adrien Béraud150b4782021-04-21 19:40:59 -040063 </Card>
64 </Container>
65 </React.Fragment>
66 )
Adrien Béraud6ecaa402021-04-06 17:37:25 -040067}
68
Adrien Béraud88a52442021-04-26 12:11:41 -040069export default AccountSelection