From 833aaf5b0a8c3b82a8f92f4e01467aecf5f8df44 Mon Sep 17 00:00:00 2001 From: daros10 Date: Tue, 7 Apr 2020 13:35:07 -0500 Subject: [PATCH 1/6] #67 delete activities --- .../activity-list/activity-list.component.html | 2 +- .../activity-list/activity-list.component.ts | 6 +++++- .../services/activity.service.spec.ts | 10 ++++++++++ .../services/activity.service.ts | 5 +++++ .../store/activity-management.actions.ts | 18 +++++++++++++++++- .../store/activity-management.effects.ts | 14 ++++++++++++++ .../store/activity-management.reducers.spec.ts | 10 ++++++++++ .../store/activity-management.reducers.ts | 15 +++++++++++++++ 8 files changed, 77 insertions(+), 3 deletions(-) diff --git a/src/app/modules/activities-management/components/activity-list/activity-list.component.html b/src/app/modules/activities-management/components/activity-list/activity-list.component.html index 22d535f0b..f9ebe5a7c 100644 --- a/src/app/modules/activities-management/components/activity-list/activity-list.component.html +++ b/src/app/modules/activities-management/components/activity-list/activity-list.component.html @@ -10,7 +10,7 @@

- +

diff --git a/src/app/modules/activities-management/components/activity-list/activity-list.component.ts b/src/app/modules/activities-management/components/activity-list/activity-list.component.ts index ff0f3e7de..9eca19df5 100644 --- a/src/app/modules/activities-management/components/activity-list/activity-list.component.ts +++ b/src/app/modules/activities-management/components/activity-list/activity-list.component.ts @@ -2,7 +2,7 @@ import { Input, OnInit } from '@angular/core'; import { Component } from '@angular/core'; import { Store, select } from '@ngrx/store'; -import { LoadActivities } from './../../store/activity-management.actions'; +import { LoadActivities, DeleteActivity } from './../../store/activity-management.actions'; import { ActivityState } from './../../store/activity-management.reducers'; import { allActivities } from '../../store'; import { Activity } from '../../../shared/models'; @@ -27,4 +27,8 @@ export class ActivityListComponent implements OnInit { this.activities = response.data; }); } + + deleteActivity(activityId: string) { + this.store.dispatch(new DeleteActivity(activityId)); + } } diff --git a/src/app/modules/activities-management/services/activity.service.spec.ts b/src/app/modules/activities-management/services/activity.service.spec.ts index 63898c3df..06e963b91 100644 --- a/src/app/modules/activities-management/services/activity.service.spec.ts +++ b/src/app/modules/activities-management/services/activity.service.spec.ts @@ -54,4 +54,14 @@ describe('Activity Service', () => { expect(createActivitiesRequest.request.method).toBe('POST'); createActivitiesRequest.flush(activity); }); + + it('activities are delete using DELETE from baseUrl', () => { + const url = `${service.baseUrl}/1`; + service.deleteActivity(activities[0].id).subscribe((activitiesInResponse) => { + expect(activitiesInResponse.filter((activity) => activity.id !== activities[0].id)).toEqual([activities[1]]); + }); + const getActivitiesRequest = httpMock.expectOne(url); + expect(getActivitiesRequest.request.method).toBe('DELETE'); + getActivitiesRequest.flush(activities); + }); }); diff --git a/src/app/modules/activities-management/services/activity.service.ts b/src/app/modules/activities-management/services/activity.service.ts index 651fcff60..749854a36 100644 --- a/src/app/modules/activities-management/services/activity.service.ts +++ b/src/app/modules/activities-management/services/activity.service.ts @@ -25,4 +25,9 @@ export class ActivityService { return this.http.post(this.baseUrl, body); } + + deleteActivity(acitivityId: string): Observable { + const url = `${this.baseUrl}/${acitivityId}`; + return this.http.delete(url); + } } diff --git a/src/app/modules/activities-management/store/activity-management.actions.ts b/src/app/modules/activities-management/store/activity-management.actions.ts index 370787d83..d44389e23 100644 --- a/src/app/modules/activities-management/store/activity-management.actions.ts +++ b/src/app/modules/activities-management/store/activity-management.actions.ts @@ -9,6 +9,8 @@ export enum ActivityManagementActionTypes { CREATE_ACTIVITY = '[ActivityManagement] CREATE_ACTIVITY', CREATE_ACTIVITY_SUCCESS = '[ActivityManagement] CREATE_ACTIVITY_SUCCESS', CREATE_ACTIVITY_FAIL = '[ActivityManagement] CREATE_ACTIVITY_FAIL', + DELETE_ACTIVITY = '[ActivityManagement] Delete Activity', + DELETE_ACTIVITY_SUCCESS = '[ActivityManagement] Delete Activity Success', } export class LoadActivities implements Action { @@ -45,10 +47,24 @@ export class CreateActivityFail implements Action { constructor(public error: string) {} } +export class DeleteActivity implements Action { + public readonly type = ActivityManagementActionTypes.DELETE_ACTIVITY; + + constructor(public activityId: string) {} +} + +export class DeleteActivitySuccess implements Action { + public readonly type = ActivityManagementActionTypes.DELETE_ACTIVITY_SUCCESS; + + constructor(public activityId: string) {} +} + export type ActivityManagementActions = | LoadActivities | LoadActivitiesSuccess | LoadActivitiesFail | CreateActivity | CreateActivitySuccess - | CreateActivityFail; + | CreateActivityFail + | DeleteActivity + | DeleteActivitySuccess; diff --git a/src/app/modules/activities-management/store/activity-management.effects.ts b/src/app/modules/activities-management/store/activity-management.effects.ts index ba1ba54aa..b87468b49 100644 --- a/src/app/modules/activities-management/store/activity-management.effects.ts +++ b/src/app/modules/activities-management/store/activity-management.effects.ts @@ -7,6 +7,7 @@ import { catchError, map, mergeMap } from 'rxjs/operators'; import * as actions from './activity-management.actions'; import { Activity } from './../../shared/models/activity.model'; import { ActivityService } from './../services/activity.service'; +import { ActivityManagementActionTypes, DeleteActivitySuccess } from './activity-management.actions'; @Injectable() export class ActivityEffects { @@ -38,4 +39,17 @@ export class ActivityEffects { ) ) ); + + @Effect() + deleteActivity$: Observable = this.actions$.pipe( + ofType(ActivityManagementActionTypes.DELETE_ACTIVITY), + map((action: actions.DeleteActivity) => action.activityId), + mergeMap((activityId) => + this.activityService.deleteActivity(activityId).pipe( + map(() => { + return new DeleteActivitySuccess(activityId); + }) + ) + ) + ); } diff --git a/src/app/modules/activities-management/store/activity-management.reducers.spec.ts b/src/app/modules/activities-management/store/activity-management.reducers.spec.ts index ada9b0867..76034cd3d 100644 --- a/src/app/modules/activities-management/store/activity-management.reducers.spec.ts +++ b/src/app/modules/activities-management/store/activity-management.reducers.spec.ts @@ -5,6 +5,7 @@ import { CreateActivitySuccess, CreateActivityFail, CreateActivity, + DeleteActivity, } from './activity-management.actions'; import { LoadActivitiesSuccess } from './activity-management.actions'; import { activityManagementReducer, ActivityState } from './activity-management.reducers'; @@ -63,4 +64,13 @@ describe('activityManagementReducer', () => { expect(state.message).toEqual('Something went wrong creating activities!'); expect(state.isLoading).toEqual(false); }); + + it('on DeleteActivity, message equal to Activity removed successfully!', () => { + const activityToDeleteId = '1'; + const action = new DeleteActivity(activityToDeleteId); + + const state = activityManagementReducer(initialState, action); + + expect(state.message).toEqual('Activity removed successfully!'); + }); }); diff --git a/src/app/modules/activities-management/store/activity-management.reducers.ts b/src/app/modules/activities-management/store/activity-management.reducers.ts index 4be6a8b1c..57f25b9d2 100644 --- a/src/app/modules/activities-management/store/activity-management.reducers.ts +++ b/src/app/modules/activities-management/store/activity-management.reducers.ts @@ -56,6 +56,21 @@ export function activityManagementReducer(state: ActivityState = initialState, a message: 'Something went wrong creating activities!', }; } + case ActivityManagementActionTypes.DELETE_ACTIVITY: { + return { + ...state, + message: 'Activity removed successfully!', + }; + } + + case ActivityManagementActionTypes.DELETE_ACTIVITY_SUCCESS: { + const activites = state.data.filter((activity) => activity.id !== action.activityId); + return { + data: activites, + isLoading: false, + message: 'Activity removed successfully!', + }; + } default: return state; } From 001a70d52b8cb836470205a6c21f9063f9a54a30 Mon Sep 17 00:00:00 2001 From: daros10 Date: Tue, 7 Apr 2020 14:11:11 -0500 Subject: [PATCH 2/6] #67 remove imports and added delete activity failed --- .../store/activity-management.actions.ts | 10 +++++++++- .../store/activity-management.effects.ts | 8 ++++---- .../store/activity-management.reducers.ts | 9 +++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/app/modules/activities-management/store/activity-management.actions.ts b/src/app/modules/activities-management/store/activity-management.actions.ts index d44389e23..fd4d091cc 100644 --- a/src/app/modules/activities-management/store/activity-management.actions.ts +++ b/src/app/modules/activities-management/store/activity-management.actions.ts @@ -11,6 +11,7 @@ export enum ActivityManagementActionTypes { CREATE_ACTIVITY_FAIL = '[ActivityManagement] CREATE_ACTIVITY_FAIL', DELETE_ACTIVITY = '[ActivityManagement] Delete Activity', DELETE_ACTIVITY_SUCCESS = '[ActivityManagement] Delete Activity Success', + DELETE_ACTIVITY_FAIL = '[ActivityManagement] Delete Activity Fail', } export class LoadActivities implements Action { @@ -59,6 +60,12 @@ export class DeleteActivitySuccess implements Action { constructor(public activityId: string) {} } +export class DeleteActivityFail implements Action { + public readonly type = ActivityManagementActionTypes.DELETE_ACTIVITY_FAIL; + + constructor(public error: string) {} +} + export type ActivityManagementActions = | LoadActivities | LoadActivitiesSuccess @@ -67,4 +74,5 @@ export type ActivityManagementActions = | CreateActivitySuccess | CreateActivityFail | DeleteActivity - | DeleteActivitySuccess; + | DeleteActivitySuccess + | DeleteActivityFail; diff --git a/src/app/modules/activities-management/store/activity-management.effects.ts b/src/app/modules/activities-management/store/activity-management.effects.ts index b87468b49..885511745 100644 --- a/src/app/modules/activities-management/store/activity-management.effects.ts +++ b/src/app/modules/activities-management/store/activity-management.effects.ts @@ -7,7 +7,6 @@ import { catchError, map, mergeMap } from 'rxjs/operators'; import * as actions from './activity-management.actions'; import { Activity } from './../../shared/models/activity.model'; import { ActivityService } from './../services/activity.service'; -import { ActivityManagementActionTypes, DeleteActivitySuccess } from './activity-management.actions'; @Injectable() export class ActivityEffects { @@ -42,13 +41,14 @@ export class ActivityEffects { @Effect() deleteActivity$: Observable = this.actions$.pipe( - ofType(ActivityManagementActionTypes.DELETE_ACTIVITY), + ofType(actions.ActivityManagementActionTypes.DELETE_ACTIVITY), map((action: actions.DeleteActivity) => action.activityId), mergeMap((activityId) => this.activityService.deleteActivity(activityId).pipe( map(() => { - return new DeleteActivitySuccess(activityId); - }) + return new actions.DeleteActivitySuccess(activityId); + }), + catchError((error) => of(new actions.DeleteActivityFail(error))) ) ) ); diff --git a/src/app/modules/activities-management/store/activity-management.reducers.ts b/src/app/modules/activities-management/store/activity-management.reducers.ts index 57f25b9d2..3a62cdf22 100644 --- a/src/app/modules/activities-management/store/activity-management.reducers.ts +++ b/src/app/modules/activities-management/store/activity-management.reducers.ts @@ -59,6 +59,7 @@ export function activityManagementReducer(state: ActivityState = initialState, a case ActivityManagementActionTypes.DELETE_ACTIVITY: { return { ...state, + isLoading: true, message: 'Activity removed successfully!', }; } @@ -71,6 +72,14 @@ export function activityManagementReducer(state: ActivityState = initialState, a message: 'Activity removed successfully!', }; } + + case ActivityManagementActionTypes.DELETE_ACTIVITY_FAIL: { + return { + data: [], + isLoading: false, + message: 'Something went wrong creating activities!', + }; + } default: return state; } From 6b9ef0b92065a325bf92e8b3ef53c4939f8004fc Mon Sep 17 00:00:00 2001 From: daros10 Date: Tue, 7 Apr 2020 14:18:19 -0500 Subject: [PATCH 3/6] #67 upercase in actions --- .../store/activity-management.actions.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/modules/activities-management/store/activity-management.actions.ts b/src/app/modules/activities-management/store/activity-management.actions.ts index fd4d091cc..c467c6998 100644 --- a/src/app/modules/activities-management/store/activity-management.actions.ts +++ b/src/app/modules/activities-management/store/activity-management.actions.ts @@ -9,9 +9,9 @@ export enum ActivityManagementActionTypes { CREATE_ACTIVITY = '[ActivityManagement] CREATE_ACTIVITY', CREATE_ACTIVITY_SUCCESS = '[ActivityManagement] CREATE_ACTIVITY_SUCCESS', CREATE_ACTIVITY_FAIL = '[ActivityManagement] CREATE_ACTIVITY_FAIL', - DELETE_ACTIVITY = '[ActivityManagement] Delete Activity', - DELETE_ACTIVITY_SUCCESS = '[ActivityManagement] Delete Activity Success', - DELETE_ACTIVITY_FAIL = '[ActivityManagement] Delete Activity Fail', + DELETE_ACTIVITY = '[ActivityManagement] DELETE_ACTIVITY', + DELETE_ACTIVITY_SUCCESS = '[ActivityManagement] DELETE_ACTIVITY_SUCESS', + DELETE_ACTIVITY_FAIL = '[ActivityManagement] DELETE_ACTIVITY_FAIL', } export class LoadActivities implements Action { From 14e25b8f2cedc499a25ad6ef78817edef7d52c49 Mon Sep 17 00:00:00 2001 From: daros10 Date: Tue, 7 Apr 2020 15:23:44 -0500 Subject: [PATCH 4/6] #67 fixed message --- .../store/activity-management.reducers.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/modules/activities-management/store/activity-management.reducers.ts b/src/app/modules/activities-management/store/activity-management.reducers.ts index 3a62cdf22..7150cf7be 100644 --- a/src/app/modules/activities-management/store/activity-management.reducers.ts +++ b/src/app/modules/activities-management/store/activity-management.reducers.ts @@ -60,7 +60,6 @@ export function activityManagementReducer(state: ActivityState = initialState, a return { ...state, isLoading: true, - message: 'Activity removed successfully!', }; } @@ -77,7 +76,7 @@ export function activityManagementReducer(state: ActivityState = initialState, a return { data: [], isLoading: false, - message: 'Something went wrong creating activities!', + message: 'Something went wrong deleting activity!', }; } default: From 2d40594e275f357c69164697c70ae1f4f29cfe51 Mon Sep 17 00:00:00 2001 From: daros10 Date: Tue, 7 Apr 2020 15:37:28 -0500 Subject: [PATCH 5/6] #67 added import in tests --- .../store/activity-management.reducers.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/modules/activities-management/store/activity-management.reducers.spec.ts b/src/app/modules/activities-management/store/activity-management.reducers.spec.ts index 76034cd3d..3df6fd72c 100644 --- a/src/app/modules/activities-management/store/activity-management.reducers.spec.ts +++ b/src/app/modules/activities-management/store/activity-management.reducers.spec.ts @@ -6,6 +6,7 @@ import { CreateActivityFail, CreateActivity, DeleteActivity, + DeleteActivitySuccess, } from './activity-management.actions'; import { LoadActivitiesSuccess } from './activity-management.actions'; import { activityManagementReducer, ActivityState } from './activity-management.reducers'; From e330c6c104e65769e9bd4fac11c940ebd74ee65a Mon Sep 17 00:00:00 2001 From: daros10 Date: Tue, 7 Apr 2020 15:47:50 -0500 Subject: [PATCH 6/6] Update activity-management.reducers.spec.ts --- .../store/activity-management.reducers.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/modules/activities-management/store/activity-management.reducers.spec.ts b/src/app/modules/activities-management/store/activity-management.reducers.spec.ts index 3df6fd72c..fcf31606d 100644 --- a/src/app/modules/activities-management/store/activity-management.reducers.spec.ts +++ b/src/app/modules/activities-management/store/activity-management.reducers.spec.ts @@ -68,7 +68,7 @@ describe('activityManagementReducer', () => { it('on DeleteActivity, message equal to Activity removed successfully!', () => { const activityToDeleteId = '1'; - const action = new DeleteActivity(activityToDeleteId); + const action = new DeleteActivitySuccess(activityToDeleteId); const state = activityManagementReducer(initialState, action);