99 lines
2.7 KiB
TypeScript
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);
|
|
}
|
|
}
|