fix(android): modal open when we don't want to

This commit is contained in:
Fredrik Burmester
2025-11-11 09:07:34 +01:00
parent 485dc6eeac
commit 389d9e2d31
3 changed files with 210 additions and 128 deletions

View File

@@ -191,35 +191,47 @@ const PlatformDropdownComponent = ({
const open = controlledOpen ?? internalOpen;
const onOpenChange = controlledOnOpenChange ?? setInternalOpen;
// Track if modal is currently showing to prevent duplicate calls
const [isModalShowing, setIsModalShowing] = useState(false);
// Handle open/close state changes for Android
useEffect(() => {
if (Platform.OS === "android" && open === true) {
showModal(
<BottomSheetContent
title={title}
groups={groups}
onOptionSelect={onOptionSelect}
onClose={() => {
hideModal();
onOpenChange?.(false);
}}
/>,
{
snapPoints: ["90%"],
enablePanDownToClose: bottomSheetConfig?.enablePanDownToClose ?? true,
},
);
if (Platform.OS === "android") {
if (open === true && !isModalShowing) {
setIsModalShowing(true);
showModal(
<BottomSheetContent
title={title}
groups={groups}
onOptionSelect={onOptionSelect}
onClose={() => {
setIsModalShowing(false);
hideModal();
onOpenChange?.(false);
}}
/>,
{
snapPoints: ["90%"],
enablePanDownToClose:
bottomSheetConfig?.enablePanDownToClose ?? true,
},
);
} else if (open === false && isModalShowing) {
setIsModalShowing(false);
hideModal();
}
}
}, [
open,
title,
groups,
onOptionSelect,
onOpenChange,
bottomSheetConfig,
showModal,
hideModal,
]);
}, [open]);
// Cleanup on unmount
useEffect(() => {
return () => {
if (Platform.OS === "android" && isModalShowing) {
setIsModalShowing(false);
hideModal();
}
};
}, []);
if (Platform.OS === "ios") {
return (