Skip to content

Commit 833aaf5

Browse files
committed
#67 delete activities
1 parent f933cea commit 833aaf5

File tree

8 files changed

+77
-3
lines changed

8 files changed

+77
-3
lines changed

src/app/modules/activities-management/components/activity-list/activity-list.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ <h2 class="mb-0">
1010
</a>
1111
<div class="btn-group float-right" role="group">
1212
<i class="far fa-edit btn btn-link text-white"></i>
13-
<i class="far fa-trash-alt btn btn-link text-white"></i>
13+
<i (click)="deleteActivity(activity.id)" class="far fa-trash-alt btn btn-link text-white"></i>
1414
</div>
1515
</h2>
1616
</div>

src/app/modules/activities-management/components/activity-list/activity-list.component.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Input, OnInit } from '@angular/core';
22
import { Component } from '@angular/core';
33
import { Store, select } from '@ngrx/store';
44

5-
import { LoadActivities } from './../../store/activity-management.actions';
5+
import { LoadActivities, DeleteActivity } from './../../store/activity-management.actions';
66
import { ActivityState } from './../../store/activity-management.reducers';
77
import { allActivities } from '../../store';
88
import { Activity } from '../../../shared/models';
@@ -27,4 +27,8 @@ export class ActivityListComponent implements OnInit {
2727
this.activities = response.data;
2828
});
2929
}
30+
31+
deleteActivity(activityId: string) {
32+
this.store.dispatch(new DeleteActivity(activityId));
33+
}
3034
}

src/app/modules/activities-management/services/activity.service.spec.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,14 @@ describe('Activity Service', () => {
5454
expect(createActivitiesRequest.request.method).toBe('POST');
5555
createActivitiesRequest.flush(activity);
5656
});
57+
58+
it('activities are delete using DELETE from baseUrl', () => {
59+
const url = `${service.baseUrl}/1`;
60+
service.deleteActivity(activities[0].id).subscribe((activitiesInResponse) => {
61+
expect(activitiesInResponse.filter((activity) => activity.id !== activities[0].id)).toEqual([activities[1]]);
62+
});
63+
const getActivitiesRequest = httpMock.expectOne(url);
64+
expect(getActivitiesRequest.request.method).toBe('DELETE');
65+
getActivitiesRequest.flush(activities);
66+
});
5767
});

src/app/modules/activities-management/services/activity.service.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,9 @@ export class ActivityService {
2525

2626
return this.http.post(this.baseUrl, body);
2727
}
28+
29+
deleteActivity(acitivityId: string): Observable<any> {
30+
const url = `${this.baseUrl}/${acitivityId}`;
31+
return this.http.delete(url);
32+
}
2833
}

src/app/modules/activities-management/store/activity-management.actions.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ export enum ActivityManagementActionTypes {
99
CREATE_ACTIVITY = '[ActivityManagement] CREATE_ACTIVITY',
1010
CREATE_ACTIVITY_SUCCESS = '[ActivityManagement] CREATE_ACTIVITY_SUCCESS',
1111
CREATE_ACTIVITY_FAIL = '[ActivityManagement] CREATE_ACTIVITY_FAIL',
12+
DELETE_ACTIVITY = '[ActivityManagement] Delete Activity',
13+
DELETE_ACTIVITY_SUCCESS = '[ActivityManagement] Delete Activity Success',
1214
}
1315

1416
export class LoadActivities implements Action {
@@ -45,10 +47,24 @@ export class CreateActivityFail implements Action {
4547
constructor(public error: string) {}
4648
}
4749

50+
export class DeleteActivity implements Action {
51+
public readonly type = ActivityManagementActionTypes.DELETE_ACTIVITY;
52+
53+
constructor(public activityId: string) {}
54+
}
55+
56+
export class DeleteActivitySuccess implements Action {
57+
public readonly type = ActivityManagementActionTypes.DELETE_ACTIVITY_SUCCESS;
58+
59+
constructor(public activityId: string) {}
60+
}
61+
4862
export type ActivityManagementActions =
4963
| LoadActivities
5064
| LoadActivitiesSuccess
5165
| LoadActivitiesFail
5266
| CreateActivity
5367
| CreateActivitySuccess
54-
| CreateActivityFail;
68+
| CreateActivityFail
69+
| DeleteActivity
70+
| DeleteActivitySuccess;

src/app/modules/activities-management/store/activity-management.effects.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { catchError, map, mergeMap } from 'rxjs/operators';
77
import * as actions from './activity-management.actions';
88
import { Activity } from './../../shared/models/activity.model';
99
import { ActivityService } from './../services/activity.service';
10+
import { ActivityManagementActionTypes, DeleteActivitySuccess } from './activity-management.actions';
1011

1112
@Injectable()
1213
export class ActivityEffects {
@@ -38,4 +39,17 @@ export class ActivityEffects {
3839
)
3940
)
4041
);
42+
43+
@Effect()
44+
deleteActivity$: Observable<Action> = this.actions$.pipe(
45+
ofType(ActivityManagementActionTypes.DELETE_ACTIVITY),
46+
map((action: actions.DeleteActivity) => action.activityId),
47+
mergeMap((activityId) =>
48+
this.activityService.deleteActivity(activityId).pipe(
49+
map(() => {
50+
return new DeleteActivitySuccess(activityId);
51+
})
52+
)
53+
)
54+
);
4155
}

src/app/modules/activities-management/store/activity-management.reducers.spec.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
CreateActivitySuccess,
66
CreateActivityFail,
77
CreateActivity,
8+
DeleteActivity,
89
} from './activity-management.actions';
910
import { LoadActivitiesSuccess } from './activity-management.actions';
1011
import { activityManagementReducer, ActivityState } from './activity-management.reducers';
@@ -63,4 +64,13 @@ describe('activityManagementReducer', () => {
6364
expect(state.message).toEqual('Something went wrong creating activities!');
6465
expect(state.isLoading).toEqual(false);
6566
});
67+
68+
it('on DeleteActivity, message equal to Activity removed successfully!', () => {
69+
const activityToDeleteId = '1';
70+
const action = new DeleteActivity(activityToDeleteId);
71+
72+
const state = activityManagementReducer(initialState, action);
73+
74+
expect(state.message).toEqual('Activity removed successfully!');
75+
});
6676
});

src/app/modules/activities-management/store/activity-management.reducers.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,21 @@ export function activityManagementReducer(state: ActivityState = initialState, a
5656
message: 'Something went wrong creating activities!',
5757
};
5858
}
59+
case ActivityManagementActionTypes.DELETE_ACTIVITY: {
60+
return {
61+
...state,
62+
message: 'Activity removed successfully!',
63+
};
64+
}
65+
66+
case ActivityManagementActionTypes.DELETE_ACTIVITY_SUCCESS: {
67+
const activites = state.data.filter((activity) => activity.id !== action.activityId);
68+
return {
69+
data: activites,
70+
isLoading: false,
71+
message: 'Activity removed successfully!',
72+
};
73+
}
5974
default:
6075
return state;
6176
}

0 commit comments

Comments
 (0)