Use capture on InputSelect click outside listener

This commit is contained in:
Tom Moor
2024-01-31 23:53:16 -05:00
parent 05f4fa90b8
commit 4d935ade80
2 changed files with 15 additions and 10 deletions

View File

@@ -110,13 +110,17 @@ const InputSelect = (props: Props) => {
// Custom click outside handling rather than using `hideOnClickOutside` from reakit so that we can // Custom click outside handling rather than using `hideOnClickOutside` from reakit so that we can
// prevent event bubbling. // prevent event bubbling.
useOnClickOutside(contentRef, (event) => { useOnClickOutside(
contentRef,
(event) => {
if (select.visible) { if (select.visible) {
event.stopPropagation(); event.stopPropagation();
event.preventDefault(); event.preventDefault();
select.hide(); select.hide();
} }
}); },
{ capture: true }
);
React.useEffect(() => { React.useEffect(() => {
previousValue.current = value; previousValue.current = value;

View File

@@ -9,7 +9,8 @@ import useEventListener from "./useEventListener";
*/ */
export default function useOnClickOutside( export default function useOnClickOutside(
ref: React.RefObject<HTMLElement | null>, ref: React.RefObject<HTMLElement | null>,
callback?: (event: MouseEvent | TouchEvent) => void callback?: (event: MouseEvent | TouchEvent) => void,
options: AddEventListenerOptions = {}
) { ) {
const listener = React.useCallback( const listener = React.useCallback(
(event: MouseEvent | TouchEvent) => { (event: MouseEvent | TouchEvent) => {
@@ -22,6 +23,6 @@ export default function useOnClickOutside(
[ref, callback] [ref, callback]
); );
useEventListener("mousedown", listener, window); useEventListener("mousedown", listener, window, options);
useEventListener("touchstart", listener, window); useEventListener("touchstart", listener, window, options);
} }