|
|
@ -4,7 +4,10 @@ import { supportsPassiveEvents } from 'detect-passive-events';
|
|
|
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|
|
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|
|
|
import { useHistory } from 'react-router-dom';
|
|
|
|
import { useHistory } from 'react-router-dom';
|
|
|
|
|
|
|
|
|
|
|
|
import { closeDropdownMenu, openDropdownMenu } from 'soapbox/actions/dropdown-menu';
|
|
|
|
import {
|
|
|
|
|
|
|
|
closeDropdownMenu as closeDropdownMenuRedux,
|
|
|
|
|
|
|
|
openDropdownMenu,
|
|
|
|
|
|
|
|
} from 'soapbox/actions/dropdown-menu';
|
|
|
|
import { closeModal, openModal } from 'soapbox/actions/modals';
|
|
|
|
import { closeModal, openModal } from 'soapbox/actions/modals';
|
|
|
|
import { useAppDispatch } from 'soapbox/hooks';
|
|
|
|
import { useAppDispatch } from 'soapbox/hooks';
|
|
|
|
import { isUserTouching } from 'soapbox/is-mobile';
|
|
|
|
import { isUserTouching } from 'soapbox/is-mobile';
|
|
|
@ -53,7 +56,6 @@ const DropdownMenu = (props: IDropdownMenu) => {
|
|
|
|
|
|
|
|
|
|
|
|
const arrowRef = useRef<HTMLDivElement>(null);
|
|
|
|
const arrowRef = useRef<HTMLDivElement>(null);
|
|
|
|
const activeElement = useRef<Element | null>(null);
|
|
|
|
const activeElement = useRef<Element | null>(null);
|
|
|
|
const target = useRef<Element>(null);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const isOnMobile = isUserTouching();
|
|
|
|
const isOnMobile = isUserTouching();
|
|
|
|
|
|
|
|
|
|
|
@ -110,7 +112,7 @@ const DropdownMenu = (props: IDropdownMenu) => {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleClose = () => {
|
|
|
|
const handleClose = () => {
|
|
|
|
if (activeElement.current && activeElement.current === target.current) {
|
|
|
|
if (activeElement.current && activeElement.current === refs.reference.current) {
|
|
|
|
(activeElement.current as any).focus();
|
|
|
|
(activeElement.current as any).focus();
|
|
|
|
activeElement.current = null;
|
|
|
|
activeElement.current = null;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -118,7 +120,7 @@ const DropdownMenu = (props: IDropdownMenu) => {
|
|
|
|
if (isOnMobile) {
|
|
|
|
if (isOnMobile) {
|
|
|
|
dispatch(closeModal('ACTIONS'));
|
|
|
|
dispatch(closeModal('ACTIONS'));
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
dispatch(closeDropdownMenu());
|
|
|
|
closeDropdownMenu();
|
|
|
|
setIsOpen(false);
|
|
|
|
setIsOpen(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -127,6 +129,12 @@ const DropdownMenu = (props: IDropdownMenu) => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const closeDropdownMenu = () => {
|
|
|
|
|
|
|
|
if (isOpen) {
|
|
|
|
|
|
|
|
dispatch(closeDropdownMenuRedux());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleMouseDown: React.EventHandler<React.MouseEvent | React.KeyboardEvent> = () => {
|
|
|
|
const handleMouseDown: React.EventHandler<React.MouseEvent | React.KeyboardEvent> = () => {
|
|
|
|
if (!isOpen) {
|
|
|
|
if (!isOpen) {
|
|
|
|
activeElement.current = document.activeElement;
|
|
|
|
activeElement.current = document.activeElement;
|
|
|
@ -246,7 +254,7 @@ const DropdownMenu = (props: IDropdownMenu) => {
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
useEffect(() => {
|
|
|
|
return () => {
|
|
|
|
return () => {
|
|
|
|
dispatch(closeDropdownMenu());
|
|
|
|
closeDropdownMenu();
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}, []);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
|
|