Skip to content

Commit 552e7db

Browse files
author
Juan Gabriel Guzman
committed
feat: #452 Adding loading bar
1 parent e09b3f4 commit 552e7db

28 files changed

+363
-136
lines changed

src/app/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import { InputDateComponent } from './modules/shared/components/input-date/input
6767
import { TimeRangeFormComponent } from './modules/reports/components/time-range-form/time-range-form.component';
6868
import { TimeEntriesTableComponent } from './modules/reports/components/time-entries-table/time-entries-table.component';
6969
import { DialogComponent } from './modules/shared/components/dialog/dialog.component';
70+
import { LoadingBarComponent } from './modules/shared/components/loading-bar/loading-bar.component';
7071

7172
const maskConfig: Partial<IConfig> = {
7273
validation: false,
@@ -114,6 +115,7 @@ const maskConfig: Partial<IConfig> = {
114115
TimeRangeFormComponent,
115116
TimeEntriesTableComponent,
116117
DialogComponent,
118+
LoadingBarComponent
117119
],
118120
imports: [
119121
NgxMaskModule.forRoot(maskConfig),

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,16 @@
66
<th class="col-3 text-center"></th>
77
</tr>
88
</thead>
9-
<tbody>
9+
<app-loading-bar *ngIf="(isLoading$ | async)"></app-loading-bar>
10+
<tbody *ngIf="((isLoading$ | async) === ( false || null || undefined))">
1011
<tr class="d-flex" *ngFor="let activity of activities">
1112
<td class="col-sm-9">{{ activity.name }}</td>
1213
<td class="col-sm-3 text-center">
13-
<button type="button" class="btn btn-sm btn-primary" (click)="updateActivity(activity.id)">
14+
<button
15+
type="button"
16+
class="btn btn-sm btn-primary"
17+
(click)="updateActivity(activity.id)"
18+
>
1419
<i class="fa fa-pencil fa-xs"></i>
1520
</button>
1621
<button

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import { LoadActivities, DeleteActivity, SetActivityToEdit } from './../../store
66
import { ActivityState } from './../../store/activity-management.reducers';
77
import { allActivities } from '../../store';
88
import { Activity } from '../../../shared/models';
9+
import { Observable } from 'rxjs';
10+
import { delay } from 'rxjs/operators';
11+
import { getIsLoading } from 'src/app/modules/activities-management/store/activity-management.selectors';
912

1013
@Component({
1114
selector: 'app-activity-list',
@@ -18,7 +21,10 @@ export class ActivityListComponent implements OnInit {
1821
activityToDelete: Activity;
1922
message: string;
2023
idToDelete: string;
21-
constructor(private store: Store<ActivityState>) {}
24+
isLoading$: Observable<boolean>;
25+
constructor(private store: Store<ActivityState>) {
26+
this.isLoading$ = store.pipe(delay(0), select(getIsLoading));
27+
}
2228

2329
ngOnInit() {
2430
this.store.dispatch(new LoadActivities());

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
ActivityState,
88
CreateActivity,
99
UpdateActivity,
10-
activityIdtoEdit,
10+
activityIdToEdit,
1111
allActivities,
1212
ResetActivityToEdit,
1313
} from '../../store';
@@ -74,7 +74,7 @@ describe('CreateActivityComponent', () => {
7474
activityIdToEdit: '1',
7575
};
7676

77-
activityIdtoEditMock = store.overrideSelector(activityIdtoEdit, currentState.activityIdToEdit);
77+
activityIdtoEditMock = store.overrideSelector(activityIdToEdit, currentState.activityIdToEdit);
7878
allActivitiesMock = store.overrideSelector(allActivities, currentState.data);
7979
getActivityByIdMock = store.overrideSelector(allActivitiesMock, activityIdtoEditMock);
8080

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ export function activityManagementReducer(state: ActivityState = initialState, a
7171
}
7272

7373
case ActivityManagementActionTypes.DELETE_ACTIVITY_SUCCESS: {
74-
const activites = state.data.filter((activity) => activity.id !== action.activityId);
74+
const activities = state.data.filter((activity) => activity.id !== action.activityId);
7575
return {
7676
...state,
77-
data: activites,
77+
data: activities,
7878
isLoading: false,
7979
message: 'Activity removed successfully!',
8080
};

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ describe('ActivityManagement Selectors', () => {
44

55
it('reads activityIdtoEdit from state', () => {
66
const activityId = 'id';
7-
const activityIdFound = selectors.activityIdtoEdit.projector({ activityIdToEdit: activityId });
7+
const activityIdFound = selectors.activityIdToEdit.projector({ activityIdToEdit: activityId });
88
expect(activityIdFound).toBe(activityId);
99
});
1010

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,18 @@ export const allActivities = createSelector(getActivityState, (state: ActivitySt
88
return state.data;
99
});
1010

11-
export const activityIdtoEdit = createSelector(getActivityState, (state: ActivityState) => {
11+
export const activityIdToEdit = createSelector(getActivityState, (state: ActivityState) => {
1212
return state.activityIdToEdit;
1313
});
1414

15-
export const getActivityById = createSelector(allActivities, activityIdtoEdit, (activities, activityId) => {
15+
export const getActivityById = createSelector(allActivities, activityIdToEdit, (activities, activityId) => {
1616
if (activities && activityId) {
1717
return activities.find((activity) => {
1818
return activity.id === activityId;
1919
});
2020
}
2121
});
22+
23+
export const getIsLoading = createSelector(getActivityState, (state: ActivityState) => {
24+
return state.isLoading;
25+
});

src/app/modules/customer-management/components/customer-info/components/customer-list/customer-list.component.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,16 @@
1111
<th class="col-3 text-center">Options</th>
1212
</tr>
1313
</thead>
14-
<tbody>
14+
<app-loading-bar *ngIf="(isLoading$ | async)"></app-loading-bar>
15+
<tbody *ngIf="((isLoading$ | async) === (false || null || undefined))">
1516
<tr class="d-flex" *ngFor="let customer of customers">
1617
<td class="col-sm-9">{{ customer.name }}</td>
1718
<td class="col-sm-3 text-center">
18-
<button (click)="editCustomer(customer.id)" type="button" class="btn btn-sm btn-primary">
19+
<button
20+
(click)="editCustomer(customer.id)"
21+
type="button"
22+
class="btn btn-sm btn-primary"
23+
>
1924
<i class="fa fa-pencil fa-xs"></i>
2025
</button>
2126
<button

src/app/modules/customer-management/components/customer-info/components/customer-list/customer-list.component.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
import {Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, AfterViewInit} from '@angular/core';
2-
import {ActionsSubject, Store} from '@ngrx/store';
2+
import {ActionsSubject, select, Store} from '@ngrx/store';
33

4-
import {Subject, Subscription} from 'rxjs';
4+
import {Observable, Subject, Subscription} from 'rxjs';
55
import {
66
CustomerManagementActionTypes,
77
DeleteCustomer,
88
LoadCustomers,
99
SetCustomerToEdit
1010
} from './../../../../store/customer-management.actions';
1111
import {Customer} from './../../../../../shared/models/customer.model';
12-
import {filter} from 'rxjs/operators';
12+
import {delay, filter} from 'rxjs/operators';
1313
import {DataTableDirective} from 'angular-datatables';
14+
import { getIsLoading } from 'src/app/modules/customer-management/store/customer-management.selectors';
1415

1516
@Component({
1617
selector: 'app-customer-list',
@@ -32,8 +33,11 @@ export class CustomerListComponent implements OnInit, OnDestroy, AfterViewInit {
3233
showModal = false;
3334
idToDelete: string;
3435
message: string;
36+
isLoading$: Observable<boolean>;
3537

36-
constructor(private store: Store<Customer>, private actionsSubject$: ActionsSubject) { }
38+
constructor(private store: Store<Customer>, private actionsSubject$: ActionsSubject) {
39+
this.isLoading$ = store.pipe(delay(0), select(getIsLoading));
40+
}
3741

3842
ngOnInit(): void {
3943
this.dtOptions = {

src/app/modules/customer-management/components/projects/components/store/project.selectors.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@ export const getProjects = createSelector(getProjectState, (state: ProjectState)
1515
export const getProjectToEdit = createSelector(getProjectState, (state: ProjectState) => {
1616
return state.projectToEdit;
1717
});
18+
19+
export const getIsLoading = createSelector(getProjectState, (state: ProjectState) => {
20+
return state.isLoading;
21+
});

0 commit comments

Comments
 (0)