Skip to content

Commit d41a02c

Browse files
committed
feat: TTA-193 add preload page
1 parent 3dc8359 commit d41a02c

File tree

9 files changed

+33055
-156
lines changed

9 files changed

+33055
-156
lines changed

package-lock.json

Lines changed: 32881 additions & 156 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app/app.component.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
<app-page-loader></app-page-loader>
12
<router-outlet></router-outlet>
3+
<button (click)="pageLoadTest()">Page LOAD</button>

src/app/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ import { SearchUserComponent } from './modules/shared/components/search-user/sea
9595
import { TimeRangeCustomComponent } from './modules/reports/components/time-range-custom/time-range-custom.component';
9696
import { TimeRangeHeaderComponent } from './modules/reports/components/time-range-custom/time-range-header/time-range-header.component';
9797
import { TimeRangeOptionsComponent } from './modules/reports/components/time-range-custom/time-range-options/time-range-options.component';
98+
import { PageLoaderComponent } from './page-loader/page-loader.component';
9899

99100
const maskConfig: Partial<IConfig> = {
100101
validation: false,
@@ -154,6 +155,7 @@ const maskConfig: Partial<IConfig> = {
154155
TimeRangeCustomComponent,
155156
TimeRangeHeaderComponent,
156157
TimeRangeOptionsComponent,
158+
PageLoaderComponent,
157159
],
158160
imports: [
159161
NgxMaskModule.forRoot(maskConfig),
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { TestBed } from '@angular/core/testing';
2+
3+
import { PageLoaderService } from './page-loader.service';
4+
5+
describe('PageLoaderService', () => {
6+
let service: PageLoaderService;
7+
8+
beforeEach(() => {
9+
TestBed.configureTestingModule({});
10+
service = TestBed.inject(PageLoaderService);
11+
});
12+
13+
it('should be created', () => {
14+
expect(service).toBeTruthy();
15+
});
16+
});

src/app/page-loader.service.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { Injectable } from '@angular/core';
2+
import { BehaviorSubject, Subject } from 'rxjs';
3+
4+
@Injectable({
5+
providedIn: 'root'
6+
})
7+
export class PageLoaderService {
8+
9+
constructor() { }
10+
11+
private loading$: Subject<boolean> = new BehaviorSubject(false);
12+
private message$: Subject<string> = new BehaviorSubject(null);
13+
private progressValue$: Subject<number> = new BehaviorSubject(null);
14+
15+
show(message: string = null, progressValue: number = null) {
16+
this.loading$.next(true);
17+
this.message$.next(message);
18+
this.progressValue$.next(progressValue);
19+
}
20+
21+
hide() {
22+
this.loading$.next(false);
23+
this.message$.next(null);
24+
this.progressValue$.next(null);
25+
}
26+
27+
get state() {
28+
return this.loading$.asObservable();
29+
}
30+
31+
get message() {
32+
return this.message$.asObservable();
33+
}
34+
35+
setMessage(message: string) {
36+
this.message$.next(message);
37+
}
38+
39+
get progressValue() {
40+
return this.progressValue$.asObservable();
41+
}
42+
43+
setProgressValue(progressValue: number) {
44+
this.progressValue$.next(progressValue);
45+
}
46+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
.loader-container {
2+
position: absolute;
3+
top: 0;
4+
width: 100%;
5+
height: 100%;
6+
display: flex;
7+
justify-content: center;
8+
align-items: center;
9+
background-color: #000000aa;
10+
pointer-events: none;
11+
}
12+
.loader-message-container {
13+
color: whitesmoke;
14+
font-size: 1.5rem;
15+
}
16+
.loader-progress-container {
17+
padding: 5px;
18+
min-height: 1.3rem;
19+
width: 100%;
20+
background-color: black;
21+
}
22+
.progress-bar {
23+
min-height: 1rem;
24+
background-color: orange;
25+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<div *ngIf="loading" class="loader-container">
2+
<div *ngIf="!!message">
3+
<div class="loader-message-container">{{ message }}></div>
4+
<div *ngIf="!!progressValue" class="loader-progress-container">
5+
<div class="progress-bar" [style.width]="progressValueStyle"></div>
6+
</div>
7+
</div>
8+
</div>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { PageLoaderComponent } from './page-loader.component';
4+
5+
describe('PageLoaderComponent', () => {
6+
let component: PageLoaderComponent;
7+
let fixture: ComponentFixture<PageLoaderComponent>;
8+
9+
beforeEach(async () => {
10+
await TestBed.configureTestingModule({
11+
declarations: [ PageLoaderComponent ]
12+
})
13+
.compileComponents();
14+
});
15+
16+
beforeEach(() => {
17+
fixture = TestBed.createComponent(PageLoaderComponent);
18+
component = fixture.componentInstance;
19+
fixture.detectChanges();
20+
});
21+
22+
it('should create', () => {
23+
expect(component).toBeTruthy();
24+
});
25+
});
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { Component, OnInit } from '@angular/core';
2+
import { takeWhile } from 'rxjs/operators';
3+
import { PageLoaderService } from '../page-loader.service';
4+
5+
@Component({
6+
selector: 'app-page-loader',
7+
templateUrl: './page-loader.component.html',
8+
styleUrls: ['./page-loader.component.css']
9+
})
10+
export class PageLoaderComponent implements OnInit {
11+
12+
constructor(private pageLoaderService: PageLoaderService) { }
13+
14+
loading: boolean;
15+
message: string;
16+
progressValue: number;
17+
progressValueStyle: string;
18+
private _subscribed: boolean = true;
19+
20+
ngOnInit(): void {
21+
this.subscribe();
22+
}
23+
24+
private subscribe() {
25+
this.pageLoaderService.state
26+
.pipe(takeWhile(() => this._subscribed))
27+
.subscribe(loading => {
28+
this.loading = loading;
29+
});
30+
this.pageLoaderService.message
31+
.pipe(takeWhile(() => this._subscribed))
32+
.subscribe(message => {
33+
if (!!message) {
34+
this.message = message;
35+
}
36+
});
37+
this.pageLoaderService.progressValue
38+
.pipe(takeWhile(() => this._subscribed))
39+
.subscribe(progressValue => {
40+
if (!!progressValue) {
41+
this.progressValue = progressValue;
42+
this.progressValueStyle = `${progressValue}%`;
43+
}
44+
});
45+
}
46+
ngOnDestroy() {
47+
this._subscribed = false;
48+
}
49+
50+
}

0 commit comments

Comments
 (0)