diff --git a/src/app/components/contacts/contact-detail/contact-detail.component.html b/src/app/components/contacts/contact-detail/contact-detail.component.html index 45709d3..f6cc847 100644 --- a/src/app/components/contacts/contact-detail/contact-detail.component.html +++ b/src/app/components/contacts/contact-detail/contact-detail.component.html @@ -15,20 +15,17 @@
- {{ userService.displayUserDetails(currentUserId, "initials") }} + {{ userService.getUserDetails(currentUserId, "initials") }}
- {{ userService.displayUserDetails(currentUserId, "firstName") }} - {{ userService.displayUserDetails(currentUserId, "lastName") }} + {{ userService.getUserDetails(currentUserId, "firstName") }} + {{ userService.getUserDetails(currentUserId, "lastName") }}
diff --git a/src/app/components/contacts/contact-detail/contact-detail.component.ts b/src/app/components/contacts/contact-detail/contact-detail.component.ts index 360588d..9f5e37a 100644 --- a/src/app/components/contacts/contact-detail/contact-detail.component.ts +++ b/src/app/components/contacts/contact-detail/contact-detail.component.ts @@ -1,5 +1,4 @@ import { Component, Input } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; import { UserService } from '../../../services/user.service'; import { CommonModule } from '@angular/common'; import { ContactsComponent } from '../contacts.component'; diff --git a/src/app/components/contacts/contacts.component.html b/src/app/components/contacts/contacts.component.html index a441231..07eba25 100644 --- a/src/app/components/contacts/contacts.component.html +++ b/src/app/components/contacts/contacts.component.html @@ -6,62 +6,35 @@ check
-
- @for (sortLetter of usersFirstLetter; track allUsers) { -
{{ sortLetter }}
+ @for (sortLetter of this.sortAllUsers(); track sortLetter) { +
{{ sortLetter.firstName }}
- @for (count of usersByFirstLetter[sortLetter]; track usersByFirstLetter; - let index = $index) { -
+ @for (user of this.sortUsersFirstLetter(sortLetter.id); track user; let + index = $index) { +
- {{ - userService.displayUserDetails( - usersByFirstLetter[sortLetter][index], - "initials" - ) - }} + {{ userService.getUserDetails(user.id, "initials") }}
- {{ - userService.displayUserDetails( - usersByFirstLetter[sortLetter][index], - "firstName" - ) - }} + {{ userService.getUserDetails(user.id, "firstName") }}
- {{ - userService.displayUserDetails( - usersByFirstLetter[sortLetter][index], - "lastName" - ) - }} + {{ userService.getUserDetails(user.id, "lastName") }}
diff --git a/src/app/components/contacts/contacts.component.ts b/src/app/components/contacts/contacts.component.ts index 8c29df2..9719d3a 100644 --- a/src/app/components/contacts/contacts.component.ts +++ b/src/app/components/contacts/contacts.component.ts @@ -18,14 +18,7 @@ export class ContactsComponent { usersByFirstLetter: { [key: string]: string[] } = {}; currentUserId: string = ''; - constructor(public userService: UserService, private route: ActivatedRoute) { - this.userService.subUserList().subscribe(() => { - this.allUsers = this.loadAllUser(); - this.sortAllUsers(); - this.sortUsersFirstLetter(); - this.sortUsersByFirstLetter(); - }); - } + constructor(public userService: UserService, private route: ActivatedRoute) {} ngOnInit(): void { this.routeUserId(); @@ -39,34 +32,22 @@ export class ContactsComponent { } } - loadAllUser(): User[] { - // Without Guest - return this.userService.allUsers.filter((user, index) => index !== 0); + loadAllUserWithoutGuest(): User[] { + return this.userService.getUsers().filter((user) => user.initials !== 'G'); } sortAllUsers() { - this.allUsers = [...this.allUsers].sort((a, b) => - (a.firstName?.toLowerCase() ?? '').localeCompare( - b.firstName?.toLowerCase() ?? '' + return [...this.loadAllUserWithoutGuest()].sort((a, b) => + (a.initials?.toLowerCase() ?? '').localeCompare( + b.initials?.toLowerCase() ?? '' ) ); } - sortUsersFirstLetter() { - this.usersFirstLetter = []; - this.usersFirstLetter = Array.from( - new Set(this.allUsers.map((user) => user.firstName[0].toUpperCase())) + sortUsersFirstLetter(userId: string) { + const filteredUsers = this.loadAllUserWithoutGuest().filter( + (user) => user.id === userId ); - } - - sortUsersByFirstLetter() { - this.usersByFirstLetter = {}; - this.allUsers.forEach((user) => { - const firstLetter = user.firstName[0].toUpperCase(); - if (!this.usersByFirstLetter[firstLetter]) { - this.usersByFirstLetter[firstLetter] = []; - } - this.usersByFirstLetter[firstLetter].push(user.id); - }); + return filteredUsers; } } diff --git a/src/app/services/language.service.ts b/src/app/services/language.service.ts index d81b48b..14de5e6 100644 --- a/src/app/services/language.service.ts +++ b/src/app/services/language.service.ts @@ -6,15 +6,17 @@ import { TranslateService } from '@ngx-translate/core'; }) export class LanguageService { currentLang = 'en'; - currentFlag = 'de'; constructor(private translate: TranslateService) { this.translate.setDefaultLang(this.currentLang); } - switchLanguage() { - this.currentLang = this.currentLang === 'en' ? 'de' : 'en'; - this.currentFlag = this.currentLang === 'en' ? 'de' : 'en'; + switchLanguage(lang: string) { + if (lang === 'en') { + this.currentLang = 'en'; + } else if (lang == 'de') { + this.currentLang = 'de'; + } this.translate.use(this.currentLang); } } diff --git a/src/app/services/user.service.ts b/src/app/services/user.service.ts index 4d26abf..17d08a8 100644 --- a/src/app/services/user.service.ts +++ b/src/app/services/user.service.ts @@ -1,52 +1,53 @@ -import { Injectable, inject } from '@angular/core'; +import { Injectable, OnDestroy, inject } from '@angular/core'; import { Firestore, collection, onSnapshot } from '@angular/fire/firestore'; import { User } from '../interfaces/user.interface'; -import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root', }) -export class UserService { +export class UserService implements OnDestroy { firestore: Firestore = inject(Firestore); allUsers: User[] = []; - userMap: { [key: string]: User } = {}; + isUserLogin: boolean = true; + + unsubUser; constructor() { - this.subUserList().subscribe(() => { - this.organizeUserData(); - }); + this.unsubUser = this.subUserList(); + } + + getUsers(): User[] { + return this.allUsers; } subUserList() { - return new Observable((observer) => { - const unsubscribe = onSnapshot( - collection(this.firestore, 'users'), - (list) => { - this.allUsers = []; - list.forEach((element) => { - const taskData = { ...(element.data() as User), id: element.id }; - this.allUsers.push(taskData); - }); - observer.next(); - } - ); - return () => unsubscribe(); + return onSnapshot(collection(this.firestore, 'users'), (list) => { + this.allUsers = []; + list.forEach((element) => { + this.allUsers.push(this.setUserObject(element.data(), element.id)); + }); }); } - organizeUserData() { - this.userMap = {}; - this.allUsers.forEach((user) => { - this.userMap[user.id] = user; - }); + setUserObject(obj: any, id: string): User { + return { + id: id, + firstName: obj.firstName, + lastName: obj.lastName, + email: obj.email, + phone: obj.phone, + initials: obj.initials, + color: obj.color, + }; } - displayUserDetails(id: string, query: keyof User) { - if (this.userMap[id]) { - const user = this.userMap[id]; - return user[query]; - } - return ''; + getUserDetails(userId: string, query: keyof User) { + const filteredUsers = this.getUsers().filter((user) => user.id === userId); + return filteredUsers.map((user) => user[query]); + } + + ngOnDestroy() { + this.unsubUser(); } } diff --git a/src/app/shared/components/header/header.component.html b/src/app/shared/components/header/header.component.html index dd1fa89..c973657 100644 --- a/src/app/shared/components/header/header.component.html +++ b/src/app/shared/components/header/header.component.html @@ -8,10 +8,17 @@
Kanban Project Management Tool
- + +
+
+
G
- + + diff --git a/src/app/shared/components/header/header.component.scss b/src/app/shared/components/header/header.component.scss index 9642ee7..acb0ae0 100644 --- a/src/app/shared/components/header/header.component.scss +++ b/src/app/shared/components/header/header.component.scss @@ -38,7 +38,8 @@ section { } } -.img-help { +.img-help, +.img-language { display: flex; align-items: center; width: 56px; diff --git a/src/app/shared/components/header/header.component.ts b/src/app/shared/components/header/header.component.ts index e203bcb..c6a51be 100644 --- a/src/app/shared/components/header/header.component.ts +++ b/src/app/shared/components/header/header.component.ts @@ -1,4 +1,4 @@ -import { Component, ElementRef, HostListener } from '@angular/core'; +import { Component, HostListener } from '@angular/core'; import { RouterModule } from '@angular/router'; import { NavbarComponent } from '../navbar/navbar.component'; import { CommonModule } from '@angular/common'; @@ -12,23 +12,30 @@ import { CommonModule } from '@angular/common'; }) export class HeaderComponent { navbarVisible: boolean = false; - - constructor(private elementRef: ElementRef) {} + navbarLanguageVisible: boolean = false; toggleNavbar() { this.navbarVisible = !this.navbarVisible; } + toggleLanguage() { + this.navbarLanguageVisible = !this.navbarLanguageVisible; + } + @HostListener('document:click', ['$event']) onClick(event: MouseEvent) { const targetElement = event.target as HTMLElement; - - // Überprüfe, ob der Klick außerhalb der Navbar erfolgt ist if ( !targetElement.closest('app-navbar') && !targetElement.closest('.img-user') ) { this.navbarVisible = false; } + if ( + !targetElement.closest('app-navbar') && + !targetElement.closest('.img-language') + ) { + this.navbarLanguageVisible = false; + } } } diff --git a/src/app/shared/components/navbar/navbar.component.html b/src/app/shared/components/navbar/navbar.component.html index 412fadf..8388639 100644 --- a/src/app/shared/components/navbar/navbar.component.html +++ b/src/app/shared/components/navbar/navbar.component.html @@ -1,4 +1,5 @@ -
+} @else if (navbarLanguageVisible) { + +} diff --git a/src/app/shared/components/navbar/navbar.component.scss b/src/app/shared/components/navbar/navbar.component.scss index cc7b208..a7a4ae0 100644 --- a/src/app/shared/components/navbar/navbar.component.scss +++ b/src/app/shared/components/navbar/navbar.component.scss @@ -13,14 +13,32 @@ z-index: 1; } +.language { + height: 108px; +} + .link { display: flex; align-items: center; height: 46px; padding: 8px 16px; border-radius: 8px; - color: var(--very-light-gray4); + color: var(--white); cursor: pointer; + &:hover { + background-color: var(--very-dark-blue); + span { + color: var(--light-blue); + } + } +} + +.active { + background-color: var(--very-dark-blue); + cursor: unset; + span { + color: var(--light-blue); + } } span { @@ -28,8 +46,3 @@ span { font-size: 16px; font-weight: 400; } - -.link:hover { - color: var(--light-blue); - background-color: var(--very-dark-blue); -} diff --git a/src/app/shared/components/navbar/navbar.component.ts b/src/app/shared/components/navbar/navbar.component.ts index dd58f42..1227d0b 100644 --- a/src/app/shared/components/navbar/navbar.component.ts +++ b/src/app/shared/components/navbar/navbar.component.ts @@ -1,11 +1,19 @@ -import { Component } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { RouterModule } from '@angular/router'; +import { HeaderComponent } from '../header/header.component'; +import { LanguageService } from '../../../services/language.service'; +import { CommonModule } from '@angular/common'; @Component({ selector: 'app-navbar', standalone: true, - imports: [RouterModule], + imports: [RouterModule, HeaderComponent, CommonModule], templateUrl: './navbar.component.html', styleUrl: './navbar.component.scss', }) -export class NavbarComponent {} +export class NavbarComponent { + @Input() navbarVisible: boolean = false; + @Input() navbarLanguageVisible: boolean = false; + + constructor(public langService: LanguageService) {} +} diff --git a/src/assets/img/header/help.svg b/src/assets/img/header/help.svg new file mode 100644 index 0000000..0f10691 --- /dev/null +++ b/src/assets/img/header/help.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/header/language.svg b/src/assets/img/header/language.svg new file mode 100644 index 0000000..3af2272 --- /dev/null +++ b/src/assets/img/header/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/sidebar/help.svg b/src/assets/img/sidebar/help.svg deleted file mode 100644 index 363822c..0000000 --- a/src/assets/img/sidebar/help.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -