UNPKG

ng2-notifications

Version:

Angular 2 Component for Native System Notifications

187 lines 16.3 kB
"use strict"; 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); }; var core_1 = require('@angular/core'); var PushNotificationComponent = (function () { function PushNotificationComponent() { this.dir = 'auto'; this.lang = 'en-US'; this.renotify = false; this.sticky = false; this.noscreen = false; this.silent = true; this.closeDelay = 0; this.onLoad = new core_1.EventEmitter(); this.onShow = new core_1.EventEmitter(); this.onClose = new core_1.EventEmitter(); this.onError = new core_1.EventEmitter(); this.onClick = new core_1.EventEmitter(); } PushNotificationComponent.prototype.checkCompatibility = function () { return !!('Notification' in window); }; PushNotificationComponent.prototype.isPermissionGranted = function (permission) { return permission === 'granted'; }; PushNotificationComponent.prototype.requestPermission = function () { return Notification.requestPermission(); }; PushNotificationComponent.prototype.show = function () { var _this = this; if (!this.checkCompatibility()) { return console.log('Notification API not available in this browser.'); } return this.requestPermission() .then(function (permission) { return _this.isPermissionGranted(permission); }) .then(function () { return _this.create(); }); }; PushNotificationComponent.prototype.create = function () { var notification = new Notification(this.title, { dir: this.dir, lang: this.lang, data: this.data, tag: this.tag, body: this.body, icon: this.icon, silent: this.silent, sound: this.sound, renotify: this.renotify, sticky: this.sticky, vibrate: this.vibrate, noscreen: this.noscreen }); this.attachEventHandlers(notification); this.close(notification); return notification; }; PushNotificationComponent.prototype.close = function (notification) { if (this.closeDelay) { setTimeout(function () { notification.close(); }, this.closeDelay); } else { notification.close(); } }; PushNotificationComponent.prototype.closeAll = function () { Notification.close(); }; PushNotificationComponent.prototype.attachEventHandlers = function (notification) { var _this = this; notification.onshow = function () { _this.onShow.emit({ notification: notification }); }; notification.onclick = function (event) { _this.onClick.emit({ event: event, notification: notification }); }; notification.onerror = function () { _this.onError.emit({ notification: notification }); }; notification.onclose = function () { _this.onClose.emit({ notification: notification }); }; }; PushNotificationComponent.prototype.ngOnInit = function () { this.onLoad.emit({}); }; PushNotificationComponent.prototype.ngOnDestroy = function () { this.closeAll(); }; PushNotificationComponent.prototype.ngOnChanges = function () { }; __decorate([ core_1.Input(), __metadata('design:type', String) ], PushNotificationComponent.prototype, "title", void 0); __decorate([ core_1.Input(), __metadata('design:type', String) ], PushNotificationComponent.prototype, "body", void 0); __decorate([ core_1.Input(), __metadata('design:type', String) ], PushNotificationComponent.prototype, "icon", void 0); __decorate([ core_1.Input(), __metadata('design:type', String) ], PushNotificationComponent.prototype, "sound", void 0); __decorate([ core_1.Input(), __metadata('design:type', Object) ], PushNotificationComponent.prototype, "data", void 0); __decorate([ core_1.Input(), __metadata('design:type', String) ], PushNotificationComponent.prototype, "tag", void 0); __decorate([ core_1.Input(), __metadata('design:type', String) ], PushNotificationComponent.prototype, "dir", void 0); __decorate([ core_1.Input(), __metadata('design:type', String) ], PushNotificationComponent.prototype, "lang", void 0); __decorate([ core_1.Input(), __metadata('design:type', Boolean) ], PushNotificationComponent.prototype, "renotify", void 0); __decorate([ core_1.Input(), __metadata('design:type', Boolean) ], PushNotificationComponent.prototype, "sticky", void 0); __decorate([ core_1.Input(), __metadata('design:type', Array) ], PushNotificationComponent.prototype, "vibrate", void 0); __decorate([ core_1.Input(), __metadata('design:type', Boolean) ], PushNotificationComponent.prototype, "noscreen", void 0); __decorate([ core_1.Input(), __metadata('design:type', Boolean) ], PushNotificationComponent.prototype, "silent", void 0); __decorate([ core_1.Input(), __metadata('design:type', Number) ], PushNotificationComponent.prototype, "closeDelay", void 0); __decorate([ core_1.Output('load'), __metadata('design:type', core_1.EventEmitter) ], PushNotificationComponent.prototype, "onLoad", void 0); __decorate([ core_1.Output('show'), __metadata('design:type', core_1.EventEmitter) ], PushNotificationComponent.prototype, "onShow", void 0); __decorate([ core_1.Output('close'), __metadata('design:type', core_1.EventEmitter) ], PushNotificationComponent.prototype, "onClose", void 0); __decorate([ core_1.Output('error'), __metadata('design:type', core_1.EventEmitter) ], PushNotificationComponent.prototype, "onError", void 0); __decorate([ core_1.Output('action'), __metadata('design:type', core_1.EventEmitter) ], PushNotificationComponent.prototype, "onClick", void 0); PushNotificationComponent = __decorate([ core_1.Component({ selector: 'push-notification', styles: [':host { display: none; }'], template: '' }), __metadata('design:paramtypes', []) ], PushNotificationComponent); return PushNotificationComponent; }()); exports.PushNotificationComponent = PushNotificationComponent; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5vdGlmaWNhdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLHFCQVFPLGVBQWUsQ0FBQyxDQUFBO0FBVXZCO0lBQUE7UUFRa0IsUUFBRyxHQUFXLE1BQU0sQ0FBQztRQUNyQixTQUFJLEdBQVcsT0FBTyxDQUFDO1FBQ3ZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV4QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFdBQU0sR0FBWSxJQUFJLENBQUM7UUFDdkIsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUVoQixXQUFNLEdBQXNCLElBQUksbUJBQVksRUFBRSxDQUFDO1FBQy9DLFdBQU0sR0FBc0IsSUFBSSxtQkFBWSxFQUFFLENBQUM7UUFDOUMsWUFBTyxHQUFzQixJQUFJLG1CQUFZLEVBQUUsQ0FBQztRQUNoRCxZQUFPLEdBQXNCLElBQUksbUJBQVksRUFBRSxDQUFDO1FBQy9DLFlBQU8sR0FBc0IsSUFBSSxtQkFBWSxFQUFFLENBQUM7SUF5RjNFLENBQUM7SUF2RlEsc0RBQWtCLEdBQXpCO1FBQ0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sdURBQW1CLEdBQTFCLFVBQTRCLFVBQVU7UUFDcEMsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUVNLHFEQUFpQixHQUF4QjtRQUNFLE1BQU0sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU0sd0NBQUksR0FBWDtRQUFBLGlCQVFDO1FBUEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLE9BQU8s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SyxFQUFFOzs0REFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzsyREFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzsyREFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzs0REFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzsyREFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzswREFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzswREFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzsyREFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzsrREFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzs2REFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzs4REFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzsrREFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOzs2REFBQTtJQUNSO1FBQUMsWUFBSyxFQUFFOztpRUFBQTtJQUVSO1FBQUMsYUFBTSxDQUFDLE1BQU0sQ0FBQzs7NkRBQUE7SUFDZjtRQUFDLGFBQU0sQ0FBQyxNQUFNLENBQUM7OzZEQUFBO0lBQ2Y7UUFBQyxhQUFNLENBQUMsT0FBTyxDQUFDOzs4REFBQTtJQUNoQjtRQUFDLGFBQU0sQ0FBQyxPQUFPLENBQUM7OzhEQUFBO0lBQ2hCO1FBQUMsYUFBTSxDQUFDLFFBQVEsQ0FBQzs7OERBQUE7SUEzQm5CO1FBQUMsZ0JBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsTUFBTSxFQUFFLENBQUMsMEJBQTBCLENBQUM7WUFDcEMsUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDOztpQ0FBQTtJQWdIRixnQ0FBQztBQUFELENBQUMsQUE5R0QsSUE4R0M7QUE5R1ksaUNBQXlCLDRCQThHckMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBJbnB1dCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5kZWNsYXJlIHZhciBOb3RpZmljYXRpb247XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B1c2gtbm90aWZpY2F0aW9uJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogbm9uZTsgfSddLFxuICB0ZW1wbGF0ZTogJydcbn0pXG5cbmV4cG9ydCBjbGFzcyBQdXNoTm90aWZpY2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgcHVibGljIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBib2R5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBpY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBzb3VuZDogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgZGF0YTogYW55O1xuICBASW5wdXQoKSBwdWJsaWMgdGFnOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBkaXI6IHN0cmluZyA9ICdhdXRvJztcbiAgQElucHV0KCkgcHVibGljIGxhbmc6IHN0cmluZyA9ICdlbi1VUyc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZW5vdGlmeTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RpY2t5OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyB2aWJyYXRlOiBBcnJheTxudW1iZXI+O1xuICBASW5wdXQoKSBwdWJsaWMgbm9zY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNpbGVudDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjbG9zZURlbGF5OiBudW1iZXIgPSAwO1xuXG4gIEBPdXRwdXQoJ2xvYWQnKSBwdWJsaWMgb25Mb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgnc2hvdycpIHB1YmxpYyBvblNob3c6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCdjbG9zZScpIHB1YmxpYyBvbkNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgnZXJyb3InKSBwdWJsaWMgb25FcnJvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoJ2FjdGlvbicpIHB1YmxpYyBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgY2hlY2tDb21wYXRpYmlsaXR5ICgpIHtcbiAgICByZXR1cm4gISEoJ05vdGlmaWNhdGlvbicgaW4gd2luZG93KTtcbiAgfVxuXG4gIHB1YmxpYyBpc1Blcm1pc3Npb25HcmFudGVkIChwZXJtaXNzaW9uKSB7XG4gICAgcmV0dXJuIHBlcm1pc3Npb24gPT09ICdncmFudGVkJztcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0UGVybWlzc2lvbiAoKSB7XG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICB9XG5cbiAgcHVibGljIHNob3cgKCkge1xuICAgIGlmICghdGhpcy5jaGVja0NvbXBhdGliaWxpdHkoKSkge1xuICAgICAgICByZXR1cm4gY29uc29sZS5sb2coJ05vdGlmaWNhdGlvbiBBUEkgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGJyb3dzZXIuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFBlcm1pc3Npb24oKVxuICAgICAgLnRoZW4oKHBlcm1pc3Npb24pID0+IHRoaXMuaXNQZXJtaXNzaW9uR3JhbnRlZChwZXJtaXNzaW9uKSlcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuY3JlYXRlKCkpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZSAoKSB7XG4gICAgbGV0IG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24odGhpcy50aXRsZSwge1xuICAgICAgZGlyOiB0aGlzLmRpcixcbiAgICAgIGxhbmc6IHRoaXMubGFuZyxcbiAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgIHRhZzogdGhpcy50YWcsXG4gICAgICBib2R5OiB0aGlzLmJvZHksXG4gICAgICBpY29uOiB0aGlzLmljb24sXG4gICAgICBzaWxlbnQ6IHRoaXMuc2lsZW50LFxuICAgICAgc291bmQ6IHRoaXMuc291bmQsXG4gICAgICByZW5vdGlmeTogdGhpcy5yZW5vdGlmeSxcbiAgICAgIHN0aWNreTogdGhpcy5zdGlja3ksXG4gICAgICB2aWJyYXRlOiB0aGlzLnZpYnJhdGUsXG4gICAgICBub3NjcmVlbjogdGhpcy5ub3NjcmVlblxuICAgIH0pO1xuXG4gICAgdGhpcy5hdHRhY2hFdmVudEhhbmRsZXJzKG5vdGlmaWNhdGlvbik7XG4gICAgdGhpcy5jbG9zZShub3RpZmljYXRpb24pO1xuXG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSAobm90aWZpY2F0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VEZWxheSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5jbG9zZSgpO1xuICAgICAgfSwgdGhpcy5jbG9zZURlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZpY2F0aW9uLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb3NlQWxsICgpOiB2b2lkIHtcbiAgICBOb3RpZmljYXRpb24uY2xvc2UoKTtcbiAgfVxuXG4gIGF0dGFjaEV2ZW50SGFuZGxlcnMgKG5vdGlmaWNhdGlvbik6IHZvaWQge1xuICAgIG5vdGlmaWNhdGlvbi5vbnNob3cgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uU2hvdy5lbWl0KHsgbm90aWZpY2F0aW9uIH0pO1xuICAgIH07XG5cbiAgICBub3RpZmljYXRpb24ub25jbGljayA9IChldmVudCkgPT4ge1xuICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoeyBldmVudCwgbm90aWZpY2F0aW9uIH0pO1xuICAgIH07XG5cbiAgICBub3RpZmljYXRpb24ub25lcnJvciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25FcnJvci5lbWl0KHsgbm90aWZpY2F0aW9uIH0pO1xuICAgIH07XG5cbiAgICBub3RpZmljYXRpb24ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMub25DbG9zZS5lbWl0KHsgbm90aWZpY2F0aW9uIH0pO1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQgKCk6IHZvaWQge1xuICAgIHRoaXMub25Mb2FkLmVtaXQoe30pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95ICgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWxsKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxufVxuIl19