blob: 095e3d747e1e160b568e4883bce6403408a3c70a [file] [log] [blame]
idillon-sfl5d174552022-08-23 14:34:24 -04001import { Card, CardActionArea, CardContent, CircularProgress, Typography } from '@mui/material';
simon07b4eb02022-09-29 17:50:26 -04002import { useEffect, useState } from 'react';
Adrien Béraudab519ff2022-05-03 15:34:48 -04003import { useNavigate, useParams } from 'react-router';
simon07b4eb02022-09-29 17:50:26 -04004
Adrien Béraud150b4782021-04-21 19:40:59 -04005import Conversation from '../../../model/Conversation';
simon07b4eb02022-09-29 17:50:26 -04006import authManager from '../AuthManager';
Adrien Béraud150b4782021-04-21 19:40:59 -04007
Adrien Béraud150b4782021-04-21 19:40:59 -04008export default function ConversationsOverviewCard(props) {
simond47ef9e2022-09-28 22:24:28 -04009 const navigate = useNavigate();
simon80b7b3b2022-09-28 17:50:10 -040010 let accountId = useParams().accountId;
11 if (props.accountId) {
12 accountId = props.accountId;
13 }
simond47ef9e2022-09-28 22:24:28 -040014 const [loaded, setLoaded] = useState(false);
15 const [conversations, setConversations] = useState([]);
Adrien Béraud150b4782021-04-21 19:40:59 -040016
17 useEffect(() => {
simond47ef9e2022-09-28 22:24:28 -040018 const controller = new AbortController();
19 authManager
20 .fetch(`/api/accounts/${accountId}/conversations`, { signal: controller.signal })
21 .then((res) => res.json())
22 .then((result) => {
23 console.log(result);
24 setLoaded(true);
25 setConversations(Object.values(result).map((c) => Conversation.from(accountId, c)));
26 });
idillon28996962022-09-06 17:49:41 -040027 // return () => controller.abort() // crash on React18
simond47ef9e2022-09-28 22:24:28 -040028 }, [accountId]);
Adrien Béraud150b4782021-04-21 19:40:59 -040029
30 return (
simond47ef9e2022-09-28 22:24:28 -040031 <Card onClick={() => navigate(`/account/${accountId}`)}>
Adrien Béraud150b4782021-04-21 19:40:59 -040032 <CardActionArea>
33 <CardContent>
idillonfb2af5b2022-09-16 13:40:08 -040034 <Typography color="textSecondary" gutterBottom>
Adrien Béraud150b4782021-04-21 19:40:59 -040035 Conversations
36 </Typography>
37 <Typography gutterBottom variant="h5" component="h2">
idillon28996962022-09-06 17:49:41 -040038 {loaded ? conversations.length : <CircularProgress size={24} />}
Adrien Béraud150b4782021-04-21 19:40:59 -040039 </Typography>
40 </CardContent>
41 </CardActionArea>
42 </Card>
simond47ef9e2022-09-28 22:24:28 -040043 );
Adrien Béraud150b4782021-04-21 19:40:59 -040044}