2020-06-15 05:42:44 +02:00
|
|
|
import React, { useEffect, useState } from 'react';
|
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
import { ToolbarButton } from '@ohif/ui';
|
|
|
|
|
|
2020-06-24 17:11:54 +02:00
|
|
|
function NestedMenu({ children, label, icon }) {
|
2020-06-15 05:42:44 +02:00
|
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
|
|
|
|
2020-06-24 17:11:54 +02:00
|
|
|
const toggleNestedMenu = () => setIsOpen(!isOpen);
|
|
|
|
|
|
|
|
|
|
const closeNestedMenu = () => {
|
|
|
|
|
if (isOpen) {
|
|
|
|
|
setIsOpen(false);
|
2020-06-15 05:42:44 +02:00
|
|
|
}
|
2020-06-24 17:11:54 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
2020-06-15 06:51:36 +02:00
|
|
|
window.addEventListener('click', closeNestedMenu);
|
2020-06-15 05:42:44 +02:00
|
|
|
return () => {
|
2020-06-15 06:51:36 +02:00
|
|
|
window.removeEventListener('click', closeNestedMenu);
|
2020-06-15 05:42:44 +02:00
|
|
|
};
|
|
|
|
|
}, [isOpen]);
|
|
|
|
|
|
2020-06-25 21:49:46 +02:00
|
|
|
const isActive = isOpen || children.props.children.some(c => c.props.isActive);
|
|
|
|
|
|
2020-06-15 05:42:44 +02:00
|
|
|
return (
|
|
|
|
|
<ToolbarButton
|
2020-06-24 17:11:54 +02:00
|
|
|
id="NestedMenu"
|
|
|
|
|
label={label}
|
|
|
|
|
icon={icon}
|
|
|
|
|
onClick={toggleNestedMenu}
|
|
|
|
|
dropdownContent={isOpen && children}
|
2020-06-25 21:49:46 +02:00
|
|
|
isActive={isActive}
|
2020-06-15 05:42:44 +02:00
|
|
|
type="primary"
|
|
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-15 06:51:36 +02:00
|
|
|
NestedMenu.propTypes = {
|
2020-06-15 05:42:44 +02:00
|
|
|
children: PropTypes.any.isRequired,
|
2020-06-24 17:11:54 +02:00
|
|
|
icon: PropTypes.string,
|
|
|
|
|
label: PropTypes.string,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
NestedMenu.defaultProps = {
|
|
|
|
|
icon: "tool-more-menu",
|
|
|
|
|
label: "More",
|
2020-06-15 05:42:44 +02:00
|
|
|
};
|
|
|
|
|
|
2020-06-15 06:51:36 +02:00
|
|
|
export default NestedMenu;
|