From 852bd3d0337bccefb4e5e5edf104fc325adc8bda Mon Sep 17 00:00:00 2001 From: atomiks Date: Mon, 21 Oct 2024 07:35:39 +1100 Subject: [PATCH] Fix Firefox close on mousedown --- .../src/Select/Trigger/useSelectTrigger.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/mui-base/src/Select/Trigger/useSelectTrigger.ts b/packages/mui-base/src/Select/Trigger/useSelectTrigger.ts index 42e06dd6b..145eb6c23 100644 --- a/packages/mui-base/src/Select/Trigger/useSelectTrigger.ts +++ b/packages/mui-base/src/Select/Trigger/useSelectTrigger.ts @@ -25,11 +25,11 @@ export function useSelectTrigger( setOpen, setTriggerElement, selectionRef, - popupRef, value, getValidationProps, commitValidation, setTouchModality, + positionerElement, } = useSelectRootContext(); const { labelId, setTouched } = useFieldRootContext(); @@ -49,12 +49,12 @@ export function useSelectTrigger( React.useEffect(() => { if (open) { - timeoutRef.current = window.setTimeout(() => { + const timeoutId = window.setTimeout(() => { selectionRef.current.allowMouseUp = true; }, 400); return () => { - window.clearTimeout(timeoutRef.current); + clearTimeout(timeoutId); }; } @@ -63,6 +63,8 @@ export function useSelectTrigger( allowSelect: true, }; + clearTimeout(timeoutRef.current); + return undefined; }, [open, selectionRef]); @@ -108,7 +110,7 @@ export function useSelectTrigger( if ( isInsideTrigger || - contains(popupRef.current, mouseUpTarget) || + contains(positionerElement, mouseUpTarget) || contains(triggerRef.current, mouseUpTarget) ) { return; @@ -117,7 +119,10 @@ export function useSelectTrigger( setOpen(false, mouseEvent); } - doc.addEventListener('mouseup', handleMouseUp, { once: true }); + // Firefox can fire this upon mousedown + timeoutRef.current = window.setTimeout(() => { + doc.addEventListener('mouseup', handleMouseUp, { once: true }); + }); }, }, getButtonProps(), @@ -133,7 +138,7 @@ export function useSelectTrigger( value, setTouchModality, open, - popupRef, + positionerElement, setOpen, ], );