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