Skip to content

Commit 4977dff

Browse files
feat: TT-208 update ngrx delete flux
1 parent 90742ad commit 4977dff

File tree

8 files changed

+80
-51
lines changed

8 files changed

+80
-51
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
33

44
import { allActivities } from './../../store/activity-management.selectors';
55
import { ActivityState } from './../../store/activity-management.reducers';
6-
import { DeleteActivity, SetActivityToEdit } from './../../store/activity-management.actions';
6+
import { ArchiveActivity, SetActivityToEdit } from './../../store/activity-management.actions';
77
import { ActivityListComponent } from './activity-list.component';
88

99
fdescribe('ActivityListComponent', () => {
@@ -53,7 +53,7 @@ fdescribe('ActivityListComponent', () => {
5353
component.idToDelete = 'id';
5454
component.deleteActivity();
5555

56-
expect(store.dispatch).toHaveBeenCalledWith(new DeleteActivity('id'));
56+
expect(store.dispatch).toHaveBeenCalledWith(new ArchiveActivity('id'));
5757
});
5858

5959
it('updateActivity, dispatchs SetActivityToEdit action', () => {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { delay } from 'rxjs/operators';
55
import { getIsLoading } from 'src/app/modules/activities-management/store/activity-management.selectors';
66
import { Activity } from '../../../shared/models';
77
import { allActivities } from '../../store';
8-
import { DeleteActivity, LoadActivities, SetActivityToEdit, UnarchiveActivity } from './../../store/activity-management.actions';
8+
import { ArchiveActivity, LoadActivities, SetActivityToEdit, UnarchiveActivity } from './../../store/activity-management.actions';
99
import { ActivityState } from './../../store/activity-management.reducers';
1010

1111
@Component({
@@ -34,7 +34,7 @@ export class ActivityListComponent implements OnInit {
3434
}
3535

3636
deleteActivity() {
37-
this.store.dispatch(new DeleteActivity(this.idToDelete));
37+
this.store.dispatch(new ArchiveActivity(this.idToDelete));
3838
this.showModal = false;
3939
}
4040

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,24 @@ describe('LoadActivitiesSuccess', () => {
2525
expect(createActivityFail.type).toEqual(actions.ActivityManagementActionTypes.CREATE_ACTIVITY_FAIL);
2626
});
2727

28+
fit('ArchiveActivity type is ActivityManagementActionTypes.ARCHIVE_ACTIVITY', () => {
29+
const archiveActivity = new actions.ArchiveActivity('id_test');
30+
expect(archiveActivity.type).toEqual(actions.ActivityManagementActionTypes.ARCHIVE_ACTIVITY);
31+
});
32+
33+
fit('ArchiveActivitySuccess type is ActivityManagementActionTypes.ARCHIVE_ACTIVITY_SUCCESS', () => {
34+
const archiveActivitySuccess = new actions.ArchiveActivitySuccess({
35+
id: 'id_test',
36+
status: 'inactive'
37+
});
38+
expect(archiveActivitySuccess.type).toEqual(actions.ActivityManagementActionTypes.ARCHIVE_ACTIVITY_SUCCESS);
39+
});
40+
41+
fit('ArchiveActivityFail type is ActivityManagementActionTypes.ARCHIVE_ACTIVITY_FAIL', () => {
42+
const archiveActivityFail = new actions.ArchiveActivityFail('error');
43+
expect(archiveActivityFail.type).toEqual(actions.ActivityManagementActionTypes.ARCHIVE_ACTIVITY_FAIL);
44+
});
45+
2846
it('UpdateActivitySuccess type is ActivityManagementActionTypes.UPDATE_ACTIVITY_SUCCESS', () => {
2947
const updateActivitySuccess = new actions.UpdateActivitySuccess({
3048
id: '1',

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

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ 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_SUCESS',
14-
DELETE_ACTIVITY_FAIL = '[ActivityManagement] DELETE_ACTIVITY_FAIL',
12+
ARCHIVE_ACTIVITY = '[ActivityManagement] ARCHIVE_ACTIVITY',
13+
ARCHIVE_ACTIVITY_SUCCESS = '[ActivityManagement] ARCHIVE_ACTIVITY_SUCCESS',
14+
ARCHIVE_ACTIVITY_FAIL = '[ActivityManagement] ARCHIVE_ACTIVITY_FAIL',
1515
UPDATE_ACTIVITY = '[ActivityManagement] UPDATE_ACTIVITY',
1616
UPDATE_ACTIVITY_SUCCESS = '[ActivityManagement] UPDATE_ACTIVITY_SUCCESS',
1717
UPDATE_ACTIVITY_FAIL = '[ActivityManagement] UPDATE_ACTIVITY_FAIL',
@@ -56,23 +56,24 @@ export class CreateActivityFail implements Action {
5656
constructor(public error: string) { }
5757
}
5858

59-
export class DeleteActivity implements Action {
60-
public readonly type = ActivityManagementActionTypes.DELETE_ACTIVITY;
59+
export class ArchiveActivity implements Action {
60+
public readonly type = ActivityManagementActionTypes.ARCHIVE_ACTIVITY;
6161

6262
constructor(public activityId: string) { }
6363
}
6464

65-
export class DeleteActivitySuccess implements Action {
66-
public readonly type = ActivityManagementActionTypes.DELETE_ACTIVITY_SUCCESS;
65+
export class ArchiveActivitySuccess implements Action {
66+
public readonly type = ActivityManagementActionTypes.ARCHIVE_ACTIVITY_SUCCESS;
6767

68-
constructor(public activityId: string) { }
68+
constructor(public payload: Status) { }
6969
}
7070

71-
export class DeleteActivityFail implements Action {
72-
public readonly type = ActivityManagementActionTypes.DELETE_ACTIVITY_FAIL;
71+
export class ArchiveActivityFail implements Action {
72+
public readonly type = ActivityManagementActionTypes.ARCHIVE_ACTIVITY_FAIL;
7373

7474
constructor(public error: string) { }
7575
}
76+
7677
export class UpdateActivity implements Action {
7778
public readonly type = ActivityManagementActionTypes.UPDATE_ACTIVITY;
7879

@@ -124,9 +125,9 @@ export type ActivityManagementActions =
124125
| CreateActivity
125126
| CreateActivitySuccess
126127
| CreateActivityFail
127-
| DeleteActivity
128-
| DeleteActivitySuccess
129-
| DeleteActivityFail
128+
| ArchiveActivity
129+
| ArchiveActivitySuccess
130+
| ArchiveActivityFail
130131
| UpdateActivity
131132
| UpdateActivitySuccess
132133
| UpdateActivityFail

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ describe('ActivityEffects', () => {
7878
});
7979

8080
fit('action type is UNARCHIVE_ACTIVITY_SUCCESS when service is executed sucessfully', async () => {
81-
actions$ = of({ type: ActivityManagementActionTypes.UNARCHIVE_ACTIVITY, activity });
81+
const activityId = 'activityId';
82+
actions$ = of({ type: ActivityManagementActionTypes.UNARCHIVE_ACTIVITY, activityId });
8283
spyOn(service, 'updateActivity').and.returnValue(of(activity));
8384
spyOn(toastrService, 'success');
8485

@@ -121,27 +122,27 @@ describe('ActivityEffects', () => {
121122
});
122123
});
123124

124-
it('action type is DELETE_ACTIVITY_SUCCESS when service is executed sucessfully', async () => {
125+
fit('action type is ARCHIVE_ACTIVITY_SUCCESS when service is executed sucessfully', async () => {
125126
const activityId = 'activityId';
126-
actions$ = of({ type: ActivityManagementActionTypes.DELETE_ACTIVITY, activityId });
127+
actions$ = of({ type: ActivityManagementActionTypes.ARCHIVE_ACTIVITY, activityId });
127128
spyOn(service, 'deleteActivity').and.returnValue(of({}));
128129
spyOn(toastrService, 'success');
129130

130-
effects.deleteActivity$.subscribe((action) => {
131+
effects.archiveActivity$.subscribe((action) => {
131132
expect(toastrService.success).toHaveBeenCalledWith(INFO_DELETE_SUCCESSFULLY);
132-
expect(action.type).toEqual(ActivityManagementActionTypes.DELETE_ACTIVITY_SUCCESS);
133+
expect(action.type).toEqual(ActivityManagementActionTypes.ARCHIVE_ACTIVITY_SUCCESS);
133134
});
134135
});
135136

136-
it('action type is DELETE_ACTIVITY_FAIL when service fail in execution', async () => {
137+
it('action type is ARCHIVE_ACTIVITY_FAIL when service fail in execution', async () => {
137138
const activityId = 'activityId';
138-
actions$ = of({ type: ActivityManagementActionTypes.DELETE_ACTIVITY, activityId });
139+
actions$ = of({ type: ActivityManagementActionTypes.ARCHIVE_ACTIVITY, activityId });
139140
spyOn(service, 'deleteActivity').and.returnValue(throwError({ error: { message: 'fail!' } }));
140141
spyOn(toastrService, 'error');
141142

142-
effects.deleteActivity$.subscribe((action) => {
143+
effects.archiveActivity$.subscribe((action) => {
143144
expect(toastrService.error).toHaveBeenCalled();
144-
expect(action.type).toEqual(ActivityManagementActionTypes.DELETE_ACTIVITY_FAIL);
145+
expect(action.type).toEqual(ActivityManagementActionTypes.ARCHIVE_ACTIVITY_FAIL);
145146
});
146147
});
147148
});

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,21 @@ export class ActivityEffects {
5353
);
5454

5555
@Effect()
56-
deleteActivity$: Observable<Action> = this.actions$.pipe(
57-
ofType(actions.ActivityManagementActionTypes.DELETE_ACTIVITY),
58-
map((action: actions.DeleteActivity) => action.activityId),
59-
mergeMap((activityId) =>
60-
this.activityService.deleteActivity(activityId).pipe(
56+
archiveActivity$: Observable<Action> = this.actions$.pipe(
57+
ofType(actions.ActivityManagementActionTypes.ARCHIVE_ACTIVITY),
58+
map((action: actions.ArchiveActivity) => ({
59+
id: action.activityId,
60+
status: 'inactive'
61+
})),
62+
mergeMap((activity: Status) =>
63+
this.activityService.deleteActivity(activity.id).pipe(
6164
map(() => {
6265
this.toastrService.success(INFO_DELETE_SUCCESSFULLY);
63-
return new actions.DeleteActivitySuccess(activityId);
66+
return new actions.ArchiveActivitySuccess(activity);
6467
}),
6568
catchError((error) => {
6669
this.toastrService.error(error.error.message);
67-
return of(new actions.DeleteActivityFail(error));
70+
return of(new actions.ArchiveActivityFail(error));
6871
})
6972
)
7073
)

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

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,27 +56,29 @@ describe('activityManagementReducer', () => {
5656
expect(state.isLoading).toEqual(false);
5757
});
5858

59-
it('on DeleteActivity, isLoading is true', () => {
59+
fit('on ArchiveActivity, isLoading is true', () => {
6060
const activityToDeleteId = '1';
61-
const action = new actions.DeleteActivity(activityToDeleteId);
61+
const action = new actions.ArchiveActivity(activityToDeleteId);
6262

6363
const state = activityManagementReducer(initialState, action);
64-
expect(state.isLoading).toEqual(true);
64+
expect(state.isLoading).toBeTrue();
6565
});
6666

67-
it('on DeleteActivitySuccess, message equal to Activity removed successfully!', () => {
68-
const currentState: ActivityState = { data: [activity], isLoading: false, message: '', activityIdToEdit: '' };
69-
const activityToDeleteId = '1';
70-
const action = new actions.DeleteActivitySuccess(activityToDeleteId);
71-
67+
fit('on ArchiveActivitySuccess, message equal to Activity archived successfully!', () => {
68+
const currentActivity = { ...activity };
69+
currentActivity.status = 'active';
70+
const currentState: ActivityState = { data: [currentActivity], isLoading: false, message: '', activityIdToEdit: '' };
71+
const activityArchived: Status = { id: '1', status: 'inactive' };
72+
const action = new actions.ArchiveActivitySuccess(activityArchived);
7273
const state = activityManagementReducer(currentState, action);
73-
expect(state.data).toEqual([]);
74-
expect(state.message).toEqual('Activity removed successfully!');
74+
75+
expect(state.data).toEqual([activity]);
76+
expect(state.message).toEqual('Activity archived successfully!');
7577
});
7678

77-
it('on DeleteActivityFail, message equal to Something went wrong deleting activity!', () => {
79+
it('on ArchiveActivityFail, message equal to Something went wrong deleting activity!', () => {
7880
const activityToDeleteId = '1';
79-
const action = new actions.DeleteActivityFail(activityToDeleteId);
81+
const action = new actions.ArchiveActivityFail(activityToDeleteId);
8082

8183
const state = activityManagementReducer(initialState, action);
8284
expect(state.isLoading).toEqual(false);

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

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,24 +63,28 @@ export function activityManagementReducer(state: ActivityState = initialState, a
6363
};
6464
}
6565

66-
case ActivityManagementActionTypes.DELETE_ACTIVITY: {
66+
case ActivityManagementActionTypes.ARCHIVE_ACTIVITY: {
6767
return {
6868
...state,
6969
isLoading: true,
70+
message: 'Set activityIdToArchive property',
71+
activityIdToEdit: action.activityId,
7072
};
7173
}
7274

73-
case ActivityManagementActionTypes.DELETE_ACTIVITY_SUCCESS: {
74-
const activities = state.data.filter((activity) => activity.id !== action.activityId);
75+
case ActivityManagementActionTypes.ARCHIVE_ACTIVITY_SUCCESS: {
76+
const index = activityList.findIndex((activity) => activity.id === action.payload.id);
77+
activityList[index] = { ...activityList[index], ...action.payload };
78+
7579
return {
7680
...state,
77-
data: activities,
81+
data: activityList,
7882
isLoading: false,
79-
message: 'Activity removed successfully!',
83+
message: 'Activity archived successfully!',
8084
};
8185
}
8286

83-
case ActivityManagementActionTypes.DELETE_ACTIVITY_FAIL: {
87+
case ActivityManagementActionTypes.ARCHIVE_ACTIVITY_FAIL: {
8488
return {
8589
data: [],
8690
isLoading: false,

0 commit comments

Comments
 (0)