UNPKG

@gluestack-ui/core

Version:

Universal UI components for React Native, Expo, and Next.js

78 lines 3.42 kB
var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import React, { forwardRef } from 'react'; import { Platform } from 'react-native'; import { useControllableState } from '@gluestack-ui/utils/hooks'; import { Overlay } from '../../overlay/creator'; import { ActionsheetContext } from './context'; import { StyleSheet } from 'react-native'; export function Actionsheet(StyledActionsheet) { return forwardRef((_a, ref) => { var { children, isOpen, onClose, onOpen, defaultIsOpen = false, trapFocus = true, closeOnOverlayClick = true, isKeyboardDismissable = true, useRNModal, initialFocusRef, finalFocusRef, snapPoints, _experimentalOverlay = false, preventScroll = false } = _a, props = __rest(_a, ["children", "isOpen", "onClose", "onOpen", "defaultIsOpen", "trapFocus", "closeOnOverlayClick", "isKeyboardDismissable", "useRNModal", "initialFocusRef", "finalFocusRef", "snapPoints", "_experimentalOverlay", "preventScroll"]); const overlayStyle = Platform.OS === 'web' ? { position: 'fixed' } : {}; const [visible, setVisible] = useControllableState({ value: isOpen, defaultValue: defaultIsOpen, onChange: (val) => { if (val === false) { onClose && onClose(); } else { onOpen && onOpen(); } }, }); const [backdropVisible, setBackdropVisible] = useControllableState({ value: isOpen, defaultValue: defaultIsOpen, }); const handleClose = React.useCallback(() => { setVisible(false); }, [setVisible]); const handleCloseBackdrop = React.useCallback(() => { setBackdropVisible(false); }, [setBackdropVisible]); const contextValue = React.useMemo(() => { return { handleClose, closeOnOverlayClick, visible, backdropVisible: backdropVisible, handleCloseBackdrop, trapFocus, initialFocusRef, finalFocusRef, snapPoints, preventScroll, }; }, [ handleClose, handleCloseBackdrop, closeOnOverlayClick, visible, backdropVisible, trapFocus, initialFocusRef, finalFocusRef, snapPoints, preventScroll, ]); return (<Overlay isOpen={visible} onRequestClose={handleClose} isKeyboardDismissable={isKeyboardDismissable} useRNModal={useRNModal} style={overlayStyle}> <ActionsheetContext.Provider value={contextValue}> <StyledActionsheet ref={ref} style={[StyleSheet.absoluteFill]} {...props}> {children} </StyledActionsheet> </ActionsheetContext.Provider> </Overlay>); }); } //# sourceMappingURL=Actionsheet.jsx.map