UNPKG

@audira/carbon-react-native

Version:

Build React Native apps with component and shared patterns using Carbon

74 lines (73 loc) 2.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DialogProvider = void 0; var _react = require("react"); var _index = require("../../contexts/dialog/index.js"); var _index2 = require("./_controller/index.js"); var _jsxRuntime = require("react/jsx-runtime"); const DialogProvider = exports.DialogProvider = /*#__PURE__*/(0, _react.forwardRef)(function DialogProvider({ children, animationConfig, modalProps, overlayProps, overlayTouchDismiss }, ref) { const controllerRef = (0, _react.useRef)(null), dialogDataQueue = (0, _react.useRef)(null), [mountController, setMountController] = (0, _react.useState)(false), setControllerRef = (0, _react.useCallback)(ref => { controllerRef.current = ref; if (controllerRef.current && dialogDataQueue.current) { controllerRef.current.show({ ...dialogDataQueue.current }); dialogDataQueue.current = null; } }, []), show = (0, _react.useCallback)(data => { if (!controllerRef.current) { dialogDataQueue.current = { ...data }; setMountController(true); } else { controllerRef.current?.show(data); } }, []), dismiss = (0, _react.useCallback)(async () => { return controllerRef.current?.dismiss(); }, []), dismissAll = (0, _react.useCallback)(async () => { return controllerRef.current?.dismissAll(); }, []), onEmpty = (0, _react.useCallback)(() => { if (!dialogDataQueue.current) { setMountController(false); } }, []); (0, _react.useImperativeHandle)(ref, () => { return { show, dismiss, dismissAll }; }, [show, dismiss, dismissAll]); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_index.DialogContext.Provider, { value: { show, dismiss, dismissAll }, children: [children, mountController && /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.Controller, { ref: setControllerRef, animationConfig: animationConfig, modalProps: modalProps, overlayProps: overlayProps, overlayTouchDismiss: overlayTouchDismiss, onEmpty: onEmpty })] }); }); //# sourceMappingURL=DialogProvider.js.map