feat: notification component

This commit is contained in:
2024-07-10 23:02:14 +03:00
parent d1e32a94ca
commit 03b200c829
9 changed files with 134 additions and 11 deletions

View File

@@ -0,0 +1,53 @@
import { CommonModule } from "@angular/common";
import { AfterViewInit, Component, OnDestroy } from "@angular/core";
import { Subject, takeUntil } from "rxjs";
import { INotification } from "../../services/notification/notification.dto";
import { NotificationService } from "../../services/notification/notification.service";
@Component({
standalone: true,
selector: "app-notification",
templateUrl: "./notification.component.html",
styleUrls: ["./notification.component.less"],
imports: [CommonModule],
})
export class NotificationComponent implements AfterViewInit, OnDestroy {
show_notification = false;
isError = false;
private closeNotificationTimer: ReturnType<typeof setTimeout> | null = null;
notification: INotification = { isError: false, message: "", name: "", time: 0 };
private destroy$ = new Subject<void>();
constructor(private notificationService: NotificationService) {}
ngAfterViewInit(): void {
this.notificationService.notification$
.asObservable()
.pipe(takeUntil(this.destroy$))
.subscribe((data) => {
if (!data) return;
this.notification = data;
this.show_notification = true;
if (this.closeNotificationTimer) {
clearTimeout(this.closeNotificationTimer);
}
this.closeNotificationTimer = setTimeout(() => {
this.show_notification = false;
}, data.time);
});
}
ngOnDestroy(): void {
this.destroy$.next();
this.destroy$.complete();
}
closeNotification() {
this.show_notification = false;
}
get borderColor(): string {
return this.notification.isError ? "border-red-600" : "border-green-600";
}
}