@difizen/mana-app
Version:
200 lines • 9.12 kB
JavaScript
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
var _dec, _dec2, _dec3, _class, _descriptor, _descriptor2, _descriptor3, _dec4, _dec5, _class2, _class3, _descriptor4;
function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); }
import { prop } from '@difizen/mana-observable';
import { contrib, singleton } from '@difizen/mana-syringe';
import { renderModal as _renderModal, ModalContribution } from "./modal-protocol";
export var ModalItemView = (_dec = prop(), _dec2 = prop(), _dec3 = prop(), (_class = /*#__PURE__*/function () {
function ModalItemView(modalItem) {
var _this = this;
_classCallCheck(this, ModalItemView);
_initializerDefineProperty(this, "modalItem", _descriptor, this);
_initializerDefineProperty(this, "modalVisible", _descriptor2, this);
_initializerDefineProperty(this, "modalData", _descriptor3, this);
this.open = function (data) {
_this.modalData = data;
_this.modalVisible = true;
};
this.close = function () {
_this.modalVisible = false;
_this.modalData = undefined;
};
this.disposed = false;
this.modalItem = modalItem;
}
_createClass(ModalItemView, [{
key: "shouldRender",
value: function shouldRender() {
if (this.modalVisible !== true || this.disposed) {
return false;
}
if (!this.modalItem.component) {
console.warn("".concat(this.modalItem.id, " is not valid modal"));
return false;
}
if (this.modalItem.shouldRender) {
return this.modalItem.shouldRender(this.modalData);
}
return true;
}
}, {
key: "getModalProps",
value: function getModalProps() {
var props = {
modalItem: this.modalItem,
data: this.modalData,
visible: this.modalVisible,
close: this.close
};
return props;
}
}, {
key: "dispose",
value: function dispose() {
this.disposed = true;
this.close();
}
}]);
return ModalItemView;
}(), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "modalItem", [_dec], {
configurable: true,
enumerable: true,
writable: true,
initializer: null
}), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, "modalVisible", [_dec2], {
configurable: true,
enumerable: true,
writable: true,
initializer: function initializer() {
return false;
}
}), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, "modalData", [_dec3], {
configurable: true,
enumerable: true,
writable: true,
initializer: null
})), _class));
export var ModalService = (_dec4 = singleton(), _dec5 = prop(), _dec4(_class2 = (_class3 = /*#__PURE__*/function () {
function ModalService(contributions) {
var _this2 = this;
_classCallCheck(this, ModalService);
this.modals = new Map();
_initializerDefineProperty(this, "modalViewList", _descriptor4, this);
this.openModal = function (modal, data) {
var modalId = typeof modal === 'string' ? modal : modal.id;
var exist = _this2.getModal(modalId);
if (exist) {
var modalView = _this2.getOrCreateModalView(exist);
modalView.open(data);
}
};
this.closeModal = function (modal) {
var _this2$modalViewList$;
var modalId = typeof modal === 'string' ? modal : modal.id;
(_this2$modalViewList$ = _this2.modalViewList.find(function (item) {
return item.modalItem.id === modalId;
})) === null || _this2$modalViewList$ === void 0 || _this2$modalViewList$.close();
};
this.closeAllModal = function () {
_this2.modalViewList.forEach(function (item) {
return item.close();
});
};
this.getModalProps = function (itemView) {
return itemView.getModalProps();
};
this.shouldRenderModal = function (itemView) {
return itemView.shouldRender();
};
this.contributions = contributions;
}
ModalService = contrib(ModalContribution)(ModalService, undefined, 0) || ModalService;
_createClass(ModalService, [{
key: "init",
value: function init() {
var _this3 = this;
this.contributions.getContributions().forEach(function (contribution) {
if (contribution.registerModal) {
var modalItem = contribution.registerModal();
_this3.registerModal(modalItem);
}
if (contribution.registerModals) {
var modalItems = contribution.registerModals();
_this3.registerModals(modalItems);
}
});
}
}, {
key: "hasModal",
value: function hasModal(modal) {
var modalId = typeof modal === 'string' ? modal : modal.id;
return this.modals.has(modalId);
}
}, {
key: "getModal",
value: function getModal(modal) {
var modalId = typeof modal === 'string' ? modal : modal.id;
return this.modals.get(modalId);
}
}, {
key: "registerModal",
value: function registerModal(modal) {
this.modals.set(modal.id, modal);
}
}, {
key: "registerModals",
value: function registerModals(modals) {
var _this4 = this;
modals.forEach(function (item) {
_this4.registerModal(item);
});
}
}, {
key: "unregisterModal",
value: function unregisterModal(modal) {
this.modals.delete(modal.id);
}
}, {
key: "getOrCreateModalView",
value: function getOrCreateModalView(modal) {
var viewInstance = this.modalViewList.find(function (item) {
return item.modalItem.id === modal.id;
});
if (!viewInstance) {
var modalItem = this.getModal(modal);
if (!modalItem) {
throw Error("should have modal ".concat(modal.id, " registed"));
}
viewInstance = new ModalItemView(modalItem);
this.modalViewList.push(viewInstance);
}
return viewInstance;
}
}, {
key: "renderModal",
value: function renderModal(itemView) {
if (!this.shouldRenderModal(itemView)) {
return null;
}
if (itemView.modalItem.render) {
return itemView.modalItem.render(this.getModalProps(itemView));
}
return _renderModal(itemView.modalItem.component, this.getModalProps(itemView));
}
}]);
return ModalService;
}(), (_descriptor4 = _applyDecoratedDescriptor(_class3.prototype, "modalViewList", [_dec5], {
configurable: true,
enumerable: true,
writable: true,
initializer: function initializer() {
return [];
}
})), _class3)) || _class2);