@miracledevs/paradigm-web-angular
Version:
An angular wrapper with base functionality and helper services.
206 lines • 17.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/*!
* Paradigm Framework - Angular Wrapper
* Copyright (c) 2017 Miracle Devs, Inc
* Licensed under MIT (https://github.com/MiracleDevs/Paradigm.Web.Angular/blob/master/LICENSE)
*/
import { MessageBusService } from '../services/message-bus.service';
import { ArrayList } from '@miracledevs/paradigm-ui-web-shared';
import { AlertService } from '../services/alert.service';
export class ComponentBase {
/**
* Creates a new instance of \@see ComponentBase
* @param {?} injector reference to an injector service.
*/
constructor(injector) {
this.injector = injector;
}
/**
* Called when the component is initialized.
* @return {?}
*/
ngOnInit() {
}
/**
* Called when the component is destroyed.
* @return {?}
*/
ngOnDestroy() {
this.unregisterTokens();
}
/**
* Gets a reference to the message bus.
* @protected
* @return {?}
*/
getMessageBus() {
if (!this.messageBus) {
this.messageBus = this.injector.get(MessageBusService);
this.messageTokens = new ArrayList();
}
return this.messageBus;
}
/**
* Registers a message handler for a given message type.
* @protected
* @template T
* @param {?} type the message type.
* @param {?} handler the message handler to process when some part of the application sends a message of type \@see type
* @return {?}
*/
registerMessage(type, handler) {
/** @type {?} */
const token = this.getMessageBus().register(type, handler);
this.messageTokens.add(token);
}
/**
* Unregisters all the tokens registered within this component.
* @protected
* @return {?}
*/
unregisterTokens() {
if (this.messageTokens && this.messageTokens.count() > 0) {
this.messageTokens.forEach((/**
* @param {?} x
* @return {?}
*/
x => x.unregister()));
this.messageTokens.clear();
}
}
/**
* Unregisters a particular token.
* If no unregister take place, the component will unregister all the tokens
* on \@see ngOnDestroy
* @protected
* @template T
* @param {?} type the type of message to unregister
* @return {?}
*/
unregisterToken(type) {
if (this.messageTokens && this.messageTokens.count() > 0) {
/** @type {?} */
const token = this.messageTokens.firstOrDefault((/**
* @param {?} x
* @return {?}
*/
x => x.type === type));
if (token) {
token.unregister();
this.messageTokens.remove(token);
}
}
}
/**
* Sends a message using the message bus.
* @protected
* @template T
* @param {?} message The message instance to send using the message bus.
* @param {?=} token if specified, the component can target one specific registration token and handler;
* if not, all the handlers registered for this message type, will receive the message.
* @return {?}
*/
sendMessage(message, token) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
yield this.getMessageBus().send(message, token);
});
}
/**
* Gets the alert service.
* @protected
* @return {?}
*/
getAlerts() {
if (!this.alerts) {
this.alerts = this.injector.get(AlertService);
}
return this.alerts;
}
/**
* Adds a message in the alert service.
* @protected
* @param {?} message message to add.
* @return {?}
*/
addMessage(message) {
this.getAlerts().addMessage(message);
}
/**
* Adds a warning in the alert service.
* @protected
* @param {?} warning warning to add.
* @return {?}
*/
addWarning(warning) {
this.getAlerts().addWarning(warning);
}
/**
* Adds an error in the alert service.
* @protected
* @param {?} error error to add.
* @return {?}
*/
addError(error) {
this.getAlerts().addError(error);
}
/**
* Handles an application error, reporting the error to the alert service.
* @protected
* @param {?} error the error that needs to be handled.
* @return {?}
*/
handleError(error) {
if (!error) {
return;
}
if (error.message) {
this.addError(error.message);
}
else if (error.Message) {
this.addError(error.Message);
}
else if (error.exceptionMessage) {
this.addError(error.exceptionMessage);
}
else if (error.ExceptionMessage) {
this.addError(error.ExceptionMessage);
}
else if (error.error && error.error.message) {
this.addError(error.error.message);
}
else if (error.error && error.error.Message) {
this.addError(error.error.Message);
}
}
}
if (false) {
/**
* Reference to a message bus service.
* @type {?}
* @private
*/
ComponentBase.prototype.messageBus;
/**
* Array of message bus registration tokens that needs to be
* unregistered before destroying the component.
* @type {?}
* @private
*/
ComponentBase.prototype.messageTokens;
/**
* Reference to an alert service.
* @type {?}
* @private
*/
ComponentBase.prototype.alerts;
/**
* @type {?}
* @protected
*/
ComponentBase.prototype.injector;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWlyYWNsZWRldnMvcGFyYWRpZ20td2ViLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBT0EsT0FBTyxFQUFFLGlCQUFpQixFQUFxQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsTUFBTSxPQUFPLGFBQWE7Ozs7O0lBc0J0QixZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBRXhDLENBQUM7Ozs7O0lBS0QsUUFBUTtJQUVSLENBQUM7Ozs7O0lBS0QsV0FBVztRQUVQLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7Ozs7OztJQUtTLGFBQWE7UUFFbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQ3BCO1lBQ0ksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztTQUN4QztRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDOzs7Ozs7Ozs7SUFPUyxlQUFlLENBQUksSUFBYSxFQUFFLE9BQTBCOztjQUU1RCxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7OztJQUtTLGdCQUFnQjtRQUV0QixJQUFJLElBQUksQ0FBQyxhQUFh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O0lBcExHLG1DQUFzQzs7Ozs7OztJQU10QyxzQ0FBeUQ7Ozs7OztJQUt6RCwrQkFBNkI7Ozs7O0lBTWpCLGlDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogUGFyYWRpZ20gRnJhbWV3b3JrIC0gQW5ndWxhciBXcmFwcGVyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcgTWlyYWNsZSBEZXZzLCBJbmNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL01pcmFjbGVEZXZzL1BhcmFkaWdtLldlYi5Bbmd1bGFyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKi9cblxuaW1wb3J0IHsgT25EZXN0cm95LCBPbkluaXQsIEluamVjdG9yLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXNzYWdlQnVzU2VydmljZSwgUmVnaXN0cmF0aW9uVG9rZW4sIE1lc3NhZ2VIYW5kbGVyIH0gZnJvbSAnLi4vc2VydmljZXMvbWVzc2FnZS1idXMuc2VydmljZSc7XG5pbXBvcnQgeyBBcnJheUxpc3QgfSBmcm9tICdAbWlyYWNsZWRldnMvcGFyYWRpZ20tdWktd2ViLXNoYXJlZCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byBhIG1lc3NhZ2UgYnVzIHNlcnZpY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXNzYWdlQnVzOiBNZXNzYWdlQnVzU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIG1lc3NhZ2UgYnVzIHJlZ2lzdHJhdGlvbiB0b2tlbnMgdGhhdCBuZWVkcyB0byBiZVxuICAgICAqIHVucmVnaXN0ZXJlZCBiZWZvcmUgZGVzdHJveWluZyB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgbWVzc2FnZVRva2VuczogQXJyYXlMaXN0PFJlZ2lzdHJhdGlvblRva2VuPGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGFuIGFsZXJ0IHNlcnZpY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhbGVydHM6IEFsZXJ0U2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgQHNlZSBDb21wb25lbnRCYXNlXG4gICAgICogQHBhcmFtIGluamVjdG9yIHJlZmVyZW5jZSB0byBhbiBpbmplY3RvciBzZXJ2aWNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpXG4gICAge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQuXG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZFxuICAgIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLnVucmVnaXN0ZXJUb2tlbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIGJ1cy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0TWVzc2FnZUJ1cygpOiBNZXNzYWdlQnVzU2VydmljZVxuICAgIHtcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VCdXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJ1cyA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1lc3NhZ2VCdXNTZXJ2aWNlKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVRva2VucyA9IG5ldyBBcnJheUxpc3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VCdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgbWVzc2FnZSBoYW5kbGVyIGZvciBhIGdpdmVuIG1lc3NhZ2UgdHlwZS5cbiAgICAgKiBAcGFyYW0gdHlwZSB0aGUgbWVzc2FnZSB0eXBlLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIHRoZSBtZXNzYWdlIGhhbmRsZXIgdG8gcHJvY2VzcyB3aGVuIHNvbWUgcGFydCBvZiB0aGUgYXBwbGljYXRpb24gc2VuZHMgYSBtZXNzYWdlIG9mIHR5cGUgQHNlZSB0eXBlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlZ2lzdGVyTWVzc2FnZTxUPih0eXBlOiBUeXBlPFQ+LCBoYW5kbGVyOiBNZXNzYWdlSGFuZGxlcjxUPik6IHZvaWRcbiAgICB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRNZXNzYWdlQnVzKCkucmVnaXN0ZXIodHlwZSwgaGFuZGxlcik7XG4gICAgICAgIHRoaXMubWVzc2FnZVRva2Vucy5hZGQodG9rZW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVucmVnaXN0ZXJzIGFsbCB0aGUgdG9rZW5zIHJlZ2lzdGVyZWQgd2l0aGluIHRoaXMgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB1bnJlZ2lzdGVyVG9rZW5zKCk6IHZvaWRcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VUb2tlbnMgJiYgdGhpcy5tZXNzYWdlVG9rZW5zLmNvdW50KCkgPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VUb2tlbnMuZm9yRWFjaCh4ID0+IHgudW5yZWdpc3RlcigpKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVRva2Vucy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5yZWdpc3RlcnMgYSBwYXJ0aWN1bGFyIHRva2VuLlxuICAgICAqIElmIG5vIHVucmVnaXN0ZXIgdGFrZSBwbGFjZSwgdGhlIGNvbXBvbmVudCB3aWxsIHVucmVnaXN0ZXIgYWxsIHRoZSB0b2tlbnNcbiAgICAgKiBvbiBAc2VlIG5nT25EZXN0cm95XG4gICAgICogQHBhcmFtIHR5cGUgdGhlIHR5cGUgb2YgbWVzc2FnZSB0byB1bnJlZ2lzdGVyXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVucmVnaXN0ZXJUb2tlbjxUPih0eXBlOiBUeXBlPFQ+KTogdm9pZFxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZVRva2VucyAmJiB0aGlzLm1lc3NhZ2VUb2tlbnMuY291bnQoKSA+IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5tZXNzYWdlVG9rZW5zLmZpcnN0T3JEZWZhdWx0KHggPT4geC50eXBlID09PSB0eXBlKTtcblxuICAgICAgICAgICAgaWYgKHRva2VuKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRva2VuLnVucmVnaXN0ZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VUb2tlbnMucmVtb3ZlKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgbWVzc2FnZSB1c2luZyB0aGUgbWVzc2FnZSBidXMuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgaW5zdGFuY2UgdG8gc2VuZCB1c2luZyB0aGUgbWVzc2FnZSBidXMuXG4gICAgICogQHBhcmFtIHRva2VuIGlmIHNwZWNpZmllZCwgdGhlIGNvbXBvbmVudCBjYW4gdGFyZ2V0IG9uZSBzcGVjaWZpYyByZWdpc3RyYXRpb24gdG9rZW4gYW5kIGhhbmRsZXI7XG4gICAgICogaWYgbm90LCBhbGwgdGhlIGhhbmRsZXJzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgbWVzc2FnZSB0eXBlLCB3aWxsIHJlY2VpdmUgdGhlIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIHNlbmRNZXNzYWdlPFQ+KG1lc3NhZ2U6IFQsIHRva2VuPzogUmVnaXN0cmF0aW9uVG9rZW48VD4pOiBQcm9taXNlPHZvaWQ+XG4gICAge1xuICAgICAgICBhd2FpdCB0aGlzLmdldE1lc3NhZ2VCdXMoKS5zZW5kKG1lc3NhZ2UsIHRva2VuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhbGVydCBzZXJ2aWNlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRBbGVydHMoKTogQWxlcnRTZXJ2aWNlXG4gICAge1xuICAgICAgICBpZiAoIXRoaXMuYWxlcnRzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0cyA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFsZXJ0U2VydmljZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hbGVydHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIG1lc3NhZ2UgaW4gdGhlIGFsZXJ0IHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBhZGQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogdm9pZFxuICAgIHtcbiAgICAgICAgdGhpcy5nZXRBbGVydHMoKS5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSB3YXJuaW5nIGluIHRoZSBhbGVydCBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSB3YXJuaW5nIHdhcm5pbmcgdG8gYWRkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhZGRXYXJuaW5nKHdhcm5pbmc6IHN0cmluZyk6IHZvaWRcbiAgICB7XG4gICAgICAgIHRoaXMuZ2V0QWxlcnRzKCkuYWRkV2FybmluZyh3YXJuaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGVycm9yIGluIHRoZSBhbGVydCBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBlcnJvciBlcnJvciB0byBhZGQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZEVycm9yKGVycm9yOiBzdHJpbmcpOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLmdldEFsZXJ0cygpLmFkZEVycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGFuIGFwcGxpY2F0aW9uIGVycm9yLCByZXBvcnRpbmcgdGhlIGVycm9yIHRvIHRoZSBhbGVydCBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBlcnJvciB0aGUgZXJyb3IgdGhhdCBuZWVkcyB0byBiZSBoYW5kbGVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBoYW5kbGVFcnJvcihlcnJvcjogYW55KTogdm9pZFxuICAgIHtcbiAgICAgICAgaWYgKCFlcnJvcilcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyb3IuTWVzc2FnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5NZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJvci5leGNlcHRpb25NZXNzYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLmV4Y2VwdGlvbk1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVycm9yLkV4Y2VwdGlvbk1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IuRXhjZXB0aW9uTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IubWVzc2FnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5NZXNzYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLmVycm9yLk1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19