react-application-core
Version:
A react-based application core for the business applications.
92 lines • 3.83 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AsyncLibManager = void 0;
var R = require("ramda");
var BPromise = require("bluebird");
var inversify_1 = require("inversify");
var di_1 = require("../di");
var definition_1 = require("../definition");
var util_1 = require("../util");
var AsyncLibManager = /** @class */ (function () {
function AsyncLibManager() {
this.scriptsTasks = new Map();
this.registeredLibs = new Map();
}
/**
* @stable [09.01.2020]
* @param {IAsyncLibConfigEntity} cfg
*/
AsyncLibManager.prototype.registerLib = function (cfg) {
var alias = cfg.alias || cfg.url;
this.registeredLibs.set(alias, cfg);
};
/**
* @stable [08.01.2020]
* @param {IAsyncLibConfigEntity} cfg
* @returns {Promise<HTMLScriptElement>}
*/
AsyncLibManager.prototype.loadLib = function (cfg) {
var _this = this;
var alias = cfg.alias || cfg.url;
cfg = this.registeredLibs.get(alias) || cfg;
var task = this.scriptsTasks.get(alias);
if (R.isNil(task)) {
var data_1 = { alias: alias };
this.store.dispatch({ type: definition_1.$RAC_ASYNC_LIB_LOAD_ACTION_TYPE, data: data_1 });
this.scriptsTasks.set(alias, task = this.domAccessor
.createScript({ src: cfg.url })
.then(function (el) {
_this.store.dispatch({ type: definition_1.$RAC_ASYNC_LIB_LOAD_DONE_ACTION_TYPE, data: data_1 });
return el;
}));
}
return task;
};
/**
* @stable [09.01.2020]
* @param {IAsyncLibConfigEntity} cfg
* @returns {Bluebird<HTMLScriptElement>}
*/
AsyncLibManager.prototype.waitForLib = function (cfg) {
var _this = this;
// This new promise may be canceled, but not the original!
return new BPromise(function (resolve) { return _this.loadLib(cfg).then(resolve); });
};
/**
* @stable [10.01.2020]
* @param {Bluebird<HTMLScriptElement> | AnyT} promise
* @returns {boolean}
*/
AsyncLibManager.prototype.cancelWaiting = function (promise) {
return util_1.ifNotNilThanValue(promise, function ($$promise) {
if ($$promise.isPending()) {
$$promise.cancel();
return true;
}
return false;
}, false);
};
__decorate([
di_1.lazyInject(di_1.DI_TYPES.DomAccessor),
__metadata("design:type", Object)
], AsyncLibManager.prototype, "domAccessor", void 0);
__decorate([
di_1.lazyInject(di_1.DI_TYPES.Store),
__metadata("design:type", Object)
], AsyncLibManager.prototype, "store", void 0);
AsyncLibManager = __decorate([
inversify_1.injectable()
], AsyncLibManager);
return AsyncLibManager;
}());
exports.AsyncLibManager = AsyncLibManager;
//# sourceMappingURL=async-lib-manager.service.js.map