angular2-advanced-notifications
Version:
UI and native notifications library for Angular
869 lines (856 loc) • 35 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('rxjs/Subject'), require('lodash'), require('rxjs/Rx')) :
typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@angular/common', 'rxjs/Subject', 'lodash', 'rxjs/Rx'], factory) :
(factory((global.ng = global.ng || {}, global.ng['angular2-advanced-notifications'] = global.ng['angular2-advanced-notifications'] || {}),global.ng.core,global.ng.common,global.rxjs_Subject,global._,global.rxjs_Rx));
}(this, (function (exports,_angular_core,_angular_common,rxjs_Subject,_,rxjs_Rx) { 'use strict';
var BrowserViewports = (function () {
function BrowserViewports() {
}
/**
* @return {?}
*/
BrowserViewports.getBrowserViewports = function () {
return {
innerHeight: window.innerHeight,
innerWidth: window.innerWidth
};
};
/**
* @return {?}
*/
BrowserViewports.onBrowserViewportsUpdate = function () {
var _this = this;
return rxjs_Rx.Observable.fromEvent(window, 'resize')
.debounceTime(500)
.map(function () {
return _this.getBrowserViewports();
});
};
return BrowserViewports;
}());
var AnAlertTypes = {};
AnAlertTypes.INFO = 0;
AnAlertTypes.WARNING = 1;
AnAlertTypes.SUCCESS = 2;
AnAlertTypes.ERROR = 3;
AnAlertTypes.BLANK = 4;
AnAlertTypes[AnAlertTypes.INFO] = "INFO";
AnAlertTypes[AnAlertTypes.WARNING] = "WARNING";
AnAlertTypes[AnAlertTypes.SUCCESS] = "SUCCESS";
AnAlertTypes[AnAlertTypes.ERROR] = "ERROR";
AnAlertTypes[AnAlertTypes.BLANK] = "BLANK";
// TODO: also use this in alertItem
var anPositionToAnimationLink = {
topLeft: 'fadeInLeft',
topCenter: 'fadeInDown',
topRight: 'fadeInRight',
bottomLeft: 'fadeInLeft',
bottomCenter: 'fadeInUp',
bottomRight: 'fadeInRight'
};
var __decorate$1 = (undefined && undefined.__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;
};
exports.AnAlert = (function () {
/**
* @param {?} anBus
*/
function AnAlert(anBus) {
this.anBus = anBus;
this.containerStates = {
left: false,
center: false,
right: false
};
this.containerDirections = {
reverseLeft: false,
reverseCenter: false,
reverseRight: false
};
this.items = {
left: [],
center: [],
right: []
};
this.defaults = {
message: 'No message was set',
position: 'topRight',
pauseOnHover: false,
showProgressBar: false,
delay: 0,
timeout: 0,
type: AnAlertTypes.BLANK,
showNotification: false
};
this.globalAlertConfig = anBus.getGlobalConfigForAlerts();
this._updateBrowserViewports();
this._subscribeToBus();
}
/**
* @param {?} id
* @return {?}
*/
AnAlert.prototype.onClose = function (id) {
this._removeItem(id);
this.anBus.$$onClose.next(id);
};
/**
* @param {?} config
* @return {?}
*/
AnAlert.prototype._subscribeToBusShowHandler = function (config) {
this._updateItems(config);
};
/**
* @param {?} id
* @return {?}
*/
AnAlert.prototype._subscribeToBusHideHandler = function (id) {
this.onClose(id);
};
/**
* @return {?}
*/
AnAlert.prototype._subscribeToBusHideAllHandler = function () {
this._hideAllAlerts();
};
/**
* @param {?} alertsIds
* @return {?}
*/
AnAlert.prototype._subscribeToBusHideAlertsHandler = function (alertsIds) {
this._hideAlerts(alertsIds);
};
/**
* @return {?}
*/
AnAlert.prototype._subscribeToBus = function () {
var _this = this;
this.showAlertSubscription = this.anBus.showAlert$.subscribe(function (config) {
_this._subscribeToBusShowHandler(config);
});
this.hideAlertSubscription = this.anBus.hideAlert$.subscribe(function (id) {
_this._subscribeToBusHideHandler(id);
});
this.hideAllAlertsSubscription = this.anBus.hideAllAlerts$.subscribe(function () { return _this._subscribeToBusHideAllHandler(); });
this.hideAlertsSubscription = this.anBus.hideAlerts$.subscribe(function (alertsIds) { return _this._subscribeToBusHideAlertsHandler(alertsIds); });
};
/**
* @param {?} config
* @return {?}
*/
AnAlert.prototype._updateItems = function (config) {
var /** @type {?} */ newConfig = _.merge({}, this.defaults, config, { $$updateListener: new rxjs_Subject.Subject() }, { $$animationState: this._getAnimationState(config.position) });
console.warn(newConfig);
this._addItem(newConfig);
this._updateContainerState();
};
/**
* @param {?} alertsIds
* @return {?}
*/
AnAlert.prototype._hideAlerts = function (alertsIds) {
if (!Array.isArray(alertsIds)) {
return;
}
if (!alertsIds.length) {
return;
}
this.items.left = _.reject(this.items.left, function (item) {
return !!~alertsIds.indexOf(item.id);
});
this.items.center = _.reject(this.items.center, function (item) {
return !!~alertsIds.indexOf(item.id);
});
this.items.right = _.reject(this.items.right, function (item) {
return !!~alertsIds.indexOf(item.id);
});
};
/**
* @return {?}
*/
AnAlert.prototype._hideAllAlerts = function () {
var _this = this;
_.forEach(this.items.left, function (item) {
_this.anBus.$$onClose.next(item.id);
});
_.forEach(this.items.center, function (item) {
_this.anBus.$$onClose.next(item.id);
});
_.forEach(this.items.right, function (item) {
_this.anBus.$$onClose.next(item.id);
});
this.items.left = [];
this.items.center = [];
this.items.right = [];
};
/**
* @return {?}
*/
AnAlert.prototype._notifyUpdateListeners = function () {
_.forEach(this.items.left, function (item) {
item.$$updateListener.next();
});
_.forEach(this.items.center, function (item) {
item.$$updateListener.next();
});
_.forEach(this.items.right, function (item) {
item.$$updateListener.next();
});
};
/**
* @return {?}
*/
AnAlert.prototype._updateBrowserViewports = function () {
var _this = this;
if (this.globalAlertConfig.removeLastIfViewportOverflow) {
this.browserViewports = BrowserViewports.getBrowserViewports();
BrowserViewports.onBrowserViewportsUpdate().subscribe(function (newBrowserViewports) {
_this.browserViewports = newBrowserViewports;
});
}
};
/**
* @return {?}
*/
AnAlert.prototype._updateContainerState = function () {
this.containerStates.left = !!~this.items.left.length;
this.containerStates.center = !!~this.items.center.length;
this.containerStates.right = !!~this.items.right.length;
this._setContainerDirections();
};
/**
* @param {?} item
* @return {?}
*/
AnAlert.prototype._getShortVerticalPositionIdentifier = function (item) {
if (!!~item.position.indexOf('Left')) {
return 'left';
}
if (!!~item.position.indexOf('Center')) {
return 'center';
}
if (!!~item.position.indexOf('Right')) {
return 'right';
}
return undefined;
};
/**
* @param {?} item
* @return {?}
*/
AnAlert.prototype._addItem = function (item) {
var /** @type {?} */ pos = this._getShortVerticalPositionIdentifier(item);
this.items[pos].push(item);
};
/**
* @param {?} id
* @return {?}
*/
AnAlert.prototype._removeItem = function (id) {
var /** @type {?} */ item = this._findItemById(id);
var /** @type {?} */ pos = this._getShortVerticalPositionIdentifier(item);
this.items[pos] = _.reject(this.items[pos], { id: item.id });
};
/**
* @param {?} id
* @return {?}
*/
AnAlert.prototype._findItemById = function (id) {
var /** @type {?} */ foundItem;
foundItem = _.find(this.items.left, { id: id });
if (foundItem) {
return foundItem;
}
foundItem = _.find(this.items.center, { id: id });
if (foundItem) {
return foundItem;
}
foundItem = _.find(this.items.right, { id: id });
if (foundItem) {
return foundItem;
}
return undefined;
};
/**
* @return {?}
*/
AnAlert.prototype._setContainerDirections = function () {
this.containerDirections.reverseLeft = !!~_.filter(this.items.left, function (item) { return !!~item.position.indexOf('bottom'); }).length;
this.containerDirections.reverseCenter = !!~_.filter(this.items.center, function (item) { return !!~item.position.indexOf('bottom'); }).length;
this.containerDirections.reverseLeft = !!~_.filter(this.items.right, function (item) { return !!~item.position.indexOf('bottom'); }).length;
};
/**
* @param {?} position
* @return {?}
*/
AnAlert.prototype._getAnimationState = function (position) {
if (!_.isString(position)) {
return undefined;
}
return anPositionToAnimationLink[position];
};
return AnAlert;
}());
exports.AnAlert = __decorate$1([
_angular_core.Component({
selector: 'an-alert',
template: "\n <div class=\"anAlert__container anAlert__container--left\"\n *ngIf=\"containerStates.left\"\n [ngClass]=\"{'anAlert__container--reverse': containerDirections.reverseLeft }\">\n <an-alert-item *ngFor=\"let item of items.left\"\n [@ASD]=\"item.$$animationState\"\n [options]=\"item\"\n (onClose)=\"onClose($event)\"\n (onAlertItemUpdates)=\"onAlertItemUpdates($event)\">\n </an-alert-item>\n </div>\n\n <div class=\"anAlert__container anAlert__container--center\"\n *ngIf=\"containerStates.center\"\n [ngClass]=\"{'anAlert__container--reverse': containerDirections.reverseCenter }\">\n <an-alert-item *ngFor=\"let item of items.center\"\n [@ASD]=\"item.$$animationState\"\n [options]=\"item\"\n (onClose)=\"onClose($event)\"\n (onAlertItemUpdates)=\"onAlertItemUpdates($event)\">\n </an-alert-item>\n </div>\n\n <div class=\"anAlert__container anAlert__container--right\"\n *ngIf=\"containerStates.right\"\n [ngClass]=\"{'anAlert__container--reverse': containerDirections.reverseRight }\">\n <an-alert-item *ngFor=\"let item of items.right\"\n [@ASD]=\"item.$$animationState\"\n [options]=\"item\"\n (onClose)=\"onClose($event)\"\n (onAlertItemUpdates)=\"onAlertItemUpdates($event)\">\n </an-alert-item>\n </div>\n ",
encapsulation: _angular_core.ViewEncapsulation.None,
animations: [
_angular_core.trigger('ASD', [
_angular_core.state('fadeInUp', _angular_core.style({ transform: 'translateY(0)' })),
_angular_core.state('fadeInRight', _angular_core.style({ transform: 'translateX(0)' })),
_angular_core.state('fadeInDown', _angular_core.style({ transform: 'translateY(0)' })),
_angular_core.state('fadeInLeft', _angular_core.style({ transform: 'translateX(0)' })),
// Enter transitions
_angular_core.transition('void => fadeInUp', [
_angular_core.style({ transform: 'translateY(100%)' }),
_angular_core.animate('100ms cubic-bezier(0.0, 0.0, 0.2, 1)')
]),
_angular_core.transition('void => fadeInRight', [
_angular_core.style({ transform: 'translateX(100%)' }),
_angular_core.animate('100ms cubic-bezier(0.0, 0.0, 0.2, 1)')
]),
_angular_core.transition('void => fadeInDown', [
_angular_core.style({ transform: 'translateY(-100%0)' }),
_angular_core.animate('100ms cubic-bezier(0.0, 0.0, 0.2, 1)')
]),
_angular_core.transition('void => fadeInLeft', [
_angular_core.style({ transform: 'translateX(-100%)' }),
_angular_core.animate('100ms cubic-bezier(0.0, 0.0, 0.2, 1)')
]),
// Leave transitions
_angular_core.transition('fadeInUp => void', [
_angular_core.animate('200ms cubic-bezier(0.4, 0.0, 1, 1)', _angular_core.style({ transform: 'translateY(-100%)' }))
]),
_angular_core.transition('fadeInRight => void', [
_angular_core.animate('200ms cubic-bezier(0.4, 0.0, 1, 1)', _angular_core.style({ transform: 'translateX(100%)' }))
]),
_angular_core.transition('fadeInDown => void', [
_angular_core.animate('200ms cubic-bezier(0.4, 0.0, 1, 1)', _angular_core.style({ transform: 'translateY(-100%)' }))
]),
_angular_core.transition('fadeInLeft => void', [
_angular_core.animate('200ms cubic-bezier(0.4, 0.0, 1, 1)', _angular_core.style({ transform: 'translateX(-100%)' }))
])
])
]
})
], exports.AnAlert);
var AN_DYNAMIC_COMPONENT_MODULE = new _angular_core.OpaqueToken('AN_DYNAMIC_COMPONENT_MODULE');
/**
* @param {?} metadata
* @return {?}
*/
function provideAnDynamicComponentModule(metadata) {
return [{ provide: AN_DYNAMIC_COMPONENT_MODULE, useValue: metadata }];
}
var __decorate$2 = (undefined && undefined.__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 __param = (undefined && undefined.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var anAlertItem = (function () {
/**
* @param {?} _dynamicModuleMeta
* @param {?} _viewContainer
* @param {?} compiler
* @param {?} anBusService
* @param {?} changeDetectorRef
*/
function anAlertItem(_dynamicModuleMeta, _viewContainer, compiler, anBusService, changeDetectorRef) {
this._dynamicModuleMeta = _dynamicModuleMeta;
this._viewContainer = _viewContainer;
this.compiler = compiler;
this.anBusService = anBusService;
this.changeDetectorRef = changeDetectorRef;
this.hasDynamicTemplate = false;
this.customContainerClasses = undefined;
this.onClose = new _angular_core.EventEmitter();
this.onAlertItemUpdates = new _angular_core.EventEmitter();
this.customContainerClasses = anBusService.getGlobalConfigForAlerts().customContainerClasses;
}
Object.defineProperty(anAlertItem.prototype, "options", {
/**
* @return {?}
*/
get: function () {
return this._options;
},
/**
* @param {?} value
* @return {?}
*/
set: function (value) {
this._options = value;
console.warn(this._options);
this._subscribeToUpdateListener();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
anAlertItem.prototype.ngAfterViewInit = function () {
this._setDelay(this._options.delay);
};
/**
* @return {?}
*/
anAlertItem.prototype.clickToClose = function () {
if (this._options.clickToClose) {
this.close();
}
};
/**
* @return {?}
*/
anAlertItem.prototype.close = function () {
this.onClose.emit(this._options.id);
};
/**
* @return {?}
*/
anAlertItem.prototype._subscribeToUpdateListener = function () {
var _this = this;
this._options.$$updateListener.subscribe(function () {
_this._setStyles();
});
};
/**
* @param {?} delay
* @return {?}
*/
anAlertItem.prototype._setDelay = function (delay) {
var _this = this;
if (delay === 0) {
this._show();
return;
}
this._showDelayTimer = setTimeout(function () {
_this._show();
}, delay);
};
/**
* @param {?} time
* @return {?}
*/
anAlertItem.prototype._setHideTimeout = function (time) {
var _this = this;
if (time === 0) {
return;
}
this._closeTimeoutTimer = setTimeout(function () {
_this._hide();
}, time);
};
/**
* @return {?}
*/
anAlertItem.prototype._show = function () {
this._setType();
this._setStyles();
this._setHideTimeout(this._options.timeout);
this._showNativeNotification();
};
/**
* @return {?}
*/
anAlertItem.prototype._showNativeNotification = function () {
if (!this._options.showNotification) {
return;
}
this.anBusService.showNotification(this._options, this._options.showNotificationIfDocumentVisible);
};
/**
* @return {?}
*/
anAlertItem.prototype._hide = function () {
this.close();
};
/**
* @return {?}
*/
anAlertItem.prototype._setType = function () {
// todo: move map to file
// and use as object not as a Map
var /** @type {?} */ cssClassMapping = new Map();
cssClassMapping.set(AnAlertTypes.INFO, 'type-info');
cssClassMapping.set(AnAlertTypes.WARNING, 'type-warning');
cssClassMapping.set(AnAlertTypes.SUCCESS, 'type-success');
cssClassMapping.set(AnAlertTypes.ERROR, 'type-error');
cssClassMapping.set(AnAlertTypes.BLANK, 'type-blank');
this._containerElement.nativeElement.classList.add('anAlertItem__item--' + cssClassMapping.get(this._options.type));
};
/**
* @return {?}
*/
anAlertItem.prototype._setStyles = function () {
switch (this._options.position) {
case 'topLeft':
// this._containerElement.nativeElement.classList.add('anAlertItem__item--fadeInLeftAnimation');
break;
case 'topCenter':
// this._containerElement.nativeElement.classList.add('anAlertItem__item--fadeInDownAnimation', 'anTranslateXCenter');
this._containerElement.nativeElement.classList.add('anTranslateXCenter');
break;
case 'topRight':
// this._containerElement.nativeElement.classList.add('anAlertItem__item--fadeInRightAnimation');
break;
case 'bottomLeft':
// this._containerElement.nativeElement.classList.add('anAlertItem__item--fadeInLeftAnimation');
break;
case 'bottomCenter':
// this._containerElement.nativeElement.classList.add('anAlertItem__item--fadeInUpAnimation', 'anTranslateXCenter');
this._containerElement.nativeElement.classList.add('anTranslateXCenter');
break;
case 'bottomRight':
// this._containerElement.nativeElement.classList.add('anAlertItem__item--fadeInRightAnimation');
break;
}
this._containerElement.nativeElement.classList.remove('anHidden');
};
/**
* @return {?}
*/
anAlertItem.prototype._createDynamicComponent = function () {
var /** @type {?} */ componentMetadataParams = {
selector: 'an-alert-item-custom-template'
};
if (typeof this._options.templateUrl === 'string') {
componentMetadataParams.templateUrl = this._options.templateUrl;
}
if (typeof this._options.template === 'string') {
componentMetadataParams.template = this._options.template;
}
var /** @type {?} */ componentMetadata = new _angular_core.Component(componentMetadataParams);
var /** @type {?} */ cmpClass = (function () {
function _$$1() {
}
return _$$1;
}());
return _angular_core.Component(componentMetadata)(cmpClass);
};
/**
* @param {?} componentType
* @return {?}
*/
anAlertItem.prototype._createDynamicModule = function (componentType) {
var /** @type {?} */ declarations = this._dynamicModuleMeta.declarations || [];
declarations.push(componentType);
var /** @type {?} */ moduleMeta = {
imports: this._dynamicModuleMeta.imports,
providers: this._dynamicModuleMeta.providers,
schemas: this._dynamicModuleMeta.schemas,
declarations: declarations
};
return _angular_core.NgModule(moduleMeta)((function () {
function _$$1() {
}
return _$$1;
}()));
};
/**
* @return {?}
*/
anAlertItem.prototype._insertDynamicComponent = function () {
var _this = this;
this._dynamicComponentType = this._createDynamicComponent();
this._dynamicModuleType = this._createDynamicModule(this._dynamicComponentType);
var /** @type {?} */ injector = _angular_core.ReflectiveInjector.fromResolvedProviders([], this._viewContainer.parentInjector);
this.compiler.compileModuleAndAllComponentsAsync(this._dynamicModuleType)
.then(function (factory) {
var /** @type {?} */ dynamicComponentFactory;
var /** @type {?} */ i;
for (i = factory.componentFactories.length - 1; i >= 0; i--) {
if (factory.componentFactories[i].componentType === _this._dynamicComponentType) {
dynamicComponentFactory = factory.componentFactories[i];
break;
}
}
return dynamicComponentFactory;
})
.then(function (dynamicComponentFactory) {
if (dynamicComponentFactory) {
_this._templateContainerRef.clear();
_this._dynamicComponent = _this._templateContainerRef.createComponent(dynamicComponentFactory, 0, injector);
_.merge(_this._dynamicComponent.instance, _this);
_this._dynamicComponent.changeDetectorRef.detectChanges();
}
});
};
/**
* @return {?}
*/
anAlertItem.prototype.ngOnChanges = function () {
if (typeof this._options.template === 'string' ||
typeof this._options.templateUrl === 'string') {
this.hasDynamicTemplate = true;
this._insertDynamicComponent();
}
};
/**
* @return {?}
*/
anAlertItem.prototype.ngOnDestroy = function () {
// todo: unsub here
// this._options.$$updateListener.unsubscribe();
if (this._closeTimeoutTimer) {
clearTimeout(this._closeTimeoutTimer);
}
if (this._dynamicComponent) {
this._dynamicComponent.destroy();
}
if (this.compiler) {
if (this._dynamicComponentType) {
this.compiler.clearCacheFor(this._dynamicComponentType);
}
if (this._dynamicModuleType) {
this.compiler.clearCacheFor(this._dynamicModuleType);
}
}
};
return anAlertItem;
}());
__decorate$2([
_angular_core.Input()
], anAlertItem.prototype, "options", null);
__decorate$2([
_angular_core.Output()
], anAlertItem.prototype, "onClose", void 0);
__decorate$2([
_angular_core.Output()
], anAlertItem.prototype, "onAlertItemUpdates", void 0);
__decorate$2([
_angular_core.ViewChild('container')
], anAlertItem.prototype, "_containerElement", void 0);
__decorate$2([
_angular_core.ViewChild('templateContainer', { read: _angular_core.ViewContainerRef })
], anAlertItem.prototype, "_templateContainerRef", void 0);
anAlertItem = __decorate$2([
_angular_core.Component({
selector: 'an-alert-item',
template: "\n <div #container class=\"anAlertItem__item anHidden\" (click)=\"clickToClose()\">\n\n <div *ngIf=\"!hasDynamicTemplate\" [ngClass]=\"customContainerClasses\">\n <div class=\"anAlertItem__contentContainer\">\n <div class=\"anAlertItem__content\">\n <div class=\"anAlertItemContent__title\">\n {{_options.title}}\n </div>\n <div class=\"anAlertItemContent__message\">\n {{_options.message}}\n </div>\n </div>\n <div class=\"anAlertItem__closeAction\">\n <span class=\"anAlertItem__closeActionIcon\" (click)=\"close()\"></span>\n </div>\n\n </div>\n </div>\n\n <template *ngIf=\"hasDynamicTemplate\" #templateContainer></template>\n\n </div>\n ",
changeDetection: _angular_core.ChangeDetectionStrategy.OnPush
}),
__param(0, _angular_core.Inject(AN_DYNAMIC_COMPONENT_MODULE))
], anAlertItem);
var defaultGlobaAlertConfig = {
removeLastIfViewportOverflow: false,
customContainerClasses: 'anAlertItem__item--theme-material'
};
var AnUtils = (function () {
function AnUtils() {
}
/**
* @return {?}
*/
AnUtils.generateGuid = function () {
var /** @type {?} */ r;
var /** @type {?} */ v;
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
r = Math.random() * 16 | 0;
v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
return AnUtils;
}());
var __decorate$3 = (undefined && undefined.__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;
};
exports.AnBusService = (function () {
function AnBusService() {
this.globalAlertConfig = defaultGlobaAlertConfig;
this.showAlertSource = new rxjs_Subject.Subject();
this.hideAlertSource = new rxjs_Subject.Subject();
this.hideAlertsSource = new rxjs_Subject.Subject();
this.hideAllAlertsSource = new rxjs_Subject.Subject();
this.showNotificationSource = new rxjs_Subject.Subject();
this.notificationApiPermissions = {
GRANTED: 'granted',
DENIED: 'denied',
DEFAULT: 'default'
};
this.documentVisibilityStates = {
VISIBLE: 'visible',
HIDDEN: 'hidden'
};
this.$$onClose = new rxjs_Subject.Subject();
this.showAlert$ = this.showAlertSource;
this.hideAlert$ = this.hideAlertSource;
this.hideAlerts$ = this.hideAlertsSource;
this.hideAllAlerts$ = this.hideAllAlertsSource;
this.onClose$ = this.$$onClose;
this.alertTypes = AnAlertTypes;
}
/**
* @param {?} config
* @return {?}
*/
AnBusService.prototype.setGlobalConfigForAlerts = function (config) {
if (!_.isObject(config)) {
// todo: add log
return;
}
this.globalAlertConfig = _.merge(defaultGlobaAlertConfig, config);
};
/**
* @return {?}
*/
AnBusService.prototype.getGlobalConfigForAlerts = function () {
return this.globalAlertConfig;
};
/**
* @param {?} config
* @return {?}
*/
AnBusService.prototype.showAlert = function (config) {
var _this = this;
var /** @type {?} */ newConfig = _.merge(config, { id: AnUtils.generateGuid() });
this.showAlertSource.next(newConfig);
return {
id: newConfig.id,
hide: function () { _this._hideAlert(newConfig.id); }
};
};
/**
* @param {?=} alertsIds
* @return {?}
*/
AnBusService.prototype.hideAlerts = function (alertsIds) {
this.hideAlertsSource.next(alertsIds);
};
/**
* @return {?}
*/
AnBusService.prototype.hideAllAlerts = function () {
this.hideAllAlertsSource.next(null);
};
/**
* @return {?}
*/
AnBusService.prototype.requestNotificationPermission = function () {
var _this = this;
if (!_.isFunction(((window)).Notification)) {
return new Promise(function (resolve) {
resolve(false);
});
}
if (((window)).Notification.permission === this.notificationApiPermissions.GRANTED) {
return new Promise(function (resolve) {
resolve(true);
});
}
if (((window)).Notification.permission === this.notificationApiPermissions.DEFAULT) {
return new Promise(function (resolve) {
((window)).Notification.requestPermission(function (permission) {
resolve(permission === _this.notificationApiPermissions.GRANTED);
});
});
}
if (((window)).Notification.permission === this.notificationApiPermissions.DENIED) {
return new Promise(function (resolve) {
resolve(false);
});
}
return new Promise(function (resolve) {
resolve(false);
});
};
/**
* @param {?} options
* @param {?=} showIfDocumentVisible
* @return {?}
*/
AnBusService.prototype.showNotification = function (options, showIfDocumentVisible) {
var _this = this;
return new Promise(function (resolve) {
_this.requestNotificationPermission().then(function (result) {
if (!result) {
return;
}
resolve(_this._createNativeNotification(options, showIfDocumentVisible));
});
});
};
/**
* @param {?} options
* @param {?=} showIfDocumentVisible
* @return {?}
*/
AnBusService.prototype._createNativeNotification = function (options, showIfDocumentVisible) {
if (!_.isObject(options)) {
return undefined;
}
if (showIfDocumentVisible && document.visibilityState !== this.documentVisibilityStates.VISIBLE) {
return undefined;
}
if (!showIfDocumentVisible && document.visibilityState === this.documentVisibilityStates.VISIBLE) {
return undefined;
}
var /** @type {?} */ notificationInstance = new ((window)).Notification(options.title, options);
notificationInstance.onclick = options.onclick;
notificationInstance.onerror = options.onerror;
return notificationInstance;
};
/**
* @param {?} id
* @return {?}
*/
AnBusService.prototype._hideAlert = function (id) {
this.hideAlertSource.next(id);
};
return AnBusService;
}());
exports.AnBusService = __decorate$3([
_angular_core.Injectable()
], exports.AnBusService);
var __decorate = (undefined && undefined.__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;
};
exports.AnModule = AnModule_1 = (function () {
function AnModule() {
}
/**
* @return {?}
*/
AnModule.forRoot = function () {
return {
ngModule: AnModule_1,
providers: [exports.AnBusService, provideAnDynamicComponentModule({})]
};
};
return AnModule;
}());
exports.AnModule = AnModule_1 = __decorate([
_angular_core.NgModule({
imports: [
_angular_common.CommonModule
],
declarations: [
exports.AnAlert,
anAlertItem
],
exports: [
exports.AnAlert
]
})
], exports.AnModule);
var AnModule_1;
Object.defineProperty(exports, '__esModule', { value: true });
})));