openreplay/frontend/app/mstore/notificationStore.ts
Andrey Babushkin fd5c0c9747
Add lokalisation (#3092)
* applied eslint

* add locales and lint the project

* removed error boundary

* updated locales

* fix min files

* fix locales
2025-03-06 17:43:15 +01:00

108 lines
2.8 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,
setNotificationsCount: 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;
});
this.fetchNotificationsCount();
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;
});
this.fetchNotificationsCount();
resolve(response);
})
.catch((error: any) => {
reject(error);
})
.finally(() => {
this.markingAsRead = false;
});
});
}
setNotificationsCount(count: number) {
this.notificationsCount = count;
}
fetchNotificationsCount(): Promise<any> {
return new Promise((resolve, reject) => {
userService
.getNotificationsCount()
.then((response: any) => {
this.setNotificationsCount(response.count);
resolve(response);
})
.catch((error: any) => {
reject(error);
});
});
}
}