react-garden
Version:
React + TypeScript + ThreeJS app using Material UI on NextJS, Apollo Client, GraphQL + WordPress REST APIs, for ThreeD web development.. a part of the threed.ai code family.
89 lines (77 loc) • 2.73 kB
JavaScript
// ** React Imports
import { useRef, useState, Fragment } from 'react'
// ** MUI Imports
import Grow from '@mui/material/Grow'
import Paper from '@mui/material/Paper'
import Button from '@mui/material/Button'
import Popper from '@mui/material/Popper'
import MenuItem from '@mui/material/MenuItem'
import MenuList from '@mui/material/MenuList'
import ButtonGroup from '@mui/material/ButtonGroup'
import ClickAwayListener from '@mui/material/ClickAwayListener'
// ** Icons Imports
import MenuDown from 'mdi-material-ui/MenuDown'
const options = ['Create a merge commit', 'Squash and merge', 'Rebase and merge']
const ButtonGroupSplit = () => {
// ** States
const [open, setOpen] = useState(false)
const [selectedIndex, setSelectedIndex] = useState(1)
// ** Ref
const anchorRef = useRef(null)
const handleClick = () => {
console.info(`You clicked '${options[selectedIndex]}'`)
}
const handleMenuItemClick = (event, index) => {
setSelectedIndex(index)
setOpen(false)
}
const handleToggle = () => {
setOpen(prevOpen => !prevOpen)
}
const handleClose = () => {
setOpen(false)
}
return (
<>
<ButtonGroup variant='contained' ref={anchorRef} aria-label='split button'>
<Button onClick={handleClick}>{options[selectedIndex]}</Button>
<Button
size='small'
aria-haspopup='menu'
onClick={handleToggle}
aria-label='select merge strategy'
aria-expanded={open ? 'true' : undefined}
aria-controls={open ? 'split-button-menu' : undefined}
>
<MenuDown />
</Button>
</ButtonGroup>
<Popper open={open} anchorEl={anchorRef.current} role={undefined} transition disablePortal>
{({ TransitionProps, placement }) => (
<Grow
{...TransitionProps}
style={{ transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom' }}
>
<Paper>
<ClickAwayListener onClickAway={handleClose}>
<MenuList id='split-button-menu'>
{options.map((option, index) => (
<MenuItem
key={option}
disabled={index === 2}
selected={index === selectedIndex}
onClick={event => handleMenuItemClick(event, index)}
>
{option}
</MenuItem>
))}
</MenuList>
</ClickAwayListener>
</Paper>
</Grow>
)}
</Popper>
</>
)
}
export default ButtonGroupSplit