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.
aConnect-UX/src/app/shared/components/header/header.component.ts

182 lines
5.8 KiB
TypeScript

import { Component, HostListener, Inject, PLATFORM_ID } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { SidebarService } from '../../../services/sidebar.service';
import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { StorageService } from '../../services/storage.service';
import { AuthService } from '../../../services/auth.service';
import { isPlatformBrowser, formatDate, CommonModule } from '@angular/common';
@Component({
selector: 'app-header',
imports: [TranslateModule, CommonModule],
templateUrl: './header.component.html',
styleUrl: './header.component.scss'
})
export class HeaderComponent {
isDropdownVisible: boolean;
isVacDropdownVisible: boolean;
isNotificationsVisible: boolean;
notifications = [
{
imgSrc: '',
title: 'Salena Layfield',
message: 'As a skeptical Cambridge friend of mine occidental.',
timeAgo: '1 hour ago'
},
];
direction: string = 'ltr';
userString;
user;
username;
mismatchedDates: string = "";
dateColor = "black";
date: any;
vacName: any;
allVacs: any;
constructor(
private router: Router,
public sidebarService: SidebarService,
private translate: TranslateService,
@Inject(PLATFORM_ID) private platformId: Object,
private storageService: StorageService,
public authService: AuthService
) {
this.isDropdownVisible = false;
this.isVacDropdownVisible = false;
this.isNotificationsVisible = false;
this.userString = this.storageService.getItem('user');
this.user = JSON.parse(this.userString as string);
this.username = this.user?.username;
this.date = new Date().toISOString().split('T')[0];
}
ngOnInit(): void {
if (typeof document !== 'undefined' && typeof window !== 'undefined') {
this.initializeVerticalMenuToggle();
this.initializeFullscreenToggle();
const body = document.body;
if (window.innerWidth >= 992) {
const isCollapsed = body.classList.toggle('sidebar-enable');
this.storageService.setItem('sidebarState', isCollapsed ? 'expanded' : 'collapsed');
}
}
}
ngAfterViewInit(): void {
}
initializeVerticalMenuToggle(): void {
if (isPlatformBrowser(this.platformId)) {
const verticalMenuBtn = document.getElementById('vertical-menu-btn');
if (window.innerWidth <= 992) {
const body = document.body;
body.classList.add('vertical-collpsed');
}
if (verticalMenuBtn) {
verticalMenuBtn.addEventListener('click', this.toggleSidebar.bind(this));
}
}
}
initializeFullscreenToggle(): void {
if (isPlatformBrowser(this.platformId)) {
const fullscreenButton = document.querySelector<HTMLButtonElement>('[data-bs-toggle="fullscreen"]');
if (fullscreenButton) {
fullscreenButton.addEventListener("click", () => {
if (!document.fullscreenElement) {
this.toggleFullscreen(true);
} else {
this.toggleFullscreen(false);
}
});
}
}
}
toggleFullscreen(enter: boolean): void {
if (isPlatformBrowser(this.platformId)) {
if (enter) {
document.documentElement.requestFullscreen();
} else {
document.exitFullscreen();
}
document.body.classList.toggle('fullscreen-enable', enter);
}
}
toggleSidebar(): void {
if (isPlatformBrowser(this.platformId)) {
const body = document.body;
const isSidebarEnabled = body.classList.toggle('sidebar-enable');
if (window.innerWidth >= 992) {
const isCollapsed = body.classList.toggle('vertical-collpsed');
this.storageService.setItem('sidebarState', isCollapsed ? 'collapsed' : 'expanded');
if (isCollapsed) {
const subMenus = document.querySelectorAll('.sub-menu');
subMenus.forEach(menu => {
(menu as HTMLElement).style.display = '';
menu.setAttribute('aria-expanded', 'false');
});
} else {
const subMenus = document.querySelectorAll('.sub-menu');
subMenus.forEach(menu => {
(menu as HTMLElement).style.display = 'none';
menu.setAttribute('aria-expanded', 'false');
});
}
} else {
body.classList.remove('vertical-collpsed');
this.storageService.setItem('sidebarState', 'expanded');
const subMenus = document.querySelectorAll('.sub-menu');
subMenus.forEach(menu => {
(menu as HTMLElement).style.display = 'none';
menu.setAttribute('aria-expanded', 'false');
});
}
}
}
toggleDropdown(): void {
this.isDropdownVisible = !this.isDropdownVisible;
this.isNotificationsVisible = false;
}
toggleVacDropdown(): void {
this.isVacDropdownVisible = !this.isVacDropdownVisible;
this.isNotificationsVisible = false;
}
toggleNotifications(): void {
this.isNotificationsVisible = !this.isNotificationsVisible;
this.isDropdownVisible = false;
}
// toggleSidebar() {
// this.sidebarService.toggleSidebar();
// }
logout() {
this.authService.logout();
}
@HostListener('document:click', ['$event'])
handleClickOutside(event: MouseEvent) {
const targetElement = event.target as HTMLElement;
const isClickInsideProfileDropdown = targetElement.closest('.profile-dropdown');
const isClickInsideVacDropdown = targetElement.closest('.vac-dropdown');
if (!isClickInsideProfileDropdown) {
this.isDropdownVisible = false;
}
if (!isClickInsideVacDropdown) {
this.isVacDropdownVisible = false;
}
}
formatDate(date?: Date) {
if ((date && !isNaN(date.getTime())) || (date != null || date != undefined)) {
// Adil 5152 - Changing the Date Locale based on the language selected
return formatDate(date, 'EEEE, d MMMM yyyy', 'en');
}
return null;
}
}