Skip to content

Commit a7a9e5e

Browse files
committed
closes #38 - manage activities screen created
1 parent 3c0dc65 commit a7a9e5e

22 files changed

+333
-5
lines changed

src/app/app-routing.module.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// tslint:disable-next-line:max-line-length
2+
import { ActivitiesManagementComponent } from './components/options-sidebar/activities/activities-management/activities-management.component';
13
import { NgModule } from '@angular/core';
24
import { Routes, RouterModule } from '@angular/router';
35
import { ReportsComponent } from './components/options-sidebar/reports/reports.component';
@@ -10,6 +12,7 @@ const routes: Routes = [
1012
{path: 'time-clock', component: TimeClockComponent},
1113
{path: 'time-entries', component: TimeEntriesComponent},
1214
{path: 'project-management', component: ProjectManagementComponent},
15+
{path: 'activities-management', component: ActivitiesManagementComponent},
1316
{path: '', pathMatch: 'full', redirectTo: 'time-clock'},
1417
{path: '**', pathMatch: 'full', redirectTo: 'time-clock'},
1518
];

src/app/app.module.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { ActivityListComponent } from './components/options-sidebar/activities/activity-list/activity-list.component';
2+
import { CreateActivityComponent } from './components/options-sidebar/activities/create-activity/create-activity.component';
13
import { CommonModule } from '@angular/common';
24
import { BrowserModule } from '@angular/platform-browser';
35
import { NgModule } from '@angular/core';
@@ -21,6 +23,8 @@ import { ModalComponent } from './components/shared/modal/modal.component';
2123
import { MonthPickerComponent } from './components/shared/month-picker/month-picker.component';
2224
import { EmptyStateComponent } from './components/shared/empty-state/empty-state.component';
2325
import { GroupByDatePipe } from './components/shared/pipes/group-by-date/group-by-date.pipe';
26+
// tslint:disable-next-line:max-line-length
27+
import { ActivitiesManagementComponent } from './components/options-sidebar/activities/activities-management/activities-management.component';
2428

2529

2630
@NgModule({
@@ -41,7 +45,10 @@ import { GroupByDatePipe } from './components/shared/pipes/group-by-date/group-b
4145
TimeEntriesComponent,
4246
MonthPickerComponent,
4347
EmptyStateComponent,
44-
GroupByDatePipe
48+
GroupByDatePipe,
49+
ActivitiesManagementComponent,
50+
CreateActivityComponent,
51+
ActivityListComponent
4552
],
4653
imports: [
4754
CommonModule,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
.parent {
2+
display: flex;
3+
}
4+
5+
.item {
6+
width: 50%;
7+
margin: 2em;
8+
min-height: 500px;
9+
max-height: 500px;
10+
}
11+
12+
@media screen and (max-width: 600px){
13+
.parent {
14+
flex-direction: column-reverse;
15+
}
16+
17+
.item {
18+
width: auto;
19+
min-height: 200px;
20+
}
21+
}
22+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<div class="parent">
2+
<app-create-activity class="item">
3+
</app-create-activity>
4+
5+
<app-activity-list [activities]="activities" class="item">
6+
</app-activity-list>
7+
</div>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { HttpClient, HttpHandler } from '@angular/common/http';
2+
import { Activity } from './../model/activity';
3+
import { of } from 'rxjs';
4+
import { ActivityService } from './../services/activity.service';
5+
import { async, TestBed } from '@angular/core/testing';
6+
7+
import { ActivitiesManagementComponent } from './activities-management.component';
8+
9+
describe('ActivitiesManagementComponent', () => {
10+
let component: ActivitiesManagementComponent;
11+
let activityService: ActivityService;
12+
const activitiesFromApi: Activity[] = [{id: '123', name: 'aaa', description: 'xxx'}];
13+
14+
beforeEach(async(() => {
15+
TestBed.configureTestingModule({
16+
declarations: [ ActivitiesManagementComponent],
17+
providers: [ ActivityService, HttpClient, HttpHandler ]
18+
});
19+
component = TestBed.createComponent(ActivitiesManagementComponent).componentInstance;
20+
activityService = TestBed.get(ActivityService);
21+
spyOn(activityService, 'getActivities').and.returnValue(of(activitiesFromApi));
22+
}));
23+
24+
it('should create the component', () => {
25+
expect(component).toBeTruthy();
26+
});
27+
28+
it('should load activities', () => {
29+
component.ngOnInit();
30+
expect(component.activities).toBe(activitiesFromApi);
31+
});
32+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Activity } from './../model/activity';
2+
import { ActivityService } from './../services/activity.service';
3+
import { Component, OnInit } from '@angular/core';
4+
5+
@Component({
6+
selector: 'app-activities-management',
7+
templateUrl: './activities-management.component.html',
8+
styleUrls: ['./activities-management.component.css']
9+
})
10+
export class ActivitiesManagementComponent implements OnInit {
11+
12+
constructor(private activityService: ActivityService) { }
13+
14+
activities: Activity[];
15+
16+
ngOnInit(): void {
17+
this.activityService.getActivities().subscribe( data => this.activities = data );
18+
}
19+
}

src/app/components/options-sidebar/activities/activity-list/activity-list.component.css

Whitespace-only changes.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<div class="card-body">
2+
<div class="scroll">
3+
<div class="accordion" id="accordionActivities">
4+
<div *ngIf="activities?.length > 0; else notShow">
5+
<div class="card" *ngFor="let activity of activities; let rowIndex = index">
6+
<div class="card-header">
7+
<h2 class="mb-0">
8+
<a type="button" data-toggle="collapse" [attr.data-target]="'#row'+rowIndex">
9+
{{activity.name}}
10+
</a>
11+
<div class="btn-group float-right" role="group">
12+
<i class="far fa-edit btn btn-link"></i>
13+
<i class="far fa-trash-alt btn btn-link"></i>
14+
</div>
15+
</h2>
16+
</div>
17+
18+
<div [id]="'row'+rowIndex" class="collapse" data-parent="#accordionActivities">
19+
<div class="card-body">
20+
<h5>Description:</h5>
21+
<p>{{activity.description}}</p>
22+
</div>
23+
</div>
24+
25+
</div>
26+
</div>
27+
<ng-template #notShow>
28+
<div class="card">
29+
<div class="card-body">
30+
<h4 class="card-text">There are no activities.</h4>
31+
<h5 class="card-text">Please, create one.</h5>
32+
</div>
33+
</div>
34+
</ng-template>
35+
</div>
36+
</div>
37+
</div>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { ActivityListComponent } from './activity-list.component';
4+
5+
describe('ActivityListComponent', () => {
6+
let component: ActivityListComponent;
7+
let fixture: ComponentFixture<ActivityListComponent>;
8+
9+
beforeEach(async(() => {
10+
TestBed.configureTestingModule({
11+
declarations: [ ActivityListComponent ]
12+
})
13+
.compileComponents();
14+
}));
15+
16+
beforeEach(() => {
17+
fixture = TestBed.createComponent(ActivityListComponent);
18+
component = fixture.componentInstance;
19+
fixture.detectChanges();
20+
});
21+
22+
it('should create', () => {
23+
expect(component).toBeTruthy();
24+
});
25+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { Activity } from './../model/activity';
2+
import { Input } from '@angular/core';
3+
import { Component } from '@angular/core';
4+
5+
@Component({
6+
selector: 'app-activity-list',
7+
templateUrl: './activity-list.component.html',
8+
styleUrls: ['./activity-list.component.css']
9+
})
10+
export class ActivityListComponent {
11+
12+
@Input() activities: Activity[] = [];
13+
14+
constructor() { }
15+
16+
}

0 commit comments

Comments
 (0)