Files
AstralRinth/apps/frontend/src/providers/frontend-notifications.ts
Cal H. b81e727204 feat: introduce dependency injection framework (#4091)
* feat: migrate frontend notifications to dependency injection based notificaton manager

* fix: lint

* fix: issues

* fix: compile error + notif binding issue

* refactor: move org context to new DI setup

* feat: migrate app notifications to DI + frontend styling

* fix: sidebar issues

* fix: dont use delete in computed

* fix: import and prop issue

* refactor: move handleError to main notification manager class

* fix: lint & build

* fix: merge issues

* fix: lint issues

* fix: lint issues

---------

Signed-off-by: IMB11 <hendersoncal117@gmail.com>
Signed-off-by: Cal H. <hendersoncal117@gmail.com>
2025-08-13 20:48:52 +00:00

52 lines
1.4 KiB
TypeScript

import { useState } from "#app";
import {
type NotificationPanelLocation,
type WebNotification,
AbstractWebNotificationManager,
} from "@modrinth/ui";
export class FrontendNotificationManager extends AbstractWebNotificationManager {
private readonly state: Ref<WebNotification[]>;
private readonly locationState: Ref<NotificationPanelLocation>;
public constructor() {
super();
this.state = useState<WebNotification[]>("notifications", () => []);
this.locationState = useState<NotificationPanelLocation>(
"notifications.location",
() => "right",
);
}
public getNotificationLocation(): NotificationPanelLocation {
return this.locationState.value;
}
public setNotificationLocation(location: NotificationPanelLocation): void {
this.locationState.value = location;
}
public getNotifications(): WebNotification[] {
return this.state.value;
}
protected addNotificationToStorage(notification: WebNotification): void {
this.state.value.push(notification);
}
protected removeNotificationFromStorage(id: string | number): void {
const index = this.state.value.findIndex((n) => n.id === id);
if (index > -1) {
this.state.value.splice(index, 1);
}
}
protected removeNotificationFromStorageByIndex(index: number): void {
this.state.value.splice(index, 1);
}
protected clearAllNotificationsFromStorage(): void {
this.state.value.splice(0);
}
}