253 lines
8.3 KiB
JavaScript
253 lines
8.3 KiB
JavaScript
import { useRef, useState } from 'react';
|
|
|
|
// material-ui
|
|
import { useTheme } from '@mui/material/styles';
|
|
import {
|
|
Avatar,
|
|
Box,
|
|
ClickAwayListener,
|
|
Divider,
|
|
List,
|
|
ListItemButton,
|
|
ListItemAvatar,
|
|
ListItemText,
|
|
ListItemSecondaryAction,
|
|
Paper,
|
|
Popper,
|
|
Typography,
|
|
useMediaQuery
|
|
} from '@mui/material';
|
|
|
|
// project import
|
|
import MainCard from 'components/MainCard';
|
|
import IconButton from 'components/@extended/IconButton';
|
|
import Transitions from 'components/@extended/Transitions';
|
|
import { ThemeMode } from 'config';
|
|
|
|
// assets
|
|
import avatar2 from 'assets/images/users/avatar-2.png';
|
|
import avatar3 from 'assets/images/users/avatar-3.png';
|
|
import avatar4 from 'assets/images/users/avatar-4.png';
|
|
import avatar5 from 'assets/images/users/avatar-5.png';
|
|
import { MailOutlined, CloseOutlined } from '@ant-design/icons';
|
|
|
|
// sx styles
|
|
const avatarSX = {
|
|
width: 48,
|
|
height: 48
|
|
};
|
|
|
|
const actionSX = {
|
|
mt: '6px',
|
|
ml: 1,
|
|
top: 'auto',
|
|
right: 'auto',
|
|
alignSelf: 'flex-start',
|
|
transform: 'none'
|
|
};
|
|
|
|
// ==============================|| HEADER CONTENT - MESSAGES ||============================== //
|
|
|
|
const Message = () => {
|
|
const theme = useTheme();
|
|
const matchesXs = useMediaQuery(theme.breakpoints.down('md'));
|
|
|
|
const anchorRef = useRef(null);
|
|
const [open, setOpen] = useState(false);
|
|
const handleToggle = () => {
|
|
setOpen((prevOpen) => !prevOpen);
|
|
};
|
|
|
|
const handleClose = (event) => {
|
|
if (anchorRef.current && anchorRef.current.contains(event.target)) {
|
|
return;
|
|
}
|
|
setOpen(false);
|
|
};
|
|
|
|
const iconBackColorOpen = theme.palette.mode === ThemeMode.DARK ? 'grey.200' : 'grey.300';
|
|
const iconBackColor = theme.palette.mode === ThemeMode.DARK ? 'background.default' : 'grey.100';
|
|
|
|
return (
|
|
<Box sx={{ flexShrink: 0, ml: 0.75 }}>
|
|
<IconButton
|
|
color="secondary"
|
|
variant="light"
|
|
sx={{ color: 'text.primary', bgcolor: open ? iconBackColorOpen : iconBackColor }}
|
|
aria-label="open profile"
|
|
ref={anchorRef}
|
|
aria-controls={open ? 'profile-grow' : undefined}
|
|
aria-haspopup="true"
|
|
onClick={handleToggle}
|
|
>
|
|
<MailOutlined />
|
|
</IconButton>
|
|
<Popper
|
|
placement={matchesXs ? 'bottom' : 'bottom-end'}
|
|
open={open}
|
|
anchorEl={anchorRef.current}
|
|
role={undefined}
|
|
transition
|
|
disablePortal
|
|
sx={{
|
|
maxHeight: 'calc(100vh - 250px)',
|
|
overflow: 'auto'
|
|
}}
|
|
popperOptions={{
|
|
modifiers: [
|
|
{
|
|
name: 'offset',
|
|
options: {
|
|
offset: [matchesXs ? -60 : 0, 9]
|
|
}
|
|
}
|
|
]
|
|
}}
|
|
>
|
|
{({ TransitionProps }) => (
|
|
<Transitions type="grow" position={matchesXs ? 'top' : 'top-right'} in={open} {...TransitionProps}>
|
|
<Paper
|
|
sx={{
|
|
boxShadow: theme.customShadows.z1,
|
|
width: '100%',
|
|
minWidth: 285,
|
|
maxWidth: 420,
|
|
[theme.breakpoints.down('md')]: {
|
|
maxWidth: 285
|
|
}
|
|
}}
|
|
>
|
|
<ClickAwayListener onClickAway={handleClose}>
|
|
<MainCard
|
|
title="Message"
|
|
elevation={0}
|
|
border={false}
|
|
content={false}
|
|
secondary={
|
|
<IconButton size="small" onClick={handleToggle}>
|
|
<CloseOutlined />
|
|
</IconButton>
|
|
}
|
|
>
|
|
<List
|
|
component="nav"
|
|
sx={{
|
|
p: 0,
|
|
'& .MuiListItemButton-root': {
|
|
py: 1.5,
|
|
'& .MuiAvatar-root': avatarSX,
|
|
'& .MuiListItemSecondaryAction-root': { ...actionSX, position: 'relative' }
|
|
}
|
|
}}
|
|
>
|
|
<ListItemButton>
|
|
<ListItemAvatar>
|
|
<Avatar alt="profile user" src={avatar2} />
|
|
</ListItemAvatar>
|
|
<ListItemText
|
|
primary={
|
|
<Typography variant="h6">
|
|
It's{' '}
|
|
<Typography component="span" variant="subtitle1">
|
|
Cristina danny's
|
|
</Typography>{' '}
|
|
birthday today.
|
|
</Typography>
|
|
}
|
|
secondary="2 min ago"
|
|
/>
|
|
<ListItemSecondaryAction>
|
|
<Typography variant="caption" noWrap>
|
|
3:00 AM
|
|
</Typography>
|
|
</ListItemSecondaryAction>
|
|
</ListItemButton>
|
|
<Divider />
|
|
<ListItemButton>
|
|
<ListItemAvatar>
|
|
<Avatar alt="profile user" src={avatar3} />
|
|
</ListItemAvatar>
|
|
<ListItemText
|
|
primary={
|
|
<Typography variant="h6">
|
|
<Typography component="span" variant="subtitle1">
|
|
Aida Burg
|
|
</Typography>{' '}
|
|
commented your post.
|
|
</Typography>
|
|
}
|
|
secondary="5 August"
|
|
/>
|
|
<ListItemSecondaryAction>
|
|
<Typography variant="caption" noWrap>
|
|
6:00 PM
|
|
</Typography>
|
|
</ListItemSecondaryAction>
|
|
</ListItemButton>
|
|
<Divider />
|
|
<ListItemButton>
|
|
<ListItemAvatar>
|
|
<Avatar alt="profile user" src={avatar4} />
|
|
</ListItemAvatar>
|
|
<ListItemText
|
|
primary={
|
|
<Typography component="span" variant="subtitle1">
|
|
There was a failure to your setup.
|
|
</Typography>
|
|
}
|
|
secondary="7 hours ago"
|
|
/>
|
|
<ListItemSecondaryAction>
|
|
<Typography variant="caption" noWrap>
|
|
2:45 PM
|
|
</Typography>
|
|
</ListItemSecondaryAction>
|
|
</ListItemButton>
|
|
<Divider />
|
|
<ListItemButton>
|
|
<ListItemAvatar>
|
|
<Avatar alt="profile user" src={avatar5} />
|
|
</ListItemAvatar>
|
|
<ListItemText
|
|
primary={
|
|
<Typography variant="h6">
|
|
<Typography component="span" variant="subtitle1">
|
|
Cristina Danny
|
|
</Typography>{' '}
|
|
invited to join{' '}
|
|
<Typography component="span" variant="subtitle1">
|
|
Meeting.
|
|
</Typography>
|
|
</Typography>
|
|
}
|
|
secondary="Daily scrum meeting time"
|
|
/>
|
|
<ListItemSecondaryAction>
|
|
<Typography variant="caption" noWrap>
|
|
9:10 PM
|
|
</Typography>
|
|
</ListItemSecondaryAction>
|
|
</ListItemButton>
|
|
<Divider />
|
|
<ListItemButton sx={{ textAlign: 'center' }}>
|
|
<ListItemText
|
|
primary={
|
|
<Typography variant="h6" color="primary">
|
|
View All
|
|
</Typography>
|
|
}
|
|
/>
|
|
</ListItemButton>
|
|
</List>
|
|
</MainCard>
|
|
</ClickAwayListener>
|
|
</Paper>
|
|
</Transitions>
|
|
)}
|
|
</Popper>
|
|
</Box>
|
|
);
|
|
};
|
|
|
|
export default Message;
|