UNPKG

@addapptables/notifier

Version:
152 lines 15.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable, Injector, Inject } from '@angular/core'; import { NotifierPortalService } from './notifier-portal.service'; import { PortalInjector, ComponentPortal } from '@angular/cdk/portal'; import { NotifierComponent } from '../notifier.component'; import { DOCUMENT } from '@angular/common'; import { NotifierRef } from '../notifier-ref'; import { NotifierConfiguration } from '../models/notifier-configuration.model'; import { ADDAPPTABLE_CONFIGURATION_NOTIFIER_DATA, ADDAPPTABLE_NOTIFIER_DATA } from '../tokens'; import { NotifierPositionType } from '../models/notifier-position-enum.model'; import { BottomRightStrategy } from '../strategies/bottom-right.strategy'; import { TopRightStrategy } from '../strategies/top-right.strategy'; import { BottomLeftStrategy } from '../strategies/bottom-left.strategy'; import { TopLeftStrategy } from '../strategies/top-left.strategy'; import { NotifierType } from '../models/notifier-type.model'; export class NotifierService { /** * @param {?} _notifierPortalService * @param {?} _injector * @param {?} _document * @param {?} configuration */ constructor(_notifierPortalService, _injector, _document, configuration) { this._notifierPortalService = _notifierPortalService; this._injector = _injector; this._document = _document; this.defaultConfiguration = { position: NotifierPositionType.bottomRight, timeout: 5000, classIcon: 'material-icons', iconValue: 'notifications' }; this.defaultConfiguration = Object.assign(this.defaultConfiguration, configuration); } /** * @param {?} message * @param {?=} configuration * @return {?} */ openSuccess(message, configuration = (/** @type {?} */ ({}))) { return this.open({ message: message, type: NotifierType.success }, configuration); } /** * @param {?} message * @param {?=} configuration * @return {?} */ openError(message, configuration = (/** @type {?} */ ({}))) { return this.open({ message: message, type: NotifierType.danger }, configuration); } /** * @param {?} message * @param {?=} configuration * @return {?} */ openInfo(message, configuration = (/** @type {?} */ ({}))) { return this.open({ message: message, type: NotifierType.info }, configuration); } /** * @param {?} message * @param {?=} configuration * @return {?} */ openWarning(message, configuration = (/** @type {?} */ ({}))) { return this.open({ message: message, type: NotifierType.warning }, configuration); } /** * @param {?} data * @param {?=} configuration * @return {?} */ open(data, configuration = (/** @type {?} */ ({}))) { /** @type {?} */ const portal = this._notifierPortalService.create(); /** @type {?} */ const componentPortal = this._createComponentPortal(data); /** @type {?} */ const componentRef = portal.attach(componentPortal); /** @type {?} */ const notifierRef = new NotifierRef(componentRef.instance, portal, this._document, this._notifierPortalService.getLastUniqueId); /** @type {?} */ const mergeConfiguration = Object.assign(this.defaultConfiguration, configuration); this._factoryStrategy(mergeConfiguration).newNotifier(notifierRef); return notifierRef; } /** * @private * @param {?} configuration * @return {?} */ _factoryStrategy(configuration) { switch (configuration.position) { case NotifierPositionType.bottomRight: return this._injector.get(BottomRightStrategy); case NotifierPositionType.bottomLeft: return this._injector.get(BottomLeftStrategy); case NotifierPositionType.topLeft: return this._injector.get(TopLeftStrategy); case NotifierPositionType.topRight: return this._injector.get(TopRightStrategy); default: return this._injector.get(BottomRightStrategy); } } /** * @private * @param {?} data * @return {?} */ _createComponentPortal(data) { /** @type {?} */ const injectionTokens = new WeakMap([ [ADDAPPTABLE_NOTIFIER_DATA, data] ]); /** @type {?} */ const injector = new PortalInjector(this._injector, injectionTokens); return new ComponentPortal(NotifierComponent, null, injector); } } NotifierService.decorators = [ { type: Injectable } ]; /** @nocollapse */ NotifierService.ctorParameters = () => [ { type: NotifierPortalService }, { type: Injector }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: NotifierConfiguration, decorators: [{ type: Inject, args: [ADDAPPTABLE_CONFIGURATION_NOTIFIER_DATA,] }] } ]; if (false) { /** @type {?} */ NotifierService.prototype.defaultConfiguration; /** * @type {?} * @private */ NotifierService.prototype._notifierPortalService; /** * @type {?} * @private */ NotifierService.prototype._injector; /** * @type {?} * @private */ NotifierService.prototype._document; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhZGRhcHB0YWJsZXMvbm90aWZpZXIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvbm90aWZpZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDL0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUc3RCxNQUFNLE9BQU8sZUFBZTs7Ozs7OztJQVMxQixZQUNVLHNCQUE2QyxFQUM3QyxTQUFtQixFQUNELFNBQWMsRUFDUyxhQUFvQztRQUg3RSwy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QW9CLENBQUMsUUFBUTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDO2dCQUNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7Ozs7OztJQUVPLHNCQUFzQixDQUFDLElBQVM7O2NBQ2hDLGVBQWUsR0FBRyxJQUFJLE9BQU8sQ0FBVztZQUM1QyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQztTQUNsQyxDQUFDOztjQUNJLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQztRQUNwRSxPQUFPLElBQUksZUFBZSxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDOzs7WUFsRUYsVUFBVTs7OztZQWhCRixxQkFBcUI7WUFEVCxRQUFROzRDQThCeEIsTUFBTSxTQUFDLFFBQVE7WUF2QlgscUJBQXFCLHVCQXdCekIsTUFBTSxTQUFDLHVDQUF1Qzs7OztJQVhqRCwrQ0FLRTs7Ozs7SUFHQSxpREFBcUQ7Ozs7O0lBQ3JELG9DQUEyQjs7Ozs7SUFDM0Isb0NBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm90aWZpZXJQb3J0YWxTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci1wb3J0YWwuc2VydmljZSc7XG5pbXBvcnQgeyBQb3J0YWxJbmplY3RvciwgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBOb3RpZmllckNvbXBvbmVudCB9IGZyb20gJy4uL25vdGlmaWVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOb3RpZmllclJlZiB9IGZyb20gJy4uL25vdGlmaWVyLXJlZic7XG5pbXBvcnQgeyBOb3RpZmllciB9IGZyb20gJy4uL21vZGVscy9ub3RpZmllci5tb2RlbCc7XG5pbXBvcnQgeyBOb3RpZmllckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvbm90aWZpZXItY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBRERBUFBUQUJMRV9DT05GSUdVUkFUSU9OX05PVElGSUVSX0RBVEEsIEFEREFQUFRBQkxFX05PVElGSUVSX0RBVEEgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgTm90aWZpZXJQb3NpdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvbm90aWZpZXItcG9zaXRpb24tZW51bS5tb2RlbCc7XG5pbXBvcnQgeyBCb3R0b21SaWdodFN0cmF0ZWd5IH0gZnJvbSAnLi4vc3RyYXRlZ2llcy9ib3R0b20tcmlnaHQuc3RyYXRlZ3knO1xuaW1wb3J0IHsgU3RyYXRlZ3kgfSBmcm9tICcuLi9zdHJhdGVnaWVzL3N0cmF0ZWd5JztcbmltcG9ydCB7IFRvcFJpZ2h0U3RyYXRlZ3kgfSBmcm9tICcuLi9zdHJhdGVnaWVzL3RvcC1yaWdodC5zdHJhdGVneSc7XG5pbXBvcnQgeyBCb3R0b21MZWZ0U3RyYXRlZ3kgfSBmcm9tICcuLi9zdHJhdGVnaWVzL2JvdHRvbS1sZWZ0LnN0cmF0ZWd5JztcbmltcG9ydCB7IFRvcExlZnRTdHJhdGVneSB9IGZyb20gJy4uL3N0cmF0ZWdpZXMvdG9wLWxlZnQuc3RyYXRlZ3knO1xuaW1wb3J0IHsgTm90aWZpZXJUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL25vdGlmaWVyLXR5cGUubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTm90aWZpZXJTZXJ2aWNlIHtcblxuICBkZWZhdWx0Q29uZmlndXJhdGlvbjogTm90aWZpZXJDb25maWd1cmF0aW9uID0ge1xuICAgIHBvc2l0aW9uOiBOb3RpZmllclBvc2l0aW9uVHlwZS5ib3R0b21SaWdodCxcbiAgICB0aW1lb3V0OiA1MDAwLFxuICAgIGNsYXNzSWNvbjogJ21hdGVyaWFsLWljb25zJyxcbiAgICBpY29uVmFsdWU6ICdub3RpZmljYXRpb25zJ1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX25vdGlmaWVyUG9ydGFsU2VydmljZTogTm90aWZpZXJQb3J0YWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIEBJbmplY3QoQUREQVBQVEFCTEVfQ09ORklHVVJBVElPTl9OT1RJRklFUl9EQVRBKSBjb25maWd1cmF0aW9uOiBOb3RpZmllckNvbmZpZ3VyYXRpb25cbiAgKSB7XG4gICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbiwgY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBvcGVuU3VjY2VzcyhtZXNzYWdlOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IE5vdGlmaWVyQ29uZmlndXJhdGlvbiA9IDxOb3RpZmllckNvbmZpZ3VyYXRpb24+e30pOiBOb3RpZmllclJlZiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7IG1lc3NhZ2U6IG1lc3NhZ2UsIHR5cGU6IE5vdGlmaWVyVHlwZS5zdWNjZXNzIH0sIGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgb3BlbkVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29uZmlndXJhdGlvbjogTm90aWZpZXJDb25maWd1cmF0aW9uID0gPE5vdGlmaWVyQ29uZmlndXJhdGlvbj57fSk6IE5vdGlmaWVyUmVmIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuKHsgbWVzc2FnZTogbWVzc2FnZSwgdHlwZTogTm90aWZpZXJUeXBlLmRhbmdlciB9LCBjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIG9wZW5JbmZvKG1lc3NhZ2U6IHN0cmluZywgY29uZmlndXJhdGlvbjogTm90aWZpZXJDb25maWd1cmF0aW9uID0gPE5vdGlmaWVyQ29uZmlndXJhdGlvbj57fSk6IE5vdGlmaWVyUmVmIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuKHsgbWVzc2FnZTogbWVzc2FnZSwgdHlwZTogTm90aWZpZXJUeXBlLmluZm8gfSwgY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBvcGVuV2FybmluZyhtZXNzYWdlOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IE5vdGlmaWVyQ29uZmlndXJhdGlvbiA9IDxOb3RpZmllckNvbmZpZ3VyYXRpb24+e30pOiBOb3RpZmllclJlZiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7IG1lc3NhZ2U6IG1lc3NhZ2UsIHR5cGU6IE5vdGlmaWVyVHlwZS53YXJuaW5nIH0sIGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgb3BlbihkYXRhOiBOb3RpZmllciwgY29uZmlndXJhdGlvbjogTm90aWZpZXJDb25maWd1cmF0aW9uID0gPE5vdGlmaWVyQ29uZmlndXJhdGlvbj57fSk6IE5vdGlmaWVyUmVmIHtcbiAgICBjb25zdCBwb3J0YWwgPSB0aGlzLl9ub3RpZmllclBvcnRhbFNlcnZpY2UuY3JlYXRlKCk7XG4gICAgY29uc3QgY29tcG9uZW50UG9ydGFsID0gdGhpcy5fY3JlYXRlQ29tcG9uZW50UG9ydGFsKGRhdGEpO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHBvcnRhbC5hdHRhY2goY29tcG9uZW50UG9ydGFsKTtcbiAgICBjb25zdCBub3RpZmllclJlZiA9IG5ldyBOb3RpZmllclJlZihjb21wb25lbnRSZWYuaW5zdGFuY2UsIHBvcnRhbCwgdGhpcy5fZG9jdW1lbnQsIHRoaXMuX25vdGlmaWVyUG9ydGFsU2VydmljZS5nZXRMYXN0VW5pcXVlSWQpO1xuICAgIGNvbnN0IG1lcmdlQ29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbiwgY29uZmlndXJhdGlvbik7XG4gICAgdGhpcy5fZmFjdG9yeVN0cmF0ZWd5KG1lcmdlQ29uZmlndXJhdGlvbikubmV3Tm90aWZpZXIobm90aWZpZXJSZWYpO1xuICAgIHJldHVybiBub3RpZmllclJlZjtcbiAgfVxuXG4gIHByaXZhdGUgX2ZhY3RvcnlTdHJhdGVneShjb25maWd1cmF0aW9uOiBOb3RpZmllckNvbmZpZ3VyYXRpb24pOiBTdHJhdGVneSB7XG4gICAgc3dpdGNoIChjb25maWd1cmF0aW9uLnBvc2l0aW9uKSB7XG4gICAgICBjYXNlIE5vdGlmaWVyUG9zaXRpb25UeXBlLmJvdHRvbVJpZ2h0OlxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3IuZ2V0KEJvdHRvbVJpZ2h0U3RyYXRlZ3kpO1xuICAgICAgY2FzZSBOb3RpZmllclBvc2l0aW9uVHlwZS5ib3R0b21MZWZ0OlxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3IuZ2V0KEJvdHRvbUxlZnRTdHJhdGVneSk7XG4gICAgICBjYXNlIE5vdGlmaWVyUG9zaXRpb25UeXBlLnRvcExlZnQ6XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoVG9wTGVmdFN0cmF0ZWd5KTtcbiAgICAgIGNhc2UgTm90aWZpZXJQb3NpdGlvblR5cGUudG9wUmlnaHQ6XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoVG9wUmlnaHRTdHJhdGVneSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3IuZ2V0KEJvdHRvbVJpZ2h0U3RyYXRlZ3kpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUNvbXBvbmVudFBvcnRhbChkYXRhOiBhbnkpOiBDb21wb25lbnRQb3J0YWw8Tm90aWZpZXJDb21wb25lbnQ+IHtcbiAgICBjb25zdCBpbmplY3Rpb25Ub2tlbnMgPSBuZXcgV2Vha01hcDxhbnksIGFueT4oW1xuICAgICAgW0FEREFQUFRBQkxFX05PVElGSUVSX0RBVEEsIGRhdGFdXG4gICAgXSk7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBuZXcgUG9ydGFsSW5qZWN0b3IodGhpcy5faW5qZWN0b3IsIGluamVjdGlvblRva2Vucyk7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRQb3J0YWwoTm90aWZpZXJDb21wb25lbnQsIG51bGwsIGluamVjdG9yKTtcbiAgfVxufVxuIl19