Skip to content

Instantly share code, notes, and snippets.

@muhammadawaisshaikh
Created March 20, 2021 10:07
Show Gist options
  • Select an option

  • Save muhammadawaisshaikh/578b047ca6734dfcf9c63ce5f92bf7ae to your computer and use it in GitHub Desktop.

Select an option

Save muhammadawaisshaikh/578b047ca6734dfcf9c63ce5f92bf7ae to your computer and use it in GitHub Desktop.
Implementing global loader Interceptor for Http Calls
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { HttpClientModule } from '@angular/common/http';
...
// for token interceptor
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { LoaderInterceptorService } from './core/interceptors/loader-interceptor/loader-interceptor.service';
...
@NgModule({
declarations: [
...
],
imports: [
...
],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: LoaderInterceptorService,
multi: true
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor,
HttpResponse
} from '@angular/common/http';
import { Observable } from 'rxjs';
import { LoaderService } from '../../services/loader/loader.service';
@Injectable({
providedIn: 'root'
})
export class LoaderInterceptorService implements HttpInterceptor {
private requests: HttpRequest<any>[] = [];
constructor(
private loaderService: LoaderService
) { }
removeRequest(req: HttpRequest<any>) {
const i = this.requests.indexOf(req);
if (i >= 0) {
this.requests.splice(i, 1);
}
this.loaderService.isLoading.next(this.requests.length > 0);
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.requests.push(req);
console.log("No of requests--->" + this.requests.length);
this.loaderService.isLoading.next(true);
return Observable.create(observer => {
const subscription = next.handle(req)
.subscribe(
event => {
if (event instanceof HttpResponse) {
this.removeRequest(req);
observer.next(event);
}
},
err => {
alert('error' + err);
this.removeRequest(req);
observer.error(err);
},
() => {
this.removeRequest(req);
observer.complete();
});
// remove request from queue when cancelled
return () => {
this.removeRequest(req);
subscription.unsubscribe();
};
});
}
}
<div *ngIf="loading">
<img class="loading all-center" src={{loader}} />
<div class="loader-bg"></div>
</div>
@import '../../../styles.scss';
.loader-bg{
background: #ffffff;
opacity: 0.9;
position: fixed;
top: 0;
width: 100%;
height: 100%;
}
.loading {
position: absolute;
z-index: 1;
width: 100px;
height: auto;
}
import { Component, OnInit } from '@angular/core';
import { LoaderService } from '../../core/services/loader/loader.service';
@Component({
selector: 'app-loader',
templateUrl: './loader.component.html',
styleUrls: ['./loader.component.scss']
})
export class LoaderComponent implements OnInit {
loading: boolean;
loader: any = "../../../../assets/img/loading.gif";
constructor(
private loaderService: LoaderService
) { }
ngOnInit(): void {
this.loaderService.isLoading.subscribe((v) => {
console.log(v);
this.loading = v;
});
}
}
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class LoaderService {
public isLoading = new BehaviorSubject(false);
constructor() { }
}
@lumberjack001
Copy link

I'll be having a meeting in the next 6hours, can we make it 7hours?... it's currently 2:30 WAT(west African Time)... so 7hours would be 9:30pm... is that okay?

@lumberjack001
Copy link

Hello there, Good Day... I didn't any reply from you yesterday... Is it fine if we reschedule?

@muhammadawaisshaikh
Copy link
Author

muhammadawaisshaikh commented Mar 7, 2024 via email

@lumberjack001
Copy link

@muhammadawaisshaikh
Copy link
Author

muhammadawaisshaikh commented Mar 7, 2024 via email

@lumberjack001
Copy link

Oh yes I just received it... it's slated for 3pm tomorrow according to my time... I'd be at the office then, my schedules are usually tight during the day and freer at night... do nights work for you? Say between 8 and 9pm?

@muhammadawaisshaikh
Copy link
Author

muhammadawaisshaikh commented Mar 8, 2024 via email

@lumberjack001
Copy link

I think that would be 12am... Pakistan time

@lumberjack001
Copy link

I would be available all day tomorrow (saturday)... Maybe that would work best?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment