blob: 445dbae8f3cbd1ebccfbebe96dcbcba7a178f77c [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 */
simond47ef9e2022-09-28 22:24:28 -040018import { Box, Button, Menu, MenuItem } from '@mui/material';
simon6b9ddfb2022-10-03 00:04:50 -040019import { MouseEvent, useState } from 'react';
simond47ef9e2022-09-28 22:24:28 -040020import { useNavigate, useParams } from 'react-router-dom';
simon07b4eb02022-09-29 17:50:26 -040021
simon416d0792022-11-03 02:46:18 -040022import { useAuthContext } from '../contexts/AuthProvider';
Michelle Sepkap Simee580f422022-10-31 23:27:04 -040023import { setAccessToken } from '../utils/auth';
Larbi Gharibe9af9732021-03-31 15:08:01 +010024
25export default function Header() {
simon416d0792022-11-03 02:46:18 -040026 const authContext = useAuthContext(true);
27
simond47ef9e2022-09-28 22:24:28 -040028 const navigate = useNavigate();
simon6b9ddfb2022-10-03 00:04:50 -040029 const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
30 const handleClick = (event: MouseEvent<HTMLButtonElement>) => setAnchorEl(event.currentTarget);
simond47ef9e2022-09-28 22:24:28 -040031 const handleClose = () => setAnchorEl(null);
32 const params = useParams();
Larbi Gharibe9af9732021-03-31 15:08:01 +010033
Michelle Sepkap Simee580f422022-10-31 23:27:04 -040034 const goToContacts = () => navigate(`/contacts`);
Michelle Sepkap Simeb3dd3122022-11-03 02:12:39 -040035 const goToAccountSettings = () => navigate(`/deprecated-account/${params.accountId}/settings`);
Larbi Gharibe9af9732021-03-31 15:08:01 +010036
simon416d0792022-11-03 02:46:18 -040037 const deprecatedLogout = () => {
Michelle Sepkap Simee580f422022-10-31 23:27:04 -040038 setAccessToken('');
simon416d0792022-11-03 02:46:18 -040039 navigate('/deprecated-account', { replace: true });
Michelle Sepkap Simee580f422022-10-31 23:27:04 -040040 };
simon416d0792022-11-03 02:46:18 -040041 // TODO: Remove deprecated_logout once migration to new server is complete
42 const logout = authContext?.logout ?? deprecatedLogout;
Michelle Sepkap Simee580f422022-10-31 23:27:04 -040043
Adrien Béraud150b4782021-04-21 19:40:59 -040044 return (
45 <Box>
46 <Button aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick}>
47 Menu
48 </Button>
simond47ef9e2022-09-28 22:24:28 -040049 <Menu id="simple-menu" anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={handleClose}>
idillon531b6f22022-09-16 14:02:00 -040050 <MenuItem onClick={goToContacts}>Contacts</MenuItem>
Adrien Béraud150b4782021-04-21 19:40:59 -040051 {params.accountId && <MenuItem onClick={goToAccountSettings}>Account settings</MenuItem>}
Michelle Sepkap Simee580f422022-10-31 23:27:04 -040052 <MenuItem onClick={logout}>Log out</MenuItem>
Adrien Béraud150b4782021-04-21 19:40:59 -040053 </Menu>
simond47ef9e2022-09-28 22:24:28 -040054 </Box>
55 );
56}