2023-12-30 04:04:59 +01:00
|
|
|
/*
|
|
|
|
|
* Copyright (C) Contributors to the Suwayomi project
|
|
|
|
|
*
|
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
|
|
|
*/
|
|
|
|
|
|
2024-04-14 15:50:12 +02:00
|
|
|
import MuiMenu, { MenuProps } from '@mui/material/Menu';
|
2025-04-18 20:42:41 +02:00
|
|
|
import { useState, type JSX } from 'react';
|
2023-12-30 04:04:59 +01:00
|
|
|
|
|
|
|
|
export const Menu = ({
|
|
|
|
|
children,
|
|
|
|
|
onClose,
|
|
|
|
|
...props
|
|
|
|
|
}: Omit<MenuProps, 'children' | 'onClose'> &
|
2023-12-30 14:26:50 +01:00
|
|
|
Required<Pick<MenuProps, 'onClose'>> & {
|
2024-03-17 18:42:48 +01:00
|
|
|
children: (onClose: () => void, setHideMenu: (hide: boolean) => void) => JSX.Element | JSX.Element[];
|
2023-12-30 14:26:50 +01:00
|
|
|
}) => {
|
|
|
|
|
const [shouldHideMenu, setShouldHideMenu] = useState(false);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<MuiMenu
|
|
|
|
|
{...props}
|
|
|
|
|
open={props.open}
|
|
|
|
|
onClose={onClose}
|
|
|
|
|
sx={{ visibility: !props.open || shouldHideMenu ? 'hidden' : 'visible' }}
|
|
|
|
|
>
|
|
|
|
|
{children(() => {
|
|
|
|
|
onClose({}, 'backdropClick');
|
|
|
|
|
setShouldHideMenu(false);
|
|
|
|
|
}, setShouldHideMenu)}
|
|
|
|
|
</MuiMenu>
|
|
|
|
|
);
|
|
|
|
|
};
|