Merge pull request 'feat(navigation): add navigation bar to employee views' (#79) from feature/add-sidebar into main
Reviewed-on: #79
This commit is contained in:
		
				commit
				
					
						ebd4508743
					
				
			
		
					 6 changed files with 117 additions and 108 deletions
				
			
		|  | @ -1,49 +1,52 @@ | |||
| <div class="container"> | ||||
|   <div class="header"> | ||||
|     <div class="dropdown position-absolute top-0 end-0 m-3"> | ||||
|       <button class="btn align-items-center d-flex" type="button" id="userDropdown" data-bs-toggle="dropdown" | ||||
|         aria-expanded="false"> | ||||
|         <img src="user.svg" alt="User Icon" class="rounded-circle" style="width: 30px; height: 30px;"> | ||||
|       </button> | ||||
|       <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown"> | ||||
|         <li><a class="dropdown-item" href="/logout">Log out</a></li> | ||||
|       </ul> | ||||
|     </div> | ||||
|     <h1>Employees</h1> | ||||
|   </div> | ||||
| 
 | ||||
|   <div class="header-actions"> | ||||
|     <form [formGroup]="searchForm"> | ||||
|       <div class="search-bar"> | ||||
|         <input type="text" placeholder="Search employee" formControlName="search"> | ||||
|         <button (click)="submit()">Search</button> | ||||
| <div class="d-flex flex-row"> | ||||
|   <app-navigation-bar [route]="'employee'" class="row" style="height: 100vh;"></app-navigation-bar> | ||||
|   <div class="container"> | ||||
|     <div class="header"> | ||||
|       <div class="dropdown position-absolute top-0 end-0 m-3"> | ||||
|         <button class="btn align-items-center d-flex" type="button" id="userDropdown" data-bs-toggle="dropdown" | ||||
|           aria-expanded="false"> | ||||
|           <img src="user.svg" alt="User Icon" class="rounded-circle" style="width: 30px; height: 30px;"> | ||||
|         </button> | ||||
|         <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown"> | ||||
|           <li><a class="dropdown-item" href="/logout">Log out</a></li> | ||||
|         </ul> | ||||
|       </div> | ||||
|       <p class="text-body-tertiary">Search for a propertiy of an Employee. eg. First Name</p> | ||||
|     </form> | ||||
|     <button (click)="createEmployee()" class="add-button">Add employee</button> | ||||
|   </div> | ||||
|       <h1>Employees</h1> | ||||
|     </div> | ||||
| 
 | ||||
|   <table class="employee-table"> | ||||
|     <thead> | ||||
|       <tr> | ||||
|         <th><span class="sortable">First Name</span></th> | ||||
|         <th><span class="sortable">Last Name</span></th> | ||||
|         <th>Actions</th> | ||||
|       </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|       @if (employees) { | ||||
|       @for (employee of employees; track employee) { | ||||
|       <tr> | ||||
|         <td>{{ employee.firstName }}</td> | ||||
|         <td>{{ employee.lastName }}</td> | ||||
|         <td> | ||||
|           <button class="btn btn-primary me-2" (click)="editEmployee(employee.id)">Edit</button> | ||||
|           <button class="btn btn-danger" (click)="deleteEmployee(employee.id)">Delete</button> | ||||
|         </td> | ||||
|       </tr> | ||||
|       } | ||||
|       } | ||||
|     </tbody> | ||||
|   </table> | ||||
|     <div class="header-actions"> | ||||
|       <form [formGroup]="searchForm"> | ||||
|         <div class="search-bar"> | ||||
|           <input type="text" placeholder="Search employee" formControlName="search"> | ||||
|           <button (click)="submit()">Search</button> | ||||
|         </div> | ||||
|         <p class="text-body-tertiary">Search for a propertiy of an Employee. eg. First Name</p> | ||||
|       </form> | ||||
|       <button (click)="createEmployee()" class="add-button">Add employee</button> | ||||
|     </div> | ||||
| 
 | ||||
|     <table class="employee-table"> | ||||
|       <thead> | ||||
|         <tr> | ||||
|           <th><span class="sortable">First Name</span></th> | ||||
|           <th><span class="sortable">Last Name</span></th> | ||||
|           <th>Actions</th> | ||||
|         </tr> | ||||
|       </thead> | ||||
|       <tbody> | ||||
|         @if (employees) { | ||||
|         @for (employee of employees; track employee) { | ||||
|         <tr> | ||||
|           <td>{{ employee.firstName }}</td> | ||||
|           <td>{{ employee.lastName }}</td> | ||||
|           <td> | ||||
|             <button class="btn btn-primary me-2" (click)="editEmployee(employee.id)">Edit</button> | ||||
|             <button class="btn btn-danger" (click)="deleteEmployee(employee.id)">Delete</button> | ||||
|           </td> | ||||
|         </tr> | ||||
|         } | ||||
|         } | ||||
|       </tbody> | ||||
|     </table> | ||||
|   </div> | ||||
| </div> | ||||
|  |  | |||
|  | @ -5,13 +5,14 @@ import { EmployeeResponseDTO } from '../../models/mitarbeiter'; | |||
| import { EmployeeService } from '../../service/employee.service'; | ||||
| import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; | ||||
| import { Router } from '@angular/router'; | ||||
| import { NavigationBarComponent } from '../navigation-bar/navigation-bar.component'; | ||||
| 
 | ||||
| @Component({ | ||||
|   selector: 'app-mitarbeiterverwaltung-view', | ||||
|   templateUrl: './mitarbeiterverwaltung-view.component.html', | ||||
|   styleUrls: ['./mitarbeiterverwaltung-view.component.css'], | ||||
|   standalone: true, | ||||
|   imports: [CommonModule, ReactiveFormsModule] | ||||
|   imports: [CommonModule, ReactiveFormsModule, NavigationBarComponent] | ||||
| }) | ||||
| export class MitarbeiterverwaltungViewComponent implements OnInit { | ||||
|   employees: Array<EmployeeResponseDTO> = []; | ||||
|  |  | |||
|  | @ -5,18 +5,13 @@ | |||
|     </a> | ||||
|     <hr> | ||||
|     <ul class="nav nav-pills flex-column mb-auto"> | ||||
|       <li class="nav-item"> | ||||
|         <a href="#" class="nav-link active text-black" aria-current="page"> | ||||
|           Dashboard | ||||
|         </a> | ||||
|       </li> | ||||
|       <li> | ||||
|         <a href="#" class="nav-link text-black"> | ||||
|         <a [routerLink]="['/mitarbeiter']" (click)="employees()" [class.active]="route == 'employee'" class="nav-link text-black" aria-current="page"> | ||||
|           Mitarbeiterverwaltung | ||||
|         </a> | ||||
|       </li> | ||||
|       <li> | ||||
|         <a href="#" class="nav-link text-black"> | ||||
|         <a [routerLink]="['/qualifikationsverwaltung']" [class.active]="route == 'skill'" class="nav-link text-black"> | ||||
|           Qualifikationsverwaltung | ||||
|         </a> | ||||
|       </li> | ||||
|  |  | |||
|  | @ -1,12 +1,18 @@ | |||
| import { Component } from '@angular/core'; | ||||
| import { Component, Input } from '@angular/core'; | ||||
| import { ActivatedRoute, Router, RouterLink } from '@angular/router'; | ||||
| 
 | ||||
| @Component({ | ||||
|   selector: 'app-navigation-bar', | ||||
|   standalone: true, | ||||
|   imports: [], | ||||
|   imports: [RouterLink], | ||||
|   templateUrl: './navigation-bar.component.html', | ||||
|   styleUrl: './navigation-bar.component.css' | ||||
| }) | ||||
| export class NavigationBarComponent { | ||||
|   constructor(private router: Router) { } | ||||
|   @Input() route: string = ""; | ||||
| 
 | ||||
|   employees() { | ||||
|     this.router.navigate(['mitarbeiter']); | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,57 +1,60 @@ | |||
| <div class="container"> | ||||
|   <div class="header"> | ||||
|     <div class="dropdown position-absolute top-0 end-0 m-3"> | ||||
|       <button class="btn align-items-center d-flex" type="button" id="userDropdown" data-bs-toggle="dropdown" | ||||
|         aria-expanded="false"> | ||||
|         <img src="user.svg" alt="User Icon" class="rounded-circle" style="width: 30px; height: 30px;"> | ||||
|       </button> | ||||
|       <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown"> | ||||
|         <li><a class="dropdown-item" href="/logout">Log out</a></li> | ||||
|       </ul> | ||||
|     </div> | ||||
|     <h1>Qualifications</h1> | ||||
|   </div> | ||||
| 
 | ||||
|   <div class="d-flex flex-column"> | ||||
|     <div class="row header-actions"> | ||||
|       <form [formGroup]="searchForm"> | ||||
|         <div class="search-bar"> | ||||
|           <input type="text" placeholder="Search employee" formControlName="search"> | ||||
|           <button (click)="submit()">Search</button> | ||||
|         </div> | ||||
|         <p class="text-body-tertiary">Search for a propertiy of a Qualification. eg. Name</p> | ||||
|       </form> | ||||
|       <div class="d-flex"> | ||||
|         <button (click)="createSkill()" class="add-button me-auto">Add qualification</button> | ||||
| <div class="d-flex flex-row"> | ||||
|   <app-navigation-bar [route]="'skill'" class="row" style="height: 100vh;"></app-navigation-bar> | ||||
|   <div class="container"> | ||||
|     <div class="header"> | ||||
|       <div class="dropdown position-absolute top-0 end-0 m-3"> | ||||
|         <button class="btn align-items-center d-flex" type="button" id="userDropdown" data-bs-toggle="dropdown" | ||||
|           aria-expanded="false"> | ||||
|           <img src="user.svg" alt="User Icon" class="rounded-circle" style="width: 30px; height: 30px;"> | ||||
|         </button> | ||||
|         <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown"> | ||||
|           <li><a class="dropdown-item" href="/logout">Log out</a></li> | ||||
|         </ul> | ||||
|       </div> | ||||
|       <h1>Qualifications</h1> | ||||
|     </div> | ||||
| 
 | ||||
|     @if (errorDeletingSkill) { | ||||
|     <div class="row"> | ||||
|       <p class="alert alert-danger">This Qualification can not be deleted because it still has employees.</p> | ||||
|     <div class="d-flex flex-column"> | ||||
|       <div class="row header-actions"> | ||||
|         <form [formGroup]="searchForm"> | ||||
|           <div class="search-bar"> | ||||
|             <input type="text" placeholder="Search employee" formControlName="search"> | ||||
|             <button (click)="submit()">Search</button> | ||||
|           </div> | ||||
|           <p class="text-body-tertiary">Search for a propertiy of a Qualification. eg. Name</p> | ||||
|         </form> | ||||
|         <div class="d-flex"> | ||||
|           <button (click)="createSkill()" class="add-button me-auto">Add qualification</button> | ||||
|         </div> | ||||
|       </div> | ||||
| 
 | ||||
|       @if (errorDeletingSkill) { | ||||
|       <div class="row"> | ||||
|         <p class="alert alert-danger">This Qualification can not be deleted because it still has employees.</p> | ||||
|       </div> | ||||
|       } | ||||
|     </div> | ||||
|     } | ||||
| 
 | ||||
|     <table class="employee-table"> | ||||
|       <thead> | ||||
|         <tr> | ||||
|           <th><span class="sortable">Name</span></th> | ||||
|           <th>Actions</th> | ||||
|         </tr> | ||||
|       </thead> | ||||
|       <tbody> | ||||
|         @if (skills) { | ||||
|         @for (skill of skills; track skill) { | ||||
|         <tr> | ||||
|           <td>{{ skill.skill }}</td> | ||||
|           <td> | ||||
|             <button class="btn btn-primary me-2" (click)="editSkill(skill.id)">Edit</button> | ||||
|             <button class="btn btn-danger" (click)="deleteSkill(skill.id)">Delete</button> | ||||
|           </td> | ||||
|         </tr> | ||||
|         } | ||||
|         } | ||||
|       </tbody> | ||||
|     </table> | ||||
|   </div> | ||||
| 
 | ||||
|   <table class="employee-table"> | ||||
|     <thead> | ||||
|       <tr> | ||||
|         <th><span class="sortable">Name</span></th> | ||||
|         <th>Actions</th> | ||||
|       </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|       @if (skills) { | ||||
|       @for (skill of skills; track skill) { | ||||
|       <tr> | ||||
|         <td>{{ skill.skill }}</td> | ||||
|         <td> | ||||
|           <button class="btn btn-primary me-2" (click)="editSkill(skill.id)">Edit</button> | ||||
|           <button class="btn btn-danger" (click)="deleteSkill(skill.id)">Delete</button> | ||||
|         </td> | ||||
|       </tr> | ||||
|       } | ||||
|       } | ||||
|     </tbody> | ||||
|   </table> | ||||
| </div> | ||||
|  |  | |||
|  | @ -3,11 +3,12 @@ import { QualificationGetDTO } from '../../models/skill'; | |||
| import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; | ||||
| import { SkillService } from '../../service/skill.service'; | ||||
| import { Router } from '@angular/router'; | ||||
| import { NavigationBarComponent } from '../navigation-bar/navigation-bar.component'; | ||||
| 
 | ||||
| @Component({ | ||||
|   selector: 'app-qualifikationsverwaltung', | ||||
|   standalone: true, | ||||
|   imports: [ReactiveFormsModule], | ||||
|   imports: [ReactiveFormsModule, NavigationBarComponent], | ||||
|   templateUrl: './qualifikationsverwaltung.component.html', | ||||
|   styleUrl: './qualifikationsverwaltung.component.css' | ||||
| }) | ||||
|  |  | |||
		Reference in a new issue