blob: 921624950d1361bee6444f1d9c79ef3865732ed4 [file] [log] [blame]
simon26e79f72022-10-05 22:16:08 -04001/*
2 * Copyright (C) 2022 Savoir-faire Linux Inc.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License as
6 * published by the Free Software Foundation; either version 3 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Affero General Public License for more details.
13 *
14 * You should have received a copy of the GNU Affero General Public
15 * License along with this program. If not, see
16 * <https://www.gnu.org/licenses/>.
17 */
idillonae655dd2022-10-14 18:11:02 -040018import { Divider, Stack, Typography } from '@mui/material';
idillon07d31cc2022-12-06 22:40:14 -050019import { useContext } from 'react';
simon07b4eb02022-09-29 17:50:26 -040020
simone35acc22022-12-02 16:51:12 -050021import { CallManagerContext } from '../contexts/CallManagerProvider';
simon5c677962022-12-02 16:51:54 -050022import { useCallContext } from '../contexts/CallProvider';
simon09fe4822022-11-30 23:36:25 -050023import { useConversationContext } from '../contexts/ConversationProvider';
simon5c677962022-12-02 16:51:54 -050024import { useWebRtcContext } from '../contexts/WebRtcProvider';
simone35acc22022-12-02 16:51:12 -050025import CallInterface from '../pages/CallInterface';
idillon6847e252022-11-04 11:50:08 -040026import ChatInterface from '../pages/ChatInterface';
idillonae655dd2022-10-14 18:11:02 -040027import { AddParticipantButton, ShowOptionsMenuButton, StartAudioCallButton, StartVideoCallButton } from './Button';
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040028
simonf929a362022-11-18 16:53:45 -050029const ConversationView = () => {
simone35acc22022-12-02 16:51:12 -050030 const { conversationId } = useConversationContext();
simon5c677962022-12-02 16:51:54 -050031 const webRtcContext = useWebRtcContext(true);
32 const callContext = useCallContext(true);
simone35acc22022-12-02 16:51:12 -050033 const { callData } = useContext(CallManagerContext);
34
simon5c677962022-12-02 16:51:54 -050035 if (webRtcContext && callContext && callData?.conversationId === conversationId) {
simone35acc22022-12-02 16:51:12 -050036 return <CallInterface />;
37 }
38
idillonbef18a52022-09-01 01:51:40 -040039 return (
simon9f814a32022-11-22 21:40:53 -050040 <Stack flexGrow={1} height="100%">
simonf9d78f22022-11-25 15:47:15 -050041 <ConversationHeader />
idillonae655dd2022-10-14 18:11:02 -040042 <Divider
43 sx={{
44 borderTop: '1px solid #E5E5E5',
45 }}
46 />
simonf9d78f22022-11-25 15:47:15 -050047 <ChatInterface />
idillonbef18a52022-09-01 01:51:40 -040048 </Stack>
simond47ef9e2022-09-28 22:24:28 -040049 );
50};
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040051
simonf9d78f22022-11-25 15:47:15 -050052const ConversationHeader = () => {
idillon07d31cc2022-12-06 22:40:14 -050053 const { conversationId, conversationDisplayName } = useConversationContext();
simone35acc22022-12-02 16:51:12 -050054 const { startCall } = useContext(CallManagerContext);
idillonae655dd2022-10-14 18:11:02 -040055
56 return (
idillon6847e252022-11-04 11:50:08 -040057 <Stack direction="row" padding="16px" overflow="hidden">
idillonae655dd2022-10-14 18:11:02 -040058 <Stack flex={1} justifyContent="center" whiteSpace="nowrap" overflow="hidden">
59 <Typography variant="h3" textOverflow="ellipsis">
idillon07d31cc2022-12-06 22:40:14 -050060 {conversationDisplayName}
idillonae655dd2022-10-14 18:11:02 -040061 </Typography>
62 </Stack>
63 <Stack direction="row" spacing="20px">
simone35acc22022-12-02 16:51:12 -050064 <StartAudioCallButton onClick={() => startCall({ conversationId, role: 'caller' })} />
65 <StartVideoCallButton onClick={() => startCall({ conversationId, role: 'caller', withVideoOn: true })} />
idillonae655dd2022-10-14 18:11:02 -040066 <AddParticipantButton />
67 <ShowOptionsMenuButton />
68 </Stack>
69 </Stack>
70 );
71};
72
simond47ef9e2022-09-28 22:24:28 -040073export default ConversationView;