Files
pawol.nu/components/awtis/mizik-badj-meni.js
T

108 lines
2.6 KiB
JavaScript
Raw Normal View History

import {useRef, useEffect, useState} from 'react'
import {useRouter} from 'next/router'
2020-12-11 01:51:23 +01:00
import PropTypes from 'prop-types'
import {
Button,
ClickAwayListener,
Grow,
MenuItem,
MenuList,
Paper,
Popper,
Badge
} from '@material-ui/core'
import {makeStyles} from '@material-ui/core/styles'
import MenuBookIcon from '@material-ui/icons/MenuBook'
const useStyles = makeStyles(theme => ({
root: {
display: 'flex'
},
paper: {
marginRight: theme.spacing(2)
}
}))
export default function MizikBadjMeni({miziks}) {
const classes = useStyles()
const [open, setOpen] = useState(false)
const anchorRef = useRef(null)
const router = useRouter()
2020-12-11 01:51:23 +01:00
const handleToggle = () => {
setOpen(previousOpen_ => !previousOpen_)
}
const handleClose = event => {
if (anchorRef.current && anchorRef.current.contains(event.target)) {
return
}
setOpen(false)
}
const handleClick = slug => {
2020-12-17 23:19:21 +01:00
router.push(`/teks/${slug}#${slug}`).then(() => window.scrollTo(0, 0))
}
2020-12-11 01:51:23 +01:00
function handleListKeyDown(event) {
if (event.key === 'Tab') {
event.preventDefault()
setOpen(false)
}
}
const previousOpen = useRef(open)
useEffect(() => {
if (previousOpen.current === true && open === false) {
anchorRef.current.focus()
}
previousOpen.current = open
}, [open])
return (
<div className={classes.root}>
<Button
ref={anchorRef}
aria-controls={open ? 'menu-list-grow' : undefined}
aria-haspopup='true'
onClick={handleToggle}
>
<Badge
anchorOrigin={{
vertical: 'top',
horizontal: 'right'
}}
badgeContent={miziks.length}
2020-12-12 03:28:51 +01:00
color='primary'
2020-12-11 01:51:23 +01:00
>
<MenuBookIcon style={{fontSize: 30}} />
</Badge>
</Button>
<Popper transition disablePortal open={open} anchorEl={anchorRef.current} role={undefined}>
{({TransitionProps, placement}) => (
<Grow
{...TransitionProps}
style={{transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom'}}
>
<Paper>
<ClickAwayListener onClickAway={handleClose}>
<MenuList autoFocusItem={open} id='menu-list-grow' onKeyDown={handleListKeyDown}>
{miziks.map(m => <MenuItem key={m._id} onClick={() => handleClick(m.slug)}>{m.titre}</MenuItem>)}
2020-12-11 01:51:23 +01:00
</MenuList>
</ClickAwayListener>
</Paper>
</Grow>
)}
</Popper>
</div>
)
}
MizikBadjMeni.propTypes = {
miziks: PropTypes.array.isRequired
}