From d0041de873ab4165471933377d1bd80ef17ff0a0 Mon Sep 17 00:00:00 2001 From: adids1221 Date: Tue, 20 Jan 2026 16:14:32 +0200 Subject: [PATCH] fix: prevent ExpandableOverlay onDismiss callback from being called twice --- .../src/components/picker/__tests__/index.spec.tsx | 2 +- .../src/incubator/expandableOverlay/index.tsx | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/react-native-ui-lib/src/components/picker/__tests__/index.spec.tsx b/packages/react-native-ui-lib/src/components/picker/__tests__/index.spec.tsx index fa44fd684e..44512945c4 100644 --- a/packages/react-native-ui-lib/src/components/picker/__tests__/index.spec.tsx +++ b/packages/react-native-ui-lib/src/components/picker/__tests__/index.spec.tsx @@ -166,7 +166,7 @@ describe('Picker', () => { expect(driver.isOpen()).toBeTruthy(); driver.cancel(); expect(driver.isOpen()).toBeFalsy(); - expect(onDismiss).toHaveBeenCalledTimes(2); // TODO: this should be 1 + expect(onDismiss).toHaveBeenCalledTimes(1); }); // TODO: this test is not passing yet diff --git a/packages/react-native-ui-lib/src/incubator/expandableOverlay/index.tsx b/packages/react-native-ui-lib/src/incubator/expandableOverlay/index.tsx index a084fd567e..82c7240b8a 100644 --- a/packages/react-native-ui-lib/src/incubator/expandableOverlay/index.tsx +++ b/packages/react-native-ui-lib/src/incubator/expandableOverlay/index.tsx @@ -83,11 +83,16 @@ const ExpandableOverlay = (props: ExpandableOverlayProps, ref: any) => { onPress?.(props); }, [onPress, customValue]); - const closeExpandable = useCallback(() => { + const dismissOverlay = useCallback(() => { setExpandableVisible(false); focusAccessibility(); + }, [focusAccessibility]); + + const closeExpandable = useCallback(() => { + dismissOverlay(); useDialog ? dialogProps?.onDismiss?.() : modalProps?.onDismiss?.(); - }, [useDialog, dialogProps?.onDismiss, modalProps?.onDismiss, focusAccessibility]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dismissOverlay, dialogProps?.onDismiss, modalProps?.onDismiss]); const toggleExpandable = useCallback(() => (visible ? closeExpandable() : openExpandable()), [visible, openExpandable, closeExpandable]); @@ -105,7 +110,7 @@ const ExpandableOverlay = (props: ExpandableOverlayProps, ref: any) => { overlayBackgroundColor={Colors.$backgroundDefault} {...modalProps} visible={visible} - onDismiss={closeExpandable} + onDismiss={dismissOverlay} onRequestClose={closeExpandable} onBackgroundPress={closeExpandable} >