Skip to content

Commit 2461f61

Browse files
edgardavid2015Edgar Guaman
andauthored
feat: TT-337 "Add new activity button" implementation (#754)
* code-smell: TT-337 Deleting unused variables and fixing code smells * feat: TT-337 Add new activity button implementation * code-smell: TT-337 Fixing code smells Co-authored-by: Edgar Guaman <[email protected]>
1 parent 824744e commit 2461f61

File tree

6 files changed

+62
-13
lines changed

6 files changed

+62
-13
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, OnInit } from '@angular/core';
1+
import { Component, EventEmitter, Input, 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,6 +14,9 @@ import { ActivityState } from './../../store/activity-management.reducers';
1414
styleUrls: ['./activity-list.component.scss'],
1515
})
1616
export class ActivityListComponent implements OnInit {
17+
@Input() showActivityForm: boolean;
18+
@Output() changeValueShowActivityForm = new EventEmitter<boolean>();
19+
1720
constructor(private store: Store<ActivityState>) {
1821
this.isLoading$ = store.pipe(delay(0), select(getIsLoading));
1922
}
@@ -66,6 +69,8 @@ export class ActivityListComponent implements OnInit {
6669

6770
updateActivity(activityId: string): void {
6871
this.store.dispatch(new SetActivityToEdit(activityId));
72+
this.showActivityForm = true;
73+
this.changeValueShowActivityForm.emit(this.showActivityForm);
6974
}
7075

7176
unarchiveActivity(): void {

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
<h4>Activities</h4>
2-
<hr/>
31
<div>
4-
52
<form [formGroup]="activityForm" (ngSubmit)="onSubmit(activityForm.value)">
63
<div class="form-group">
74
<label>Name:</label>
@@ -21,7 +18,7 @@ <h4>Activities</h4>
2118

2219
<div class="form-group" style="text-align: right;">
2320
<button class="btn btn-primary" type="submit" [disabled]="!activityForm.valid">Save</button>
24-
<button class="btn btn-secondary mb-2 ml-2 mt-2" type="reset" [hidden]="!activityToEdit" (click)="cancelButton()">
21+
<button class="btn btn-secondary mb-2 ml-2 mt-2" type="button" (click)="cancelButton()">
2522
Cancel
2623
</button>
2724
</div>

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { FormBuilder, Validators, FormGroup } from '@angular/forms';
2-
import { Component, OnInit } from '@angular/core';
2+
import { Component, EventEmitter, OnInit, Output } from '@angular/core';
33
import { Store, select } from '@ngrx/store';
4-
54
import { Activity } from '../../../shared/models';
65
import { ActivityState } from './../../store/activity-management.reducers';
76
import { CreateActivity, UpdateActivity, getActivityById, ResetActivityToEdit } from '../../store';
@@ -12,9 +11,9 @@ import { CreateActivity, UpdateActivity, getActivityById, ResetActivityToEdit }
1211
styleUrls: ['./create-activity.component.scss'],
1312
})
1413
export class CreateActivityComponent implements OnInit {
14+
@Output() closeActivityForm = new EventEmitter<boolean>();
1515
activityForm: FormGroup;
1616
activityToEdit: Activity;
17-
1817
constructor(private formBuilder: FormBuilder, private store: Store<ActivityState>) {
1918
this.activityForm = this.formBuilder.group({
2019
name: ['', Validators.required],
@@ -60,9 +59,12 @@ export class CreateActivityComponent implements OnInit {
6059
this.store.dispatch(new CreateActivity(activityData));
6160
this.activityForm.get('description').setValue('');
6261
}
62+
this.closeActivityForm.emit(false);
6363
}
6464

6565
cancelButton() {
66+
this.activityForm.reset();
6667
this.store.dispatch(new ResetActivityToEdit());
68+
this.closeActivityForm.emit(false);
6769
}
6870
}
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
<div class="col-12 col-md-9 px-0">
2-
<app-create-activity></app-create-activity>
3-
<app-activity-list></app-activity-list>
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">
8+
<app-create-activity
9+
(closeActivityForm)="closeFormActivity($event)"></app-create-activity>
10+
</div>
11+
<app-activity-list
12+
(changeValueShowActivityForm)="showActivityForm = $event"></app-activity-list>
413
</div>
Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,46 @@
11
import { waitForAsync, TestBed, ComponentFixture } from '@angular/core/testing';
2+
import { MockStore, provideMockStore } from '@ngrx/store/testing';
23
import { ActivitiesManagementComponent } from './activities-management.component';
4+
import { SetActivityToEdit } from '../store';
5+
import { Activity } from '../../shared/models';
36

47
describe('ActivitiesManagementComponent', () => {
58
let component: ActivitiesManagementComponent;
69
let fixture: ComponentFixture<ActivitiesManagementComponent>;
10+
let store: MockStore<Activity>;
711

812
beforeEach(waitForAsync(() => {
913
TestBed.configureTestingModule({
1014
imports: [],
11-
declarations: [ActivitiesManagementComponent]
15+
declarations: [ActivitiesManagementComponent],
16+
providers: [provideMockStore({ initialState: {} })],
1217
}).compileComponents();
1318
}));
1419

1520
beforeEach(() => {
1621
fixture = TestBed.createComponent(ActivitiesManagementComponent);
1722
component = fixture.componentInstance;
1823
fixture.detectChanges();
24+
store = TestBed.inject(MockStore);
1925
});
2026

2127
it('should create the component', () => {
2228
expect(component).toBeTruthy();
2329
});
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+
2446
});
Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
1-
import { Component } from '@angular/core';
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';
25

36
@Component({
47
selector: 'app-activities-management',
58
templateUrl: './activities-management.component.html',
69
styleUrls: ['./activities-management.component.scss'],
710
})
811
export class ActivitiesManagementComponent {
9-
constructor() {}
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+
}
1024
}

0 commit comments

Comments
 (0)