4 interface HandleDropdownParams {
8 onOpen?: Function | undefined;
9 onClose?: Function | undefined;
12 export function handleDropdown(options: HandleDropdownParams) {
13 const {menu, toggle, onClose, onOpen, showOnHover} = options;
14 let clickListener: Function|null = null;
19 window.removeEventListener('click', clickListener as EventListener);
28 clickListener = (event: MouseEvent) => {
29 if (!toggle.contains(event.target as HTMLElement) && !menu.contains(event.target as HTMLElement)) {
33 window.addEventListener('click', clickListener as EventListener);
39 const toggleShowing = (event: MouseEvent) => {
40 menu.hasAttribute('hidden') ? show() : hide();
42 toggle.addEventListener('click', toggleShowing);
44 toggle.addEventListener('mouseenter', toggleShowing);
47 menu.addEventListener('mouseleave', hide);