Files
app-angular-demo/src/app/components/employees/employees.component.ts
2022-03-28 15:38:55 +02:00

99 lines
2.7 KiB
TypeScript

import { Component, OnInit, OnDestroy } from '@angular/core';
import { EmployeesService } from '../../services/employees.service';
import { EventDriverService } from '../../services/event.driver.service';
import { Employee } from '../../model/employee.model';
import { AppDataState, DataStateEnum, EmployeeActionsTypes, ActEvent } from '../../state/employee.state';
import { Observable, of, Subscription } from 'rxjs';
import { catchError, map, startWith } from 'rxjs/operators';
import { Router } from '@angular/router';
@Component({
selector: 'app-employees',
templateUrl: './employees.component.html',
styleUrls: ['./employees.component.css']
})
export class EmployeesComponent implements OnInit, OnDestroy {
employees$:Observable<AppDataState<Employee[]>>|null=null;
readonly DataStateEnum=DataStateEnum;
sub:Subscription;
constructor(private employeesService:EmployeesService, private router:Router, private evDriveService:EventDriverService) {
}
ngOnInit(): void {
this.sub=this.evDriveService.sourceEventSubjectObservable.subscribe((actionEv:ActEvent)=>{
this.onActionEvent(actionEv);
});
}
ngOnDestroy(): void {
this.sub.unsubscribe();
}
onActionEvent($event: ActEvent) {
switch($event.type) {
case EmployeeActionsTypes.GET_ALL_EMPLOYEES: {
this.onGetAllEmployees();
break;
}
case EmployeeActionsTypes.SEARCH_EMPLOYEES: {
this.onSearch($event.payload);
break;
}
case EmployeeActionsTypes.NEW_EMPLOYEE: {
this.onNewEmployee();
break;
}
case EmployeeActionsTypes.EDIT_EMPLOYEE: {
this.onEdit($event.payload);
break;
}
case EmployeeActionsTypes.DELETE_EMPLOYEE: {
this.onDelete($event.payload);
break;
}
default: {
break;
}
}
}
onGetAllEmployees() {
this.employees$=this.employeesService.getAllEmployees().pipe(
map(data=>{
return ({dataState:DataStateEnum.LOADED, data:data})
}),
startWith({dataState:DataStateEnum.LOADING}),
catchError(err=>of({dataState: DataStateEnum.ERROR, errorMessage:err.message}))
);
}
onSearch(val:any) {
this.employees$=this.employeesService.searchEmployees(val.keyword).pipe(
map(data=>{
return ({dataState:DataStateEnum.LOADED, data:data})
}),
startWith({dataState:DataStateEnum.LOADING}),
catchError(err=>of({dataState: DataStateEnum.ERROR, errorMessage:err.message}))
);
}
onDelete(val:Employee) {
let v=confirm("Etes vous sûre?");
if(v==true) {
this.employeesService.deleteEmployee(val).subscribe(
data=>{
this.onGetAllEmployees();
});
}
}
onNewEmployee() {
this.router.navigateByUrl("/newEmployee");
}
onEdit(val:Employee) {
this.router.navigateByUrl("/editEmployee/"+val.id);
}
}