expo-modal-popup
Version:
Modal component for expo react native
58 lines (57 loc) • 2.38 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModalProvider = exports.useModal = exports.TypeEnum = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var ModalPopup_1 = require("./ModalPopup");
var TypeEnum_1 = require("./TypeEnum");
var TypeEnum_2 = require("./TypeEnum");
Object.defineProperty(exports, "TypeEnum", { enumerable: true, get: function () { return TypeEnum_2.TypeEnum; } });
var ModalContext = (0, react_1.createContext)({ openModal: function () { } });
var useModal = function () {
return (0, react_1.useContext)(ModalContext);
};
exports.useModal = useModal;
var ModalProvider = function (_a) {
var children = _a.children;
var _b = (0, react_1.useState)(false), isOpen = _b[0], setIsOpen = _b[1];
var _c = (0, react_1.useState)(""), message = _c[0], setMessage = _c[1];
var _d = (0, react_1.useState)(TypeEnum_1.TypeEnum.error), type = _d[0], setType = _d[1];
/** Opens a global modal for three seconds
* @param {string} message - Message to show
* @param {string} type - Could be either: 'error|warning|success'
*/
var openModal = function (message, type) {
// I think I might need a reducer because I want it to cause only one rerendering
// while (!isOpen);
setMessage(message);
setType(type);
setIsOpen(true);
};
(0, react_1.useEffect)(function () {
var id = setTimeout(function () {
if (isOpen) {
setIsOpen(false);
}
}, 3000);
return function () {
clearTimeout(id);
};
}, [isOpen]);
var value = {
openModal: openModal,
};
return ((0, jsx_runtime_1.jsxs)(ModalContext.Provider, __assign({ value: value }, { children: [(0, jsx_runtime_1.jsx)(ModalPopup_1.ModalPopup, { isOpen: isOpen, setIsOpen: setIsOpen, errorMsg: message, type: type }), children] })));
};
exports.ModalProvider = ModalProvider;