UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

154 lines (123 loc) 4.99 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"]; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports.useModal = exports.injectModal = exports["default"] = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _react = _interopRequireWildcard(require("react")); var _noop = _interopRequireDefault(require("lodash/noop")); var _ModalContainer = _interopRequireDefault(require("../modal-container/ModalContainer")); var _Modal = _interopRequireDefault(require("../modal/Modal")); var _ModalContext = _interopRequireDefault(require("./ModalContext")); var ModalProvider = function ModalProvider(props) { var _useContext = (0, _react.useContext)(_ModalContext["default"]), contextLocation = _useContext.location; var _props$location = props.location, location = _props$location === void 0 ? contextLocation : _props$location, children = props.children, getContainer = props.getContainer; var ref = (0, _react.useRef)(null); var prepareToOpen = (0, _react.useMemo)(function () { return []; }, []); var open = (0, _react.useCallback)(function (modalProps) { var container = ref.current; if (container) { var close = /*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(destroy) { var _modalProps, _modalProps$onClose, onClose; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _modalProps = modalProps, _modalProps$onClose = _modalProps.onClose, onClose = _modalProps$onClose === void 0 ? _noop["default"] : _modalProps$onClose; _context.next = 3; return onClose(); case 3: _context.t0 = _context.sent; if (!(_context.t0 !== false)) { _context.next = 6; break; } if (destroy) { container.close((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, modalProps), {}, { destroyOnClose: true })); } else { container.close(modalProps); } case 6: case "end": return _context.stop(); } } }, _callee); })); return function close(_x) { return _ref.apply(this, arguments); }; }(); var show = function show() { container.open(modalProps); }; var update = function update(newProps) { container.update((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, modalProps), newProps)); }; modalProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({ close: close, update: update }, _Modal["default"].defaultProps), modalProps); container.open(modalProps); return { close: close, open: show, update: update }; } prepareToOpen.push(modalProps); }, []); (0, _react.useEffect)(function () { if (ref.current) { prepareToOpen.forEach(function (prepare) { return open(prepare); }); } }, [ref, open]); var context = { open: open, location: location }; return /*#__PURE__*/_react["default"].createElement(_ModalContext["default"].Provider, { value: context }, /*#__PURE__*/_react["default"].createElement(_ModalContainer["default"], { ref: ref, location: location, getContainer: getContainer }), children); }; var useModal = function useModal() { return (0, _react.useContext)(_ModalContext["default"]); }; exports.useModal = useModal; var injectModal = function injectModal(Target) { var Hoc = function Hoc(props) { var modal = useModal(); return /*#__PURE__*/_react["default"].createElement(Target, (0, _extends2["default"])({}, props, { Modal: modal })); }; Hoc.displayName = "".concat(Target.displayName || Target.name || 'Anonymous', "-with-inject-modal"); return Hoc; }; exports.injectModal = injectModal; ModalProvider.displayName = 'ModalProvider'; ModalProvider.useModal = useModal; ModalProvider.injectModal = injectModal; var _default = ModalProvider; exports["default"] = _default; //# sourceMappingURL=ModalProvider.js.map