Skip to content

Commit

Permalink
[front] add loader + overlay on edit loading
Browse files Browse the repository at this point in the history
  • Loading branch information
t8g committed Sep 27, 2017
1 parent 82ddcad commit 1e414f8
Show file tree
Hide file tree
Showing 10 changed files with 166 additions and 1 deletion.
1 change: 1 addition & 0 deletions client/src/app/app.component.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<loader></loader>
<toaster-container></toaster-container>
<md-sidenav-layout>

Expand Down
4 changes: 4 additions & 0 deletions client/src/app/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { LoaderService } from './loader/loader.service';
import { LoaderModule } from './loader/loader.module';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
Expand Down Expand Up @@ -105,13 +107,15 @@ export function createTranslateLoader(http: Http) {
ToasterModule,
TextMaskModule,
BrowserAnimationsModule,
LoaderModule,
],
providers: [
IsariDataService,
UserService,
LoggedInGuard,
OrganizationResolver,
StorageService,
LoaderService,
],
entryComponents: [
AppComponent,
Expand Down
6 changes: 5 additions & 1 deletion client/src/app/isari-editor/isari-editor.component.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { LoaderService } from './../loader/loader.service';
import { Component, OnInit, ViewContainerRef, Input, HostListener, Inject } from '@angular/core';
import { Title } from '@angular/platform-browser';
import { ActivatedRoute, Router, ParamMap } from '@angular/router';
Expand Down Expand Up @@ -68,7 +69,8 @@ export class IsariEditorComponent implements OnInit {
private toasterService: ToasterService,
private viewContainerRef: ViewContainerRef,
private titleService: Title,
private dialog: MdDialog) {
private dialog: MdDialog,
private loaderService: LoaderService) {
PageScrollConfig.defaultScrollOffset = 50;
PageScrollConfig.defaultDuration = 500;
}
Expand Down Expand Up @@ -101,6 +103,7 @@ export class IsariEditorComponent implements OnInit {
.map((event: LangChangeEvent) => event.lang)
.startWith(this.translate.currentLang)
).subscribe(([{ feature, id }, restrictedFields, lang]) => {
this.loaderService.show();
this.feature = feature;
this.id = id;
Promise.all([
Expand Down Expand Up @@ -151,6 +154,7 @@ export class IsariEditorComponent implements OnInit {

// scroll to form
setTimeout(() => {
this.loaderService.hide();
let pageScrollInstance: PageScrollInstance = PageScrollInstance.simpleInstance(this.document, '#form');
this.pageScrollService.start(pageScrollInstance);
});
Expand Down
12 changes: 12 additions & 0 deletions client/src/app/loader/loader.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { LoaderComponent } from "./loader/loader.component";

@NgModule({
imports: [CommonModule],
declarations: [LoaderComponent],
exports: [LoaderComponent]
})
export class LoaderModule {}

export { LoaderService } from "./loader.service";
15 changes: 15 additions & 0 deletions client/src/app/loader/loader.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { TestBed, inject } from '@angular/core/testing';

import { LoaderService } from './loader.service';

describe('LoaderService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [LoaderService]
});
});

it('should be created', inject([LoaderService], (service: LoaderService) => {
expect(service).toBeTruthy();
}));
});
20 changes: 20 additions & 0 deletions client/src/app/loader/loader.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs';
import { Injectable } from '@angular/core';

@Injectable()
export class LoaderService {
private _loader$: BehaviorSubject<boolean> = new BehaviorSubject(false);
public loader$: Observable<boolean> = this._loader$.asObservable();

constructor() { }

hide() {
this._loader$.next(false);
}

show() {
this._loader$.next(true);
}

}
63 changes: 63 additions & 0 deletions client/src/app/loader/loader/loader.component.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
.overlay{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10;
background-color: rgba(0,0,0,0.2);
display: flex;
justify-content: center;
}

/* .loader {
position: fixed;
display: flex;
top: 0;
z-index: 11;
padding: 0;
justify-content: center;
width: 20%;
margin: 0 40%;
} */

.loader,
.loader:after {
border-radius: 50%;
width: 4em;
height: 4em;
}
.loader {
margin: 60px auto;
font-size: 10px;
position: fixed;
border-top: .5em solid rgba(254,0,0, 0.2);
border-right: .5em solid rgba(254,0,0, 0.2);
border-bottom: .5em solid rgba(254,0,0, 0.2);
border-left: .5em solid #E6142D;
-webkit-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
-webkit-animation: load8 1.1s infinite linear;
animation: load8 1.1s infinite linear;
}
@-webkit-keyframes load8 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes load8 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
3 changes: 3 additions & 0 deletions client/src/app/loader/loader/loader.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div class="overlay" *ngIf="loader$ | async">
<div class="loader"></div>
</div>
25 changes: 25 additions & 0 deletions client/src/app/loader/loader/loader.component.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { LoaderComponent } from './loader.component';

describe('LoaderComponent', () => {
let component: LoaderComponent;
let fixture: ComponentFixture<LoaderComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LoaderComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(LoaderComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});
18 changes: 18 additions & 0 deletions client/src/app/loader/loader/loader.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Observable } from 'rxjs/Observable';
import { LoaderService } from './../loader.service';
import { Component } from '@angular/core';

@Component({
selector: 'loader',
templateUrl: './loader.component.html',
styleUrls: ['./loader.component.css']
})
export class LoaderComponent {

loader$: Observable<boolean>;

constructor(private loaderService: LoaderService) {
this.loader$ = loaderService.loader$;
}

}

0 comments on commit 1e414f8

Please sign in to comment.