Skip to content

Commit a55d5ef

Browse files
committed
Improve mutation mode selector
1 parent 8452c4f commit a55d5ef

File tree

1 file changed

+36
-78
lines changed

1 file changed

+36
-78
lines changed

examples/simple/src/posts/PostCreate.tsx

Lines changed: 36 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,14 @@ import {
3131
import { useFormContext, useWatch } from 'react-hook-form';
3232
import {
3333
Button,
34-
ButtonGroup,
35-
ClickAwayListener,
3634
Dialog,
3735
DialogActions,
3836
DialogContent,
39-
Grow,
37+
Menu,
4038
MenuItem,
41-
MenuList,
42-
Paper,
43-
Popper,
4439
Stack,
4540
} from '@mui/material';
46-
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
41+
import MoreButton from '@mui/icons-material/MoreVert';
4742

4843
// Client side id generation. We start from 100 to avoid querying the post list to get the next id as we
4944
// may be offline and accessing this page directly (without going through the list page first) which would
@@ -334,88 +329,51 @@ const MutationModesSelector = (props: {
334329
setMutationMode: (mode: MutationMode) => void;
335330
}) => {
336331
const { setMutationMode, mutationMode } = props;
337-
const [open, setOpen] = React.useState(false);
338-
const anchorRef = React.useRef<HTMLDivElement>(null);
339-
const buttonRef = React.useRef<HTMLButtonElement>(null);
340-
341-
const handleMenuItemClick = (mutationMode: MutationMode) => {
342-
setOpen(false);
343-
setMutationMode(mutationMode);
332+
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
333+
const open = Boolean(anchorEl);
334+
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
335+
setAnchorEl(event.currentTarget);
344336
};
345-
346-
const handleToggle = () => {
347-
setOpen(prevOpen => !prevOpen);
337+
const handleClose = () => {
338+
setAnchorEl(null);
348339
};
349340

350-
const handleClose = (event: Event) => {
351-
if (
352-
anchorRef.current &&
353-
anchorRef.current.contains(event.target as HTMLElement)
354-
) {
355-
return;
356-
}
357-
358-
setOpen(false);
341+
const handleMenuItemClick = (mutationMode: MutationMode) => {
342+
setMutationMode(mutationMode);
359343
};
360344

361345
return (
362346
<>
363-
<ButtonGroup
364-
variant="text"
365-
ref={anchorRef}
366-
aria-label="Button group with a nested menu"
347+
<Button
348+
id="mutation-modes-button"
349+
size="small"
350+
aria-controls={open ? 'mutation-modes-menu' : undefined}
351+
aria-expanded={open ? 'true' : undefined}
352+
aria-label="select mutation mode"
353+
aria-haspopup="menu"
354+
onClick={handleClick}
355+
endIcon={<MoreButton />}
367356
>
368-
<Button ref={buttonRef}>{mutationMode}</Button>
369-
<Button
370-
size="small"
371-
aria-controls={open ? 'split-button-menu' : undefined}
372-
aria-expanded={open ? 'true' : undefined}
373-
aria-label="select merge strategy"
374-
aria-haspopup="menu"
375-
onClick={handleToggle}
376-
>
377-
<ArrowDropDownIcon />
378-
</Button>
379-
</ButtonGroup>
380-
<Popper
381-
sx={{ zIndex: 1 }}
357+
{mutationMode}
358+
</Button>
359+
<Menu
360+
id="mutation-modes-menu"
361+
anchorEl={anchorEl}
382362
open={open}
383-
anchorEl={anchorRef.current}
384-
role={undefined}
385-
transition
386-
disablePortal
363+
onClose={handleClose}
364+
MenuListProps={{
365+
'aria-labelledby': 'mutation-modes-button',
366+
}}
387367
>
388-
{({ TransitionProps, placement }) => (
389-
<Grow
390-
{...TransitionProps}
391-
style={{
392-
transformOrigin:
393-
placement === 'bottom'
394-
? 'center top'
395-
: 'center bottom',
396-
}}
368+
{MutationModes.map(mutationMode => (
369+
<MenuItem
370+
key={mutationMode}
371+
onClick={() => handleMenuItemClick(mutationMode)}
397372
>
398-
<Paper>
399-
<ClickAwayListener onClickAway={handleClose}>
400-
<MenuList id="split-button-menu" autoFocusItem>
401-
{MutationModes.map(mutationMode => (
402-
<MenuItem
403-
key={mutationMode}
404-
onClick={() =>
405-
handleMenuItemClick(
406-
mutationMode
407-
)
408-
}
409-
>
410-
{mutationMode}
411-
</MenuItem>
412-
))}
413-
</MenuList>
414-
</ClickAwayListener>
415-
</Paper>
416-
</Grow>
417-
)}
418-
</Popper>
373+
{mutationMode}
374+
</MenuItem>
375+
))}
376+
</Menu>
419377
</>
420378
);
421379
};

0 commit comments

Comments
 (0)