openreplay/frontend/app/mstore/notificationStore.ts

86 lines
No EOL
3 KiB
TypeScript

import { action, makeAutoObservable, observable } from "mobx";
import { userService } from 'App/services';
import Notification from './types/notification';
export default class NotificationStore {
loading: boolean = false;
markingAsRead: boolean = false;
notificationsCount: any = 0;
notifications: any = [];
constructor() {
makeAutoObservable(this, {
loading: observable,
notificationsCount: observable,
notifications: observable,
fetchNotificationsCount: action,
fetchNotifications: action,
ignoreAllNotifications: action,
ignoreNotification: action,
});
}
fetchNotifications(): Promise<any> {
this.loading = true;
return new Promise((resolve, reject) => {
userService.getNotifications()
.then((response: any) => {
this.notifications = response.map((notification: any) => new Notification().fromJson(notification));
resolve(response);
}).catch((error: any) => {
reject(error);
}).finally(() => {
this.loading = false;
});
});
}
ignoreAllNotifications(params: any): Promise<any> {
return new Promise((resolve, reject) => {
userService.ignoreAllNotifications(params)
.then((response: any) => {
this.notifications = this.notifications.map((notification: any) => {
notification.viewed = true;
return notification;
});
resolve(response);
}).catch((error: any) => {
reject(error);
});
});
}
ignoreNotification(notificationId: number): Promise<any> {
this.markingAsRead = true;
return new Promise((resolve, reject) => {
userService.ignoreNotification(notificationId)
.then((response: any) => {
// updates notifications item
this.notifications = this.notifications.map((notification: any) => {
if (notification.notificationId === notificationId) {
notification.viewed = true;
}
return notification;
});
resolve(response);
}).catch((error: any) => {
reject(error);
}).finally(() => {
this.markingAsRead = false;
});
});
}
fetchNotificationsCount(): Promise<any> {
return new Promise((resolve, reject) => {
userService.getNotificationsCount()
.then((response: any) => {
this.notificationsCount = response.count;
resolve(response);
}).catch((error: any) => {
reject(error);
});
});
}
}