2024-09-25 20:27:56 +05:30
|
|
|
import React, { useState, useContext } from 'react';
|
|
|
|
|
import axios from 'axios';
|
2024-06-24 22:34:54 +05:30
|
|
|
import styled from "styled-components";
|
|
|
|
|
import { stopRecording } from "../../api/recording";
|
|
|
|
|
import { useGlobalInfoStore } from "../../context/globalInfo";
|
2024-10-28 19:06:43 +05:30
|
|
|
import { IconButton, Menu, MenuItem, Typography, Avatar } from "@mui/material";
|
|
|
|
|
import { AccountCircle, Logout, Clear } from "@mui/icons-material";
|
2024-10-21 01:12:06 +05:30
|
|
|
import { useNavigate } from 'react-router-dom';
|
2024-09-25 20:27:56 +05:30
|
|
|
import { AuthContext } from '../../context/auth';
|
2024-10-28 19:06:43 +05:30
|
|
|
import { SaveRecording } from '../molecules/SaveRecording';
|
2024-06-24 22:34:54 +05:30
|
|
|
|
|
|
|
|
interface NavBarProps {
|
|
|
|
|
recordingName: string;
|
|
|
|
|
isRecording: boolean;
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-21 01:13:06 +05:30
|
|
|
export const NavBar: React.FC<NavBarProps> = ({ recordingName, isRecording }) => {
|
2024-10-21 01:12:27 +05:30
|
|
|
const { notify, browserId, setBrowserId, recordingUrl } = useGlobalInfoStore();
|
2024-09-25 20:27:56 +05:30
|
|
|
const { state, dispatch } = useContext(AuthContext);
|
|
|
|
|
const { user } = state;
|
2024-10-28 19:06:43 +05:30
|
|
|
const navigate = useNavigate();
|
2024-10-28 19:07:08 +05:30
|
|
|
|
2024-10-28 19:06:43 +05:30
|
|
|
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
|
2024-10-11 04:57:48 +05:30
|
|
|
|
2024-10-28 19:06:43 +05:30
|
|
|
const handleMenuOpen = (event: React.MouseEvent<HTMLElement>) => {
|
|
|
|
|
setAnchorEl(event.currentTarget);
|
|
|
|
|
};
|
2024-10-11 04:48:25 +05:30
|
|
|
|
2024-10-28 19:06:43 +05:30
|
|
|
const handleMenuClose = () => {
|
|
|
|
|
setAnchorEl(null);
|
|
|
|
|
};
|
2024-06-24 22:34:54 +05:30
|
|
|
|
2024-09-25 20:27:56 +05:30
|
|
|
const logout = async () => {
|
|
|
|
|
dispatch({ type: 'LOGOUT' });
|
|
|
|
|
window.localStorage.removeItem('user');
|
|
|
|
|
const { data } = await axios.get('http://localhost:8080/auth/logout');
|
|
|
|
|
notify('success', data.message);
|
|
|
|
|
navigate('/login');
|
|
|
|
|
};
|
|
|
|
|
|
2024-09-10 02:49:30 +05:30
|
|
|
const goToMainMenu = async () => {
|
2024-06-24 22:34:54 +05:30
|
|
|
if (browserId) {
|
|
|
|
|
await stopRecording(browserId);
|
|
|
|
|
notify('warning', 'Current Recording was terminated');
|
|
|
|
|
setBrowserId(null);
|
|
|
|
|
}
|
2024-09-10 02:52:07 +05:30
|
|
|
navigate('/');
|
2024-06-24 22:34:54 +05:30
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<NavBarWrapper>
|
2024-09-30 16:05:50 +05:30
|
|
|
<div style={{
|
|
|
|
|
display: 'flex',
|
|
|
|
|
justifyContent: 'flex-start',
|
|
|
|
|
}}>
|
2024-10-28 19:06:43 +05:30
|
|
|
<img src="../../../public/img/maxunlogo.png" width={45} height={40} style={{ borderRadius: '5px', margin: '5px 0px 5px 15px' }} />
|
2024-09-30 16:05:50 +05:30
|
|
|
<div style={{ padding: '11px' }}><ProjectName>Maxun</ProjectName></div>
|
|
|
|
|
</div>
|
2024-09-30 16:05:26 +05:30
|
|
|
{
|
2024-10-28 19:06:43 +05:30
|
|
|
user ? (
|
|
|
|
|
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-end' }}>
|
|
|
|
|
{!isRecording ? (
|
|
|
|
|
<>
|
2024-10-29 05:22:56 +05:30
|
|
|
<iframe src="https://ghbtns.com/github-btn.html?user=getmaxun&repo=maxun&type=star&count=true&size=large" frameBorder="0" scrolling="0" width="170" height="30" title="GitHub"></iframe>
|
2024-10-28 19:06:43 +05:30
|
|
|
<IconButton onClick={handleMenuOpen} sx={{
|
|
|
|
|
display: 'flex',
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
borderRadius: '5px',
|
|
|
|
|
padding: '8px',
|
|
|
|
|
marginRight: '10px',
|
|
|
|
|
'&:hover': { backgroundColor: 'white', color: '#ff00c3' }
|
|
|
|
|
}}>
|
|
|
|
|
<AccountCircle sx={{ marginRight: '5px' }} />
|
|
|
|
|
<Typography variant="body1">{user.email}</Typography>
|
|
|
|
|
</IconButton>
|
|
|
|
|
<Menu
|
|
|
|
|
anchorEl={anchorEl}
|
|
|
|
|
open={Boolean(anchorEl)}
|
|
|
|
|
onClose={handleMenuClose}
|
|
|
|
|
anchorOrigin={{
|
|
|
|
|
vertical: 'bottom',
|
|
|
|
|
horizontal: 'right',
|
|
|
|
|
}}
|
|
|
|
|
transformOrigin={{
|
|
|
|
|
vertical: 'top',
|
|
|
|
|
horizontal: 'right',
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<MenuItem onClick={() => { handleMenuClose(); logout(); }}>
|
|
|
|
|
<Logout sx={{ marginRight: '5px' }} /> Logout
|
|
|
|
|
</MenuItem>
|
|
|
|
|
</Menu>
|
|
|
|
|
</>
|
|
|
|
|
) : (
|
|
|
|
|
<>
|
|
|
|
|
<IconButton onClick={goToMainMenu} sx={{
|
|
|
|
|
borderRadius: '5px',
|
|
|
|
|
padding: '8px',
|
|
|
|
|
background: 'red',
|
|
|
|
|
color: 'white',
|
|
|
|
|
marginRight: '10px',
|
|
|
|
|
'&:hover': { color: 'white', backgroundColor: 'red' }
|
|
|
|
|
}}>
|
|
|
|
|
<Clear sx={{ marginRight: '5px' }} />
|
|
|
|
|
Discard
|
|
|
|
|
</IconButton>
|
|
|
|
|
<SaveRecording fileName={recordingName} />
|
|
|
|
|
</>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
2024-09-30 16:00:26 +05:30
|
|
|
) : ""
|
|
|
|
|
}
|
2024-06-24 22:34:54 +05:30
|
|
|
</NavBarWrapper>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const NavBarWrapper = styled.div`
|
|
|
|
|
grid-area: navbar;
|
2024-10-10 21:14:51 +05:30
|
|
|
background-color: white;
|
2024-06-24 22:34:54 +05:30
|
|
|
padding:5px;
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
2024-10-23 07:12:33 +05:30
|
|
|
border-bottom: 1px solid #e0e0e0;
|
2024-06-24 22:34:54 +05:30
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
const ProjectName = styled.b`
|
2024-10-10 21:14:51 +05:30
|
|
|
color: #3f4853;
|
2024-06-24 22:34:54 +05:30
|
|
|
font-size: 1.3em;
|
|
|
|
|
`;
|