react-native-multiple-modals
Version:
Native implementation with the ability to display multiple Modals
90 lines (89 loc) • 3.09 kB
JavaScript
"use strict";
import { Platform, Pressable, StatusBar, StyleSheet, View } from 'react-native';
import { LayoutInspectorProvider } from './LayoutInspectorProvider';
import { ScrollContextResetter } from './ScrollContextResetter';
import { GestureHandlerRootView } from './integrations/GestureHandlerRootView';
import RNTModalView from './newarch/NativeRNTModalView';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
export let DismissalSource = /*#__PURE__*/function (DismissalSource) {
DismissalSource["BackButton"] = "BackButton";
DismissalSource["Backdrop"] = "Backdrop";
return DismissalSource;
}({});
const backdropAccessibilityLabel = 'Backdrop';
const backdropAccessibilityHint = 'Double-tap to close the modal';
const defaultBackdropColor = 'rgba(0, 0, 0, 0.3)';
const isIOS = Platform.OS === 'ios';
export const ModalView = ({
children,
renderBackdrop,
onRequestDismiss,
contentContainerStyle,
statusBar,
showBackdrop = true,
BackdropPressableComponent = Pressable,
backdropColor = defaultBackdropColor,
disableDefaultStatusBarIOS = false,
animationType = 'none',
statusBarTranslucent
}) => {
return /*#__PURE__*/_jsx(RNTModalView, {
style: styles.container,
statusBarTranslucent: statusBar?.translucent ?? statusBarTranslucent,
statusBarIconsStyle: statusBar?.barStyle ?? undefined,
onPressBackAndroid: () => onRequestDismiss?.(DismissalSource.BackButton),
animationType: animationType,
children: /*#__PURE__*/_jsx(View, {
collapsable: false,
style: styles.flex,
children: /*#__PURE__*/_jsxs(LayoutInspectorProvider, {
children: [isIOS && statusBar && !disableDefaultStatusBarIOS ? /*#__PURE__*/_jsx(StatusBar, {
...statusBar
}) : null, /*#__PURE__*/_jsxs(GestureHandlerRootView, {
style: styles.flex,
children: [showBackdrop && /*#__PURE__*/_jsx(View, {
style: [styles.backdropContainer],
children: /*#__PURE__*/_jsx(BackdropPressableComponent, {
accessibilityLabel: backdropAccessibilityLabel,
accessibilityHint: backdropAccessibilityHint,
style: styles.flex,
onPress: () => onRequestDismiss?.(DismissalSource.Backdrop),
children: renderBackdrop ? renderBackdrop() : /*#__PURE__*/_jsx(View, {
style: [styles.flex, {
backgroundColor: backdropColor
}]
})
})
}), /*#__PURE__*/_jsx(ScrollContextResetter, {
children: /*#__PURE__*/_jsx(View, {
pointerEvents: "box-none",
style: [styles.content, contentContainerStyle],
children: children
})
})]
})]
})
})
});
};
const styles = StyleSheet.create({
container: {
position: 'absolute'
},
flex: {
flex: 1
},
content: {
zIndex: 1,
flex: 1
},
backdropContainer: {
position: 'absolute',
zIndex: 0,
top: 0,
bottom: 0,
left: 0,
right: 0
}
});
//# sourceMappingURL=ModalView.js.map