blob: e14101f75427c8f600f275ada9cbf3f5fbee39ee [file] [log] [blame]
Adrien Béraud4e287b92021-04-24 16:15:56 -04001import React, { useState } from 'react'
Adrien Béraud21c53cf2021-04-22 00:04:32 -04002import { makeStyles } from '@material-ui/core/styles'
3import { List, ListItem, ListItemIcon, ListItemSecondaryAction, ListItemText, ListSubheader, Switch, Typography, Grid, Paper, CardContent, Card, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Toolbar, IconButton, ListItemAvatar, Input, TextField } from '@material-ui/core'
Adrien Béraud4e287b92021-04-24 16:15:56 -04004import { PhoneCallbackRounded, GroupRounded, DeleteRounded, AddCircle } from '@material-ui/icons'
Adrien Béraud6ecaa402021-04-06 17:37:25 -04005
Adrien Béraud21c53cf2021-04-22 00:04:32 -04006import Account from '../../../model/Account'
7import JamiIdCard from './JamiIdCard'
8import ConversationAvatar from './ConversationAvatar'
9import ConversationsOverviewCard from './ConversationsOverviewCard'
Adrien Béraud6ecaa402021-04-06 17:37:25 -040010
Adrien Béraud4e287b92021-04-24 16:15:56 -040011import authManager from '../AuthManager'
12
Adrien Béraud21c53cf2021-04-22 00:04:32 -040013const useStyles = makeStyles(theme => ({
Adrien Béraud150b4782021-04-21 19:40:59 -040014 root: {
15 minWidth: 275,
16 },
Adrien Béraud150b4782021-04-21 19:40:59 -040017 title: {
18 fontSize: 14,
Adrien Béraud21c53cf2021-04-22 00:04:32 -040019 flexGrow: 1
Adrien Béraud150b4782021-04-21 19:40:59 -040020 },
21 pos: {
22 marginBottom: 12,
23 },
Adrien Béraud21c53cf2021-04-22 00:04:32 -040024 paper: {
25 marginTop: 24,
26 marginBottom: 24
Adrien Béraud150b4782021-04-21 19:40:59 -040027 },
Adrien Béraud21c53cf2021-04-22 00:04:32 -040028 textField: {
29 //marginLeft: theme.spacing(1),
30 marginRight: theme.spacing(2),
31 }
32}))
Adrien Béraud150b4782021-04-21 19:40:59 -040033
34export default function AccountPreferences(props) {
35 const classes = useStyles()
36 const account = props.account
37 const isJamiAccount = account.getType() === Account.TYPE_JAMI
38 const alias = isJamiAccount ? "Jami account" : "SIP account"
Adrien Béraud21c53cf2021-04-22 00:04:32 -040039 const moderators = account.getDefaultModerators()
Adrien Béraud4e287b92021-04-24 16:15:56 -040040 const [defaultModeratorUri, setDefaultModeratorUri] = useState('')
41
42 const addModerator = () => {
43 if (defaultModeratorUri) {
44 authManager.fetch(`/api/accounts/${account.getId()}/defaultModerators/${defaultModeratorUri}`, {method: "PUT"})
45 setDefaultModeratorUri('')
46 }
47 }
48
49 const removeModerator = (uri) =>
50 authManager.fetch(`/api/accounts/${account.getId()}/defaultModerators/${uri}`, {method: "DELETE"})
51
Adrien Béraud150b4782021-04-21 19:40:59 -040052 return (
53 <React.Fragment>
54 <Typography variant="h2" component="h2" gutterBottom>{alias}</Typography>
Adrien Béraud21c53cf2021-04-22 00:04:32 -040055 <Grid container spacing={3} style={{ marginBottom: 16 }}>
Adrien Béraud150b4782021-04-21 19:40:59 -040056 {isJamiAccount &&
57 <Grid item xs={12}><JamiIdCard account={account} /></Grid>}
58
59 <Grid item xs={12} sm={6}>
60 <ConversationsOverviewCard accountId={account.getId()} />
61 </Grid>
62
63 <Grid item xs={12} sm={6}>
64 <Card>
65 <CardContent>
66 <Typography className={classes.title} color="textSecondary" gutterBottom>
67 Current calls
68 </Typography>
69 <Typography gutterBottom variant="h5" component="h2">
70 0
71 </Typography>
72 </CardContent>
73 </Card>
74 </Grid>
75 </Grid>
76
77 <List subheader={<ListSubheader>Settings</ListSubheader>}>
78 <ListItem>
79 <ListItemIcon>
80 <GroupRounded />
81 </ListItemIcon>
82 <ListItemText id="switch-list-label-rendezvous" primary="Rendez-Vous point" />
83 <ListItemSecondaryAction>
84 <Switch
85 edge="end"
86 /*onChange={handleToggle('wifi')}*/
87 checked={account.isRendezVous()}
Adrien Béraud21c53cf2021-04-22 00:04:32 -040088 inputProps={{ 'aria-labelledby': 'switch-list-label-rendezvous' }}
Adrien Béraud150b4782021-04-21 19:40:59 -040089 />
90 </ListItemSecondaryAction>
91 </ListItem>
92 <ListItem>
93 <ListItemIcon>
94 <PhoneCallbackRounded />
95 </ListItemIcon>
96 <ListItemText id="switch-list-label-publicin" primary="Allow connection from unkown peers" />
97 <ListItemSecondaryAction>
98 <Switch
99 edge="end"
100 /*onChange={handleToggle('bluetooth')}*/
101 checked={account.isPublicIn()}
Adrien Béraud21c53cf2021-04-22 00:04:32 -0400102 inputProps={{ 'aria-labelledby': 'switch-list-label-publicin' }}
Adrien Béraud150b4782021-04-21 19:40:59 -0400103 />
104 </ListItemSecondaryAction>
105 </ListItem>
Adrien Béraud21c53cf2021-04-22 00:04:32 -0400106
107 <Paper className={classes.paper}>
108 <Toolbar>
109 <Typography className={classes.title} variant="h6">
110 Default moderators
111 </Typography>
112 </Toolbar>
113 <List>
114 <ListItem key="add">
Adrien Béraud4e287b92021-04-24 16:15:56 -0400115 <TextField variant="outlined"
116 className={classes.textField}
117 value={defaultModeratorUri}
118 onChange={e => setDefaultModeratorUri(e.target.value)}
119 label="Add new default moderator"
120 placeholder="Enter new moderator name or URI"
121 fullWidth />
Adrien Béraud21c53cf2021-04-22 00:04:32 -0400122 <ListItemSecondaryAction>
Adrien Béraud4e287b92021-04-24 16:15:56 -0400123 <IconButton onClick={addModerator}><AddCircle /></IconButton>
Adrien Béraud21c53cf2021-04-22 00:04:32 -0400124 </ListItemSecondaryAction>
125 </ListItem>
Adrien Béraud4e287b92021-04-24 16:15:56 -0400126 {!moderators || moderators.length === 0 ?
Adrien Béraud21c53cf2021-04-22 00:04:32 -0400127 <ListItem key="placeholder">
128 <ListItemText primary="No default moderator" /></ListItem> :
129 moderators.map((moderator) => (
Adrien Béraud4e287b92021-04-24 16:15:56 -0400130 <ListItem key={moderator.uri}>
Adrien Béraud21c53cf2021-04-22 00:04:32 -0400131 <ListItemAvatar>
Adrien Béraud4e287b92021-04-24 16:15:56 -0400132 <ConversationAvatar name={moderator.getDisplayName()} />
Adrien Béraud21c53cf2021-04-22 00:04:32 -0400133 </ListItemAvatar>
Adrien Béraud4e287b92021-04-24 16:15:56 -0400134 <ListItemText primary={moderator.getDisplayName()} />
Adrien Béraud21c53cf2021-04-22 00:04:32 -0400135 <ListItemSecondaryAction>
Adrien Béraud4e287b92021-04-24 16:15:56 -0400136 <IconButton onClick={e => removeModerator(moderator.uri)}><DeleteRounded /></IconButton>
Adrien Béraud21c53cf2021-04-22 00:04:32 -0400137 </ListItemSecondaryAction>
138 </ListItem>
139 ))}
140 </List>
141 </Paper>
Adrien Béraud150b4782021-04-21 19:40:59 -0400142 </List>
143
Adrien Béraud150b4782021-04-21 19:40:59 -0400144 </React.Fragment>)
145}