UNPKG

@miracledevs/paradigm-web-angular

Version:

An angular wrapper with base functionality and helper services.

206 lines 17.1 kB
/** * @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