27 lines
1.2 KiB
TypeScript
27 lines
1.2 KiB
TypeScript
import core from '../chat/core';
|
|
import {Conversation} from '../chat/interfaces';
|
|
import BaseNotifications from '../chat/notifications'; //tslint:disable-line:match-default-export-name
|
|
|
|
declare global {
|
|
const NativeNotification: {
|
|
notify(notify: boolean, title: string, text: string, icon: string, sound: string | null, data: string): void
|
|
requestPermission(): void
|
|
};
|
|
}
|
|
|
|
document.addEventListener('notification-clicked', (e: Event) => {
|
|
const conv = core.conversations.byKey((<Event & {detail: {data: string}}>e).detail.data);
|
|
if(conv !== undefined) conv.show();
|
|
});
|
|
|
|
export default class Notifications extends BaseNotifications {
|
|
async notify(conversation: Conversation, title: string, body: string, icon: string, sound: string): Promise<void> {
|
|
if(!this.shouldNotify(conversation)) return;
|
|
NativeNotification.notify(core.state.settings.notifications && this.isInBackground, title, body, icon,
|
|
core.state.settings.playSound ? sound : null, conversation.key); //tslint:disable-line:no-null-keyword
|
|
}
|
|
|
|
async requestPermission(): Promise<void> {
|
|
return NativeNotification.requestPermission();
|
|
}
|
|
} |