Skip to content

Commit bcc97e7

Browse files
edgardavid2015Edgar Guaman
andauthored
TT-354 fix bug in Add new activity button (#756)
* fix: TT-354 solving bug in Add new activity button * code-smell: TT-354 Fix code smells Co-authored-by: Edgar Guaman <[email protected]>
1 parent 02cb07b commit bcc97e7

File tree

7 files changed

+36
-55
lines changed

7 files changed

+36
-55
lines changed

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
@@ -1,4 +1,4 @@
1-
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
1+
import { Component, EventEmitter, OnInit, Output } from '@angular/core';
22
import { select, Store } from '@ngrx/store';
33
import { Observable } from 'rxjs';
44
import { delay, map } from 'rxjs/operators';
@@ -14,8 +14,8 @@ import { ActivityState } from './../../store/activity-management.reducers';
1414
styleUrls: ['./activity-list.component.scss'],
1515
})
1616
export class ActivityListComponent implements OnInit {
17-
@Input() showActivityForm: boolean;
1817
@Output() changeValueShowActivityForm = new EventEmitter<boolean>();
18+
showActivityForm: boolean;
1919

2020
constructor(private store: Store<ActivityState>) {
2121
this.isLoading$ = store.pipe(delay(0), select(getIsLoading));

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
<div>
2-
<form [formGroup]="activityForm" (ngSubmit)="onSubmit(activityForm.value)">
2+
<div class="row">
3+
<div style="padding: 15px;">
4+
<button (click)="activateActivityForm()" class="btn btn-primary">Add new activity</button>
5+
</div>
6+
</div>
7+
<form *ngIf="showActivityForm" [formGroup]="activityForm" (ngSubmit)="onSubmit(activityForm.value)">
38
<div class="form-group">
49
<label>Name:</label>
510
<div>

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
activityIdToEdit,
1111
allActivities,
1212
ResetActivityToEdit,
13+
SetActivityToEdit,
1314
} from '../../store';
1415
import { getActivityById } from '../../store/activity-management.selectors';
1516
import { Activity } from 'src/app/modules/shared/models';
@@ -151,4 +152,12 @@ describe('CreateActivityComponent', () => {
151152
expect(store.dispatch).toHaveBeenCalledTimes(1);
152153
expect(store.dispatch).toHaveBeenCalledWith(new ResetActivityToEdit());
153154
});
155+
156+
it('should dispatch an action on activateActivityForm', () => {
157+
spyOn(store, 'dispatch');
158+
159+
component.activateActivityForm();
160+
161+
expect(store.dispatch).toHaveBeenCalledWith(new SetActivityToEdit(null));
162+
});
154163
});

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
import { FormBuilder, Validators, FormGroup } from '@angular/forms';
2-
import { Component, EventEmitter, OnInit, Output } from '@angular/core';
2+
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
33
import { Store, select } from '@ngrx/store';
44
import { Activity } from '../../../shared/models';
55
import { ActivityState } from './../../store/activity-management.reducers';
6-
import { CreateActivity, UpdateActivity, getActivityById, ResetActivityToEdit } from '../../store';
6+
import { CreateActivity, UpdateActivity, getActivityById, ResetActivityToEdit, SetActivityToEdit } from '../../store';
77

88
@Component({
99
selector: 'app-create-activity',
1010
templateUrl: './create-activity.component.html',
1111
styleUrls: ['./create-activity.component.scss'],
1212
})
1313
export class CreateActivityComponent implements OnInit {
14-
@Output() closeActivityForm = new EventEmitter<boolean>();
14+
@Input() showActivityForm: boolean;
15+
@Output() changeValueShowActivityForm = new EventEmitter<boolean>();
1516
activityForm: FormGroup;
1617
activityToEdit: Activity;
1718
constructor(private formBuilder: FormBuilder, private store: Store<ActivityState>) {
@@ -59,12 +60,20 @@ export class CreateActivityComponent implements OnInit {
5960
this.store.dispatch(new CreateActivity(activityData));
6061
this.activityForm.get('description').setValue('');
6162
}
62-
this.closeActivityForm.emit(false);
63+
this.showActivityForm = false;
64+
this.changeValueShowActivityForm.emit(this.showActivityForm);
6365
}
6466

6567
cancelButton() {
6668
this.activityForm.reset();
6769
this.store.dispatch(new ResetActivityToEdit());
68-
this.closeActivityForm.emit(false);
70+
this.showActivityForm = false;
71+
this.changeValueShowActivityForm.emit(this.showActivityForm);
72+
}
73+
74+
activateActivityForm() {
75+
this.store.dispatch(new SetActivityToEdit(null));
76+
this.showActivityForm = true;
77+
this.activityForm.reset();
6978
}
7079
}

src/app/modules/activities-management/pages/activities-management.component.html

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
<div class="col-12 col-md-9 px-0">
2-
<div class="row">
3-
<div style="padding: 15px;">
4-
<button (click)="activateActivityForm()" class="btn btn-primary">Add new Activity</button>
5-
</div>
6-
</div>
7-
<div *ngIf="showActivityForm">
2+
<div>
83
<app-create-activity
9-
(closeActivityForm)="closeFormActivity($event)"></app-create-activity>
4+
[showActivityForm]="showActivityForm" (changeValueShowActivityForm)="showActivityForm = $event"></app-create-activity>
105
</div>
116
<app-activity-list
127
(changeValueShowActivityForm)="showActivityForm = $event"></app-activity-list>
Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,24 @@
11
import { waitForAsync, TestBed, ComponentFixture } from '@angular/core/testing';
2-
import { MockStore, provideMockStore } from '@ngrx/store/testing';
32
import { ActivitiesManagementComponent } from './activities-management.component';
4-
import { SetActivityToEdit } from '../store';
5-
import { Activity } from '../../shared/models';
63

74
describe('ActivitiesManagementComponent', () => {
85
let component: ActivitiesManagementComponent;
96
let fixture: ComponentFixture<ActivitiesManagementComponent>;
10-
let store: MockStore<Activity>;
117

128
beforeEach(waitForAsync(() => {
139
TestBed.configureTestingModule({
1410
imports: [],
15-
declarations: [ActivitiesManagementComponent],
16-
providers: [provideMockStore({ initialState: {} })],
11+
declarations: [ActivitiesManagementComponent]
1712
}).compileComponents();
1813
}));
1914

2015
beforeEach(() => {
2116
fixture = TestBed.createComponent(ActivitiesManagementComponent);
2217
component = fixture.componentInstance;
2318
fixture.detectChanges();
24-
store = TestBed.inject(MockStore);
2519
});
2620

2721
it('should create the component', () => {
2822
expect(component).toBeTruthy();
2923
});
30-
31-
it('should dispatch an action on activateActivityForm', () => {
32-
spyOn(store, 'dispatch');
33-
34-
component.activateActivityForm();
35-
36-
expect(store.dispatch).toHaveBeenCalledWith(new SetActivityToEdit(null));
37-
});
38-
39-
it('should call closeActivityForm function', () => {
40-
component.closeFormActivity(false);
41-
42-
expect(component.showActivityForm).toBe(false);
43-
});
44-
45-
4624
});
Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,9 @@
1-
import { Component, EventEmitter, Output } from '@angular/core';
2-
import { Store } from '@ngrx/store';
3-
import { Activity } from '../../shared/models';
4-
import { SetActivityToEdit } from '../store';
5-
1+
import { Component, Input } from '@angular/core';
62
@Component({
73
selector: 'app-activities-management',
84
templateUrl: './activities-management.component.html',
95
styleUrls: ['./activities-management.component.scss'],
106
})
117
export class ActivitiesManagementComponent {
12-
@Output() closeActivityForm = new EventEmitter<boolean>();
13-
showActivityForm = false;
14-
constructor(private store: Store<Activity>) {}
15-
16-
activateActivityForm() {
17-
this.store.dispatch(new SetActivityToEdit(null));
18-
this.showActivityForm = true;
19-
}
20-
21-
closeFormActivity(event) {
22-
this.showActivityForm = event;
23-
}
8+
@Input() showActivityForm: boolean;
249
}

0 commit comments

Comments
 (0)