diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 2f1de14..3b2349d 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -4,6 +4,7 @@ import { HttpClientModule } from '@angular/common/http';
import { StoreModule } from '@ngrx/store';
import { EffectsModule } from '@ngrx/effects';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
@@ -19,8 +20,8 @@ import { ItemComponent } from './components/employees/list/item/item.component';
AppComponent,
EmployeesComponent,
NavBarComponent,
- ListComponent,
- ItemComponent
+ ListComponent,
+ ItemComponent
],
imports: [
BrowserModule,
@@ -28,7 +29,9 @@ import { ItemComponent } from './components/employees/list/item/item.component';
HttpClientModule,
StoreModule.forRoot({catalogState:employeesReducer}),
EffectsModule.forRoot([EmployeesEffects]),
- StoreDevtoolsModule.instrument()
+ StoreDevtoolsModule.instrument(),
+ FormsModule,
+ ReactiveFormsModule
],
providers: [],
bootstrap: [AppComponent]
diff --git a/src/app/components/employees/nav-bar/nav-bar.component.html b/src/app/components/employees/nav-bar/nav-bar.component.html
index 102d2db..d40ad5b 100644
--- a/src/app/components/employees/nav-bar/nav-bar.component.html
+++ b/src/app/components/employees/nav-bar/nav-bar.component.html
@@ -1,5 +1,20 @@
-
- -
-
+
diff --git a/src/app/components/employees/nav-bar/nav-bar.component.ts b/src/app/components/employees/nav-bar/nav-bar.component.ts
index 89f7627..8f7a1f2 100644
--- a/src/app/components/employees/nav-bar/nav-bar.component.ts
+++ b/src/app/components/employees/nav-bar/nav-bar.component.ts
@@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { Store } from '@ngrx/store';
-import { GetAllEmployeesAction } from '../../../ngrx/employees.actions';
+import { GetAllEmployeesAction, SearchEmployeesAction } from '../../../ngrx/employees.actions';
@Component({
selector: 'app-nav-bar',
@@ -17,4 +17,8 @@ export class NavBarComponent implements OnInit {
onGetAllEmployees() {
this.store.dispatch(new GetAllEmployeesAction({}))
}
+
+ onSearch(val:any) {
+ this.store.dispatch(new SearchEmployeesAction(val.keyword))
+ }
}
diff --git a/src/app/ngrx/employees.actions.ts b/src/app/ngrx/employees.actions.ts
index 5d503f4..6984b13 100644
--- a/src/app/ngrx/employees.actions.ts
+++ b/src/app/ngrx/employees.actions.ts
@@ -5,27 +5,41 @@ export enum EmployeesActionsTypes {
GET_ALL_EMPLOYEES="[Employees] Get All Employees",
GET_ALL_EMPLOYEES_SUCCESS="[Employees] Get All Employees Success",
GET_ALL_EMPLOYEES_ERROR="[Employees] Get All Employees Error",
+ /* Search employees */
+ SEARCH_EMPLOYEES="[Employees] Search Employees",
+ SEARCH_EMPLOYEES_SUCCESS="[Employees] Search Success",
+ SEARCH_EMPLOYEES_ERROR="[Employees] Search Employees Error",
}
export class GetAllEmployeesAction implements Action {
type: EmployeesActionsTypes=EmployeesActionsTypes.GET_ALL_EMPLOYEES;
- constructor(public payload:any) {
- }
-
+ constructor(public payload:any) {}
}
export class GetAllEmployeesActionSuccess implements Action {
type: EmployeesActionsTypes=EmployeesActionsTypes.GET_ALL_EMPLOYEES_SUCCESS;
- constructor(public payload:Employee[]) {
- }
-
+ constructor(public payload:Employee[]) {}
}
export class GetAllEmployeesActionError implements Action {
type: EmployeesActionsTypes=EmployeesActionsTypes.GET_ALL_EMPLOYEES_ERROR;
- constructor(public payload:string) {
- }
-
+ constructor(public payload:string) {}
}
-export type EmployeesActions=GetAllEmployeesAction | GetAllEmployeesActionSuccess | GetAllEmployeesActionError;
+export class SearchEmployeesAction implements Action {
+ type: EmployeesActionsTypes=EmployeesActionsTypes.SEARCH_EMPLOYEES;
+ constructor(public payload:string) {}
+}
+
+export class SearchEmployeesActionSuccess implements Action {
+ type: EmployeesActionsTypes=EmployeesActionsTypes.SEARCH_EMPLOYEES_SUCCESS;
+ constructor(public payload:Employee[]) {}
+}
+
+export class SearchEmployeesActionError implements Action {
+ type: EmployeesActionsTypes=EmployeesActionsTypes.SEARCH_EMPLOYEES_ERROR;
+ constructor(public payload:string) {}
+}
+
+export type EmployeesActions=GetAllEmployeesAction | GetAllEmployeesActionSuccess | GetAllEmployeesActionError |
+ SearchEmployeesAction | SearchEmployeesActionSuccess | SearchEmployeesActionError;
diff --git a/src/app/ngrx/employees.effects.ts b/src/app/ngrx/employees.effects.ts
index cd85331..db45828 100644
--- a/src/app/ngrx/employees.effects.ts
+++ b/src/app/ngrx/employees.effects.ts
@@ -3,15 +3,15 @@ import { EmployeesService } from '../services/employees.service';
import { createEffect, Actions, ofType } from '@ngrx/effects';
import { Observable, of, EMPTY } from 'rxjs';
import { Action } from '@ngrx/store';
-import { EmployeesActionsTypes } from './employees.actions';
+import { EmployeesActionsTypes, EmployeesActions } from './employees.actions';
import { mergeMap, map, catchError } from 'rxjs/operators';
-import { GetAllEmployeesActionSuccess, GetAllEmployeesActionError } from './employees.actions';
+import { GetAllEmployeesActionSuccess, GetAllEmployeesActionError, SearchEmployeesActionSuccess, SearchEmployeesActionError } from './employees.actions';
@Injectable()
export class EmployeesEffects {
- getAllEmployeesEffect$:Observable = createEffect(() => this.actions$.pipe(
+ getAllEmployeesEffect$:Observable = createEffect(() => this.actions$.pipe(
ofType(EmployeesActionsTypes.GET_ALL_EMPLOYEES),
- mergeMap((action) => {
+ mergeMap((action:EmployeesActions) => {
return this.employeesService.getAllEmployees().pipe(
map(employees => new GetAllEmployeesActionSuccess(employees)),
catchError((err) => of(new GetAllEmployeesActionError(err.message)))
@@ -19,6 +19,16 @@ export class EmployeesEffects {
})
));
+ searchEmployeesEffect$:Observable = createEffect(() => this.actions$.pipe(
+ ofType(EmployeesActionsTypes.SEARCH_EMPLOYEES),
+ mergeMap((action:EmployeesActions) => {
+ return this.employeesService.searchEmployees(action.payload).pipe(
+ map(employees => new SearchEmployeesActionSuccess(employees)),
+ catchError((err) => of(new SearchEmployeesActionError(err.message)))
+ )
+ })
+ ));
+
constructor(
private employeesService:EmployeesService,
private actions$:Actions
diff --git a/src/app/ngrx/employees.reducer.ts b/src/app/ngrx/employees.reducer.ts
index fe0983f..01a63b9 100644
--- a/src/app/ngrx/employees.reducer.ts
+++ b/src/app/ngrx/employees.reducer.ts
@@ -29,6 +29,13 @@ export function employeesReducer(state:EmployeesState=initState, action:Action):
return {...state, dataState:EmployeesStateEnum.LOADED, employees:(action).payload};
case EmployeesActionsTypes.GET_ALL_EMPLOYEES_ERROR:
return {...state, dataState:EmployeesStateEnum.ERROR, errorMessage:(action).payload};
+ /* Search Employees */
+ case EmployeesActionsTypes.SEARCH_EMPLOYEES:
+ return {...state, dataState:EmployeesStateEnum.LOADING};
+ case EmployeesActionsTypes.SEARCH_EMPLOYEES_SUCCESS:
+ return {...state, dataState:EmployeesStateEnum.LOADED, employees:(action).payload};
+ case EmployeesActionsTypes.SEARCH_EMPLOYEES_ERROR:
+ return {...state, dataState:EmployeesStateEnum.ERROR, errorMessage:(action).payload};
default:
return {...state}
}