@audira/carbon-react-native
Version:
Build React Native apps with component and shared patterns using Carbon
74 lines (73 loc) • 2.25 kB
JavaScript
;
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