Fix navigation in modal + dropdown combination

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak
2024-08-17 00:26:29 +02:00
parent 6ea766d93b
commit f48dc1f0b8
4 changed files with 23 additions and 27 deletions

View File

@ -1,6 +1,5 @@
import clsx from 'clsx';
import { supportsPassiveEvents } from 'detect-passive-events';
import React, { useRef, useEffect } from 'react';
import React, { useRef } from 'react';
import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
import { changeComposeFederated, changeComposeVisibility } from 'soapbox/actions/compose';
@ -28,8 +27,6 @@ const messages = defineMessages({
local: { id: 'privacy.local', defaultMessage: '{privacy} (local-only)' },
});
const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
interface Option {
icon: string;
value: string;
@ -54,12 +51,6 @@ const PrivacyDropdownMenu: React.FC<IPrivacyDropdownMenu> = ({
const node = useRef<HTMLUListElement>(null);
const focusedItem = useRef<HTMLLIElement>(null);
const handleDocumentClick = (e: MouseEvent | TouchEvent) => {
if (node.current && !node.current.contains(e.target as HTMLElement)) {
onClose();
}
};
const handleKeyDown: React.KeyboardEventHandler = e => {
const index = [...e.currentTarget.parentElement!.children].indexOf(e.currentTarget);
let element: ChildNode | null | undefined = null;
@ -113,18 +104,6 @@ const PrivacyDropdownMenu: React.FC<IPrivacyDropdownMenu> = ({
}
};
useEffect(() => {
document.addEventListener('click', handleDocumentClick, false);
document.addEventListener('touchend', handleDocumentClick, listenerOptions);
focusedItem.current?.focus({ preventScroll: true });
return () => {
document.removeEventListener('click', handleDocumentClick, false);
document.removeEventListener('touchend', handleDocumentClick);
};
}, []);
return (
<ul ref={node}>
{items.map(item => {