From bc8b09d0dcfdcd53dfa930a76e29dc216e76346f Mon Sep 17 00:00:00 2001 From: Erik Tiekstra Date: Thu, 16 Sep 2021 10:09:14 +0200 Subject: [PATCH] feat(employees): Implemented loader inside employees-list when pagination/filtering. (TV-597) Squashed commit of the following: commit 9e41609f515909fac8618f8cae9ce29409e62748 Author: Erik Tiekstra Date: Thu Sep 16 07:36:21 2021 +0200 Removed old classes commit 7be9f46dcd08be3cdec5e92bb237ad8fa6d1c373 Author: Erik Tiekstra Date: Wed Sep 15 14:23:53 2021 +0200 Added new loader component and implmented loader inside employees-list --- .../employees-list.component.html | 1 + .../employees-list.component.scss | 1 + .../employees-list.component.ts | 1 + .../employees-list/employees-list.module.ts | 3 ++- .../pages/employees/employees.component.html | 1 + .../pages/employees/employees.component.ts | 1 + .../src/app/pages/start/start.component.html | 4 +-- .../src/app/pages/start/start.module.ts | 2 ++ .../components/layout/layout.component.html | 7 +---- .../shared/components/layout/layout.module.ts | 2 ++ .../components/loader/loader.component.html | 3 +++ .../components/loader/loader.component.scss | 22 ++++++++++++++++ .../loader/loader.component.spec.ts | 26 +++++++++++++++++++ .../components/loader/loader.component.ts | 19 ++++++++++++++ .../shared/components/loader/loader.module.ts | 12 +++++++++ .../shared/services/api/employee.service.ts | 4 +++ apps/mina-sidor-fa/src/styles/styles.scss | 20 -------------- 17 files changed, 99 insertions(+), 30 deletions(-) create mode 100644 apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.html create mode 100644 apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.scss create mode 100644 apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.spec.ts create mode 100644 apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.ts create mode 100644 apps/mina-sidor-fa/src/app/shared/components/loader/loader.module.ts diff --git a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html index 021369e..3cfc5de 100644 --- a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html +++ b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html @@ -1,4 +1,5 @@
+ diff --git a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.scss b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.scss index a6ab160..a0482f9 100644 --- a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.scss +++ b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.scss @@ -1,6 +1,7 @@ @import 'variables/gutters'; .employees-list { + position: relative; // &__column-head { // // padding: 0; // } diff --git a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.ts b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.ts index c1b2172..6889ca3 100644 --- a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.ts @@ -14,6 +14,7 @@ import { Sort } from '@msfa-models/sort.model'; export class EmployeesListComponent { @Input() employees: EmployeeCompact[]; @Input() paginationMeta: PaginationMeta; + @Input() employeesLoading: boolean; @Input() sort: Sort; @Output() sorted = new EventEmitter(); @Output() paginated = new EventEmitter(); diff --git a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.module.ts b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.module.ts index 40d0470..ebe1bc9 100644 --- a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/components/employees-list/employees-list.module.ts @@ -1,12 +1,13 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; +import { LoaderModule } from '@msfa-shared/components/loader/loader.module'; import { EmployeesListComponent } from './employees-list.component'; @NgModule({ schemas: [CUSTOM_ELEMENTS_SCHEMA], declarations: [EmployeesListComponent], - imports: [CommonModule, RouterModule], + imports: [CommonModule, RouterModule, LoaderModule], exports: [EmployeesListComponent], }) export class EmployeesListModule {} diff --git a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/employees.component.html b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/employees.component.html index 44a1bcd..7b8bef2 100644 --- a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/employees.component.html +++ b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/employees.component.html @@ -39,6 +39,7 @@ *ngIf="employeesData$ | async as employeesData; else loadingRef" [employees]="employeesData.data" [paginationMeta]="employeesData.meta" + [employeesLoading]="employeesLoading$ | async" [sort]="sort$ | async" (sorted)="handleEmployeesSort($event)" (paginated)="setNewPage($event)" diff --git a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/employees.component.ts b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/employees.component.ts index 7ab1db0..e258669 100644 --- a/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/employees.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/administration/pages/employees/employees.component.ts @@ -16,6 +16,7 @@ export class EmployeesComponent { private _searchValue$ = new BehaviorSubject(''); onlyEmployeesWithoutAuthorization$: Observable = this.employeeService.onlyEmployeesWithoutAuthorization$; employeesData$: Observable = this.employeeService.employeesData$; + employeesLoading$: Observable = this.employeeService.employeesLoading$; sort$: Observable> = this.employeeService.sort$; iconType = IconType; diff --git a/apps/mina-sidor-fa/src/app/pages/start/start.component.html b/apps/mina-sidor-fa/src/app/pages/start/start.component.html index 38efebf..5ac8587 100644 --- a/apps/mina-sidor-fa/src/app/pages/start/start.component.html +++ b/apps/mina-sidor-fa/src/app/pages/start/start.component.html @@ -36,7 +36,5 @@ -
- -
+
diff --git a/apps/mina-sidor-fa/src/app/pages/start/start.module.ts b/apps/mina-sidor-fa/src/app/pages/start/start.module.ts index ae827f6..e3e79dc 100644 --- a/apps/mina-sidor-fa/src/app/pages/start/start.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/start/start.module.ts @@ -3,6 +3,7 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { LayoutModule } from '@msfa-shared/components/layout/layout.module'; +import { LoaderModule } from '@msfa-shared/components/loader/loader.module'; import { StartComponent } from './start.component'; @NgModule({ @@ -13,6 +14,7 @@ import { StartComponent } from './start.component'; RouterModule.forChild([{ path: '', component: StartComponent }]), LayoutModule, DigiNgCardModule, + LoaderModule, ], }) export class StartModule {} diff --git a/apps/mina-sidor-fa/src/app/shared/components/layout/layout.component.html b/apps/mina-sidor-fa/src/app/shared/components/layout/layout.component.html index 636728e..2851d8d 100644 --- a/apps/mina-sidor-fa/src/app/shared/components/layout/layout.component.html +++ b/apps/mina-sidor-fa/src/app/shared/components/layout/layout.component.html @@ -19,9 +19,4 @@ -
- -
+ diff --git a/apps/mina-sidor-fa/src/app/shared/components/layout/layout.module.ts b/apps/mina-sidor-fa/src/app/shared/components/layout/layout.module.ts index 9e769bc..6dbf25b 100644 --- a/apps/mina-sidor-fa/src/app/shared/components/layout/layout.module.ts +++ b/apps/mina-sidor-fa/src/app/shared/components/layout/layout.module.ts @@ -4,6 +4,7 @@ import { HttpClient } from '@angular/common/http'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { MarkdownModule } from 'ngx-markdown'; +import { LoaderModule } from '../loader/loader.module'; import { FooterModule } from './components/footer/footer.module'; import { NavigationModule } from './components/navigation/navigation.module'; import { SidebarModule } from './components/sidebar/sidebar.module'; @@ -22,6 +23,7 @@ import { LayoutComponent } from './layout.component'; FooterModule, MarkdownModule.forRoot({ loader: HttpClient }), DigiNgNavigationBreadcrumbsModule, + LoaderModule, ], exports: [LayoutComponent], }) diff --git a/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.html b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.html new file mode 100644 index 0000000..7ff866f --- /dev/null +++ b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.scss b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.scss new file mode 100644 index 0000000..9fc28a8 --- /dev/null +++ b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.scss @@ -0,0 +1,22 @@ +@import 'mixins/backdrop'; + +@keyframes spinning { + to { + transform: rotate(360deg); + } +} + +.loader { + display: flex; + align-items: center; + justify-content: center; + + &--full-screen { + @include msfa__backdrop(1000); + } + + &__spinner { + display: inline-flex; + animation: spinning 1s linear infinite; + } +} diff --git a/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.spec.ts b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.spec.ts new file mode 100644 index 0000000..d937e0c --- /dev/null +++ b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.spec.ts @@ -0,0 +1,26 @@ +/* tslint:disable:no-unused-variable */ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { LoaderComponent } from './loader.component'; + +describe('LoaderComponent', () => { + let component: LoaderComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + void TestBed.configureTestingModule({ + schemas: [CUSTOM_ELEMENTS_SCHEMA], + declarations: [LoaderComponent], + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LoaderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.ts b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.ts new file mode 100644 index 0000000..c2c0195 --- /dev/null +++ b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.ts @@ -0,0 +1,19 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'msfa-loader', + templateUrl: './loader.component.html', + styleUrls: ['./loader.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LoaderComponent { + private readonly _defaultClass = 'loader'; + @Input() fullScreen = false; + + get classes(): string { + if (this.fullScreen) { + return `${this._defaultClass} ${this._defaultClass}--full-screen`; + } + return this._defaultClass; + } +} diff --git a/apps/mina-sidor-fa/src/app/shared/components/loader/loader.module.ts b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.module.ts new file mode 100644 index 0000000..b92c4ff --- /dev/null +++ b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.module.ts @@ -0,0 +1,12 @@ +import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog'; +import { CommonModule } from '@angular/common'; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; +import { LoaderComponent } from './loader.component'; + +@NgModule({ + schemas: [CUSTOM_ELEMENTS_SCHEMA], + declarations: [LoaderComponent], + imports: [CommonModule, DigiNgDialogModule], + exports: [LoaderComponent], +}) +export class LoaderModule {} diff --git a/apps/mina-sidor-fa/src/app/shared/services/api/employee.service.ts b/apps/mina-sidor-fa/src/app/shared/services/api/employee.service.ts index 73618bd..f4b0c06 100644 --- a/apps/mina-sidor-fa/src/app/shared/services/api/employee.service.ts +++ b/apps/mina-sidor-fa/src/app/shared/services/api/employee.service.ts @@ -44,6 +44,8 @@ export class EmployeeService extends UnsubscribeDirective { public lastDeletedEmployee$: Observable = this._lastDeletedEmployee$.asObservable(); private _employeeToDelete$ = new BehaviorSubject(null); public employeeToDelete$: Observable = this._employeeToDelete$.asObservable(); + private _employeesLoading$ = new BehaviorSubject(false); + public employeesLoading$: Observable = this._employeesLoading$.asObservable(); constructor(private httpClient: HttpClient, private errorService: ErrorService) { super(); @@ -110,11 +112,13 @@ export class EmployeeService extends UnsubscribeDirective { if (onlyEmployeesWithoutAuthorization) { params.onlyEmployeesWithoutAuthorization = onlyEmployeesWithoutAuthorization?.toString(); } + this._employeesLoading$.next(true); return this.httpClient .get(this._apiBaseUrl, { params }) .pipe( map(({ data, meta }) => { + this._employeesLoading$.next(false); return { data: data.map(employee => mapResponseToEmployeeCompact(employee)), meta }; }) ); diff --git a/apps/mina-sidor-fa/src/styles/styles.scss b/apps/mina-sidor-fa/src/styles/styles.scss index abf4ef6..9577e44 100644 --- a/apps/mina-sidor-fa/src/styles/styles.scss +++ b/apps/mina-sidor-fa/src/styles/styles.scss @@ -4,12 +4,6 @@ @import 'mixins/icon'; @import 'mixins/link'; -@keyframes spinning { - to { - transform: rotate(360deg); - } -} - * { font-family: var(--digi--typography--font-family); box-sizing: border-box; @@ -74,20 +68,6 @@ dl { @include msfa__backdrop; } - &__loading-wrapper { - display: flex; - align-items: center; - justify-content: center; - - &--full-screen { - @include msfa__backdrop(1000); - } - } - &__spinner { - display: inline-flex; - animation: spinning 1s linear infinite; - } - &__digi-icon { display: inline-flex; }