@hsaadawy/ngx-chat
Version:
74 lines • 9.48 kB
JavaScript
import { __awaiter } from "tslib";
import { Inject, Injectable } from '@angular/core';
import { MultiUserChatPlugin } from './adapters/xmpp/plugins/multi-user-chat.plugin';
import { CHAT_SERVICE_TOKEN } from './chat-service';
export class ChatBackgroundNotificationService {
constructor(chatService) {
this.chatService = chatService;
this.enabled = false;
chatService.message$.subscribe((msg) => {
this.receivedDirectMessage(msg);
});
chatService.getPlugin(MultiUserChatPlugin).message$.subscribe((room) => __awaiter(this, void 0, void 0, function* () {
yield this.receivedGroupMessage(room);
}));
}
enable() {
if (this.supportsNotification()) {
this.requestNotificationPermission();
this.enabled = true;
}
}
disable() {
this.enabled = false;
}
requestNotificationPermission() {
const notification = Notification;
notification.requestPermission();
}
receivedDirectMessage(contact) {
if (this.shouldDisplayNotification()) {
const notification = new Notification(contact.name, { body: contact.mostRecentMessage.body, icon: contact.avatar });
notification.addEventListener('click', () => {
window.focus();
notification.close();
});
}
}
receivedGroupMessage(room) {
return __awaiter(this, void 0, void 0, function* () {
if (this.shouldDisplayNotification()) {
const message = room.mostRecentMessage.body;
const sender = room.mostRecentMessage.from;
const options = yield this.customizeGroupMessage(sender, message);
const notification = new Notification(room.name, options);
notification.addEventListener('click', () => {
window.focus();
notification.close();
});
}
});
}
customizeGroupMessage(sender, message) {
return __awaiter(this, void 0, void 0, function* () {
return { body: `${sender}: ${message}` };
});
}
shouldDisplayNotification() {
const notification = Notification;
return this.enabled
&& document.visibilityState === 'hidden'
&& this.supportsNotification()
&& notification.permission === 'granted';
}
supportsNotification() {
return 'Notification' in window;
}
}
ChatBackgroundNotificationService.decorators = [
{ type: Injectable }
];
ChatBackgroundNotificationService.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [CHAT_SERVICE_TOKEN,] }] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1iYWNrZ3JvdW5kLW5vdGlmaWNhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF6em5ldHdvcmsvbmd4LWNoYXQvc3JjL2xpYi9zZXJ2aWNlcy9jaGF0LWJhY2tncm91bmQtbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBUSxNQUFNLGdEQUFnRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxrQkFBa0IsRUFBZSxNQUFNLGdCQUFnQixDQUFDO0FBR2pFLE1BQU0sT0FBTyxpQ0FBaUM7SUFJMUMsWUFBa0QsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFGbEUsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUdwQixXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQU0sSUFBSSxFQUFDLEVBQUU7WUFDdkUsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUN2QjtJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVPLDZCQUE2QjtRQUNqQyxNQUFNLFlBQVksR0FBRyxZQUFtQixDQUFDO1FBQ3pDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUFnQjtRQUMxQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbEgsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ3hDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFYSxvQkFBb0IsQ0FBQyxJQUFVOztZQUN6QyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzFELFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUN4QyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2YsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN6QixDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQztLQUFBO0lBRWUscUJBQXFCLENBQUMsTUFBVyxFQUFFLE9BQWU7O1lBQzlELE9BQU8sRUFBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssT0FBTyxFQUFFLEVBQUMsQ0FBQztRQUMzQyxDQUFDO0tBQUE7SUFFTyx5QkFBeUI7UUFDN0IsTUFBTSxZQUFZLEdBQUcsWUFBbUIsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQyxPQUFPO2VBQ1osUUFBUSxDQUFDLGVBQWUsS0FBSyxRQUFRO2VBQ3JDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtlQUMzQixZQUFZLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLE9BQU8sY0FBYyxJQUFJLE1BQU0sQ0FBQztJQUNwQyxDQUFDOzs7WUFuRUosVUFBVTs7OzRDQUtNLE1BQU0sU0FBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSklEIH0gZnJvbSAnQHhtcHAvamlkJztcclxuaW1wb3J0IHsgQ29udGFjdCB9IGZyb20gJy4uL2NvcmUvY29udGFjdCc7XHJcbmltcG9ydCB7IE11bHRpVXNlckNoYXRQbHVnaW4sIFJvb20gfSBmcm9tICcuL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9tdWx0aS11c2VyLWNoYXQucGx1Z2luJztcclxuaW1wb3J0IHsgQ0hBVF9TRVJWSUNFX1RPS0VOLCBDaGF0U2VydmljZSB9IGZyb20gJy4vY2hhdC1zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENoYXRCYWNrZ3JvdW5kTm90aWZpY2F0aW9uU2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBlbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChDSEFUX1NFUlZJQ0VfVE9LRU4pIHByb3RlY3RlZCBjaGF0U2VydmljZTogQ2hhdFNlcnZpY2UpIHtcclxuICAgICAgICBjaGF0U2VydmljZS5tZXNzYWdlJC5zdWJzY3JpYmUoKG1zZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlY2VpdmVkRGlyZWN0TWVzc2FnZShtc2cpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNoYXRTZXJ2aWNlLmdldFBsdWdpbihNdWx0aVVzZXJDaGF0UGx1Z2luKS5tZXNzYWdlJC5zdWJzY3JpYmUoYXN5bmMgcm9vbSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjZWl2ZWRHcm91cE1lc3NhZ2Uocm9vbSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRzTm90aWZpY2F0aW9uKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCkge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb24oKSB7XHJcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uIGFzIGFueTtcclxuICAgICAgICBub3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlY2VpdmVkRGlyZWN0TWVzc2FnZShjb250YWN0OiBDb250YWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkRGlzcGxheU5vdGlmaWNhdGlvbigpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24oY29udGFjdC5uYW1lLCB7Ym9keTogY29udGFjdC5tb3N0UmVjZW50TWVzc2FnZS5ib2R5LCBpY29uOiBjb250YWN0LmF2YXRhcn0pO1xyXG4gICAgICAgICAgICBub3RpZmljYXRpb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZWNlaXZlZEdyb3VwTWVzc2FnZShyb29tOiBSb29tKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkRGlzcGxheU5vdGlmaWNhdGlvbigpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSByb29tLm1vc3RSZWNlbnRNZXNzYWdlLmJvZHk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbmRlciA9IHJvb20ubW9zdFJlY2VudE1lc3NhZ2UuZnJvbTtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMuY3VzdG9taXplR3JvdXBNZXNzYWdlKHNlbmRlciwgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24ocm9vbS5uYW1lLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uY2xvc2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBjdXN0b21pemVHcm91cE1lc3NhZ2Uoc2VuZGVyOiBKSUQsIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB7Ym9keTogYCR7c2VuZGVyfTogJHttZXNzYWdlfWB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvdWxkRGlzcGxheU5vdGlmaWNhdGlvbigpIHtcclxuICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb24gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVuYWJsZWRcclxuICAgICAgICAgICAgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAmJiB0aGlzLnN1cHBvcnRzTm90aWZpY2F0aW9uKClcclxuICAgICAgICAgICAgJiYgbm90aWZpY2F0aW9uLnBlcm1pc3Npb24gPT09ICdncmFudGVkJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN1cHBvcnRzTm90aWZpY2F0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3c7XHJcbiAgICB9XHJcbn1cclxuIl19