clean code

This commit is contained in:
Chneemann 2024-03-27 10:48:19 +01:00
parent cac5a73353
commit b54060fe06
4 changed files with 65 additions and 25 deletions

View file

@ -13,6 +13,7 @@ export const routes: Routes = [
{ path: 'add-task', component: AddTaskComponent }, { path: 'add-task', component: AddTaskComponent },
{ path: 'board', component: BoardComponent }, { path: 'board', component: BoardComponent },
{ path: 'contacts', component: ContactsComponent }, { path: 'contacts', component: ContactsComponent },
{ path: 'contacts/:id', component: ContactsComponent },
{ path: 'help', component: HelpComponent }, { path: 'help', component: HelpComponent },
{ path: 'imprint', component: ImprintComponent }, { path: 'imprint', component: ImprintComponent },
{ path: 'privacy-policy', component: PrivacyPolicyComponent }, { path: 'privacy-policy', component: PrivacyPolicyComponent },

View file

@ -13,17 +13,26 @@
<div class="line"></div> <div class="line"></div>
@for (count of usersByFirstLetter[sortLetter]; track usersByFirstLetter; @for (count of usersByFirstLetter[sortLetter]; track usersByFirstLetter;
let index = $index) { let index = $index) {
<div class="contact"> <div
class="contact"
routerLink="/contacts/{{ usersByFirstLetter[sortLetter] }}"
>
<div <div
class="circle" class="circle"
[ngStyle]="{ [ngStyle]="{
'background-color': displayInitialsColor( 'background-color': displayUserDetails(
usersByFirstLetter[sortLetter][index] usersByFirstLetter[sortLetter][index],
'color'
) )
}" }"
> >
<div class="initials"> <div class="initials">
{{ displayInitials(usersByFirstLetter[sortLetter][index]) }} {{
displayUserDetails(
usersByFirstLetter[sortLetter][index],
"initials"
)
}}
</div> </div>
</div> </div>
<div class="details"> <div class="details">
@ -34,4 +43,10 @@
} } } }
</div> </div>
</div> </div>
@if (paramsId) {
<div class="right-frame">
<h2>Contacts</h2>
<p>{{ displayUserName(paramsId) }}</p>
</div>
}
</section> </section>

View file

@ -102,6 +102,16 @@ section {
} }
} }
.right-frame {
position: absolute;
top: -64px;
left: 339px;
width: calc(100vw - 635px);
min-height: calc(100vh - 128px);
padding: 64px 48px 48px 48px;
box-shadow: 2px 0px 2px 0px rgba(0, 0, 0, 0.1);
}
@media screen and (max-width: 910px) { @media screen and (max-width: 910px) {
.left-frame { .left-frame {
position: fixed; position: fixed;

View file

@ -2,11 +2,12 @@ import { Component } from '@angular/core';
import { UserService } from '../../services/user.service'; import { UserService } from '../../services/user.service';
import { User } from '../../interfaces/user.interface'; import { User } from '../../interfaces/user.interface';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { ActivatedRoute, RouterLink } from '@angular/router';
@Component({ @Component({
selector: 'app-contacts', selector: 'app-contacts',
standalone: true, standalone: true,
imports: [CommonModule], imports: [CommonModule, RouterLink],
templateUrl: './contacts.component.html', templateUrl: './contacts.component.html',
styleUrl: './contacts.component.scss', styleUrl: './contacts.component.scss',
}) })
@ -14,16 +15,38 @@ export class ContactsComponent {
allUsers: User[] = []; allUsers: User[] = [];
usersFirstLetter: string[] = []; usersFirstLetter: string[] = [];
usersByFirstLetter: { [key: string]: string[] } = {}; usersByFirstLetter: { [key: string]: string[] } = {};
userMap: { [key: string]: User } = {};
paramsId = '';
constructor(private userService: UserService) { constructor(private userService: UserService, private route: ActivatedRoute) {
this.userService.subUserList().subscribe(() => { this.userService.subUserList().subscribe(() => {
this.allUsers = this.loadAllUser(); this.allUsers = this.loadAllUser();
this.organizeUserData();
this.sortAllUsers(); this.sortAllUsers();
this.sortUsersFirstLetter(); this.sortUsersFirstLetter();
this.sortUsersByFirstLetter(); this.sortUsersByFirstLetter();
}); });
} }
ngOnInit(): void {
this.routeUserId();
}
routeUserId() {
if (this.route.params.subscribe()) {
this.route.params.subscribe((params) => {
this.paramsId = params['id'];
});
}
}
organizeUserData() {
this.userMap = {};
this.allUsers.forEach((user) => {
this.userMap[user.id] = user;
});
}
loadAllUser(): User[] { loadAllUser(): User[] {
// Without Guest // Without Guest
return this.userService.allUsers.filter((user, index) => index !== 0); return this.userService.allUsers.filter((user, index) => index !== 0);
@ -55,27 +78,18 @@ export class ContactsComponent {
}); });
} }
displayUser(firstLetter: string) {
return this.allUsers
.filter(
(user) =>
user.firstName.charAt(0).toUpperCase() === firstLetter.toUpperCase()
)
.map((user) => user.firstName);
}
displayUserName(id: string) { displayUserName(id: string) {
let currentUser = this.allUsers.filter((user) => user.id === id); if (this.userMap[id]) {
return currentUser[0].firstName + ', ' + currentUser[0].lastName; return this.userMap[id].firstName + ', ' + this.userMap[id].lastName;
}
return '';
} }
displayInitials(id: string) { displayUserDetails(id: string, query: keyof User) {
let currentUser = this.allUsers.filter((user) => user.id === id); if (this.userMap[id]) {
return currentUser[0].initials; const user = this.userMap[id];
} return user[query];
}
displayInitialsColor(id: string) { return '';
let currentUser = this.allUsers.filter((user) => user.id === id);
return currentUser[0].color;
} }
} }