You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mohemmionic5/Mohem/src/app/hmg-common/services/user-local-notification/user-local-notification.ser...

98 lines
2.8 KiB
TypeScript

import { Injectable } from '@angular/core';
import { LocalNotifications, ILocalNotification } from '@ionic-native/local-notifications/ngx';
export interface UserLocalData {
[key: string]: any;
}
@Injectable({
providedIn: 'root'
})
export class UserLocalNotificationService {
public static STORAGE_KEY = 'notifications';
constructor(
public localNotification: LocalNotifications,
) { }
public async requestNotificationPermission(): Promise<boolean> {
const hasPermission = await this.checkNotificationPermission();
if (!hasPermission) {
return await this.localNotification.requestPermission();
} else {
return true;
}
}
public async checkNotificationPermission(): Promise<boolean> {
return await this.localNotification.hasPermission();
}
public async cancelCategoryNotifications(category: string) {
const notifications = await this.localNotification.getAll();
for (const notification of notifications) {
const parsedData = JSON.parse(notification.data);
const notifCategory = parsedData['category'];
if (notifCategory === category) {
await this.localNotification.cancel(notification.id);
}
}
}
public async isCategoryExist(category: string) {
const notifications = await this.localNotification.getAll();
for (const notification of notifications) {
const parsedData = JSON.parse(notification.data);
const notifCategory = parsedData['category'];
// alert( 'notifCategory:' + notifCategory + ' category:' + category);
if (notifCategory === category) {
return true;
}
}
return false;
}
public createNotification(title: string, text: string, date: Date,
category: string) {
const notifID = this.generateNotificationID();
this.scheduleNotification(notifID, title, text, date, category);
}
private scheduleNotification(notifId: number, title: string, text: string,
date: Date, category: string) {
this.localNotification.on('click').subscribe(notification => {
this.localNotification.clear(notification.id);
});
this.localNotification.schedule({
id: notifId,
title: title,
text: text,
trigger: {at: date},
data : {'category': category},
});
}
public deleteAllNotifications() {
this.localNotification.clearAll();
this.localNotification.cancelAll();
}
public cancelNotification(notifID: number) {
this.localNotification.cancel(notifID);
}
public clearTriggeredNotifications() {
this.localNotification.clearAll();
}
private generateNotificationID(): number {
return Date.now() + Math.floor(Math.random() * (1000 - 1) + 1);
}
public async getNotifications(): Promise<ILocalNotification[]> {
const notifs = await this.localNotification.getAll();
return notifs;
}
}