Thursday, 11 October 2018

Unable to use Ng2 Translate service in Http Interceptors Angular 2 , Angular 6

My Code is like below, I am using 3rd party login (openAM) for my application. when ever I got 401, I should redirect the application to another URL from there user will be logged in.

I user http interceptors to check the status and redirect to login. Question1: Is this approach is correct ?

Question2: Translations are not happening.

check handleHttpResponseCodes method. In that "unauthorisedMessage" is not translating. Not only that any message is not translating. is anything wrong with my code.


import { Injectable, Injector } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import { AuthService } from 'app/blocks/auth/auth.service';
import { TranslateService } from 'ng2-translate';
import { AlertService } from '../../core/services/common';
import { Router } from '@angular/router';
import * as jsToaster from 'toastr';

@Injectable()
export class AppHttpInterceptor implements HttpInterceptor {

    constructor(
        private injector: Injector,
        private router: Router,
        private translate: TranslateService
    ) {}
    intercept(req: HttpRequest < any > , next: HttpHandler): Observable < HttpEvent < any >> {

        // console.log(req);
        if (!window.navigator.onLine) {
            // check to see if there's internet
            // if there is no internet, throw a HttpErrorResponse error
            // since an error is thrown, the function will terminate here
            return Observable.throw(new HttpErrorResponse({
                error: 'NO_INTERNET'
            }));
        } else {
            // else return the normal request
            return this.handleResponse(next, req);
        }
    }
    handleResponse(next, req) {
        return next.handle(req)
            .do((ev: HttpEvent < any > ) => {
                if (ev instanceof HttpResponse) {
                    //console.log('ev in the do: ', ev);
                }
            })
            .catch((response: any) => {
                if (response instanceof HttpErrorResponse) {
                    this.handleHttpResponseCodes(response);
                } else {
                    console.log('::UNKNOWN ERROR::', response);
                }
                return Observable.throw(response);
            });
    }
    handleHttpResponseCodes(exception) {
        let authService = this.injector.get(AuthService);
        let translate = this.injector.get(TranslateService);
        let alertService = this.injector.get(AlertService);
        const router = this.injector.get(Router);


        switch (exception.status) {
            case 401: //UNAUTHORIZED
                debugger;
                this.translate.get('unauthorisedMessage').subscribe((res: string) => {
                    debugger;
                    this.showToast(res, '401');
                });

                setTimeout(() => {
                    authService.login_openAM();
                }, 3000);

                break;
            case 400: //BAD REQUEST OR FR SESSION TIME OUT

                this.translate.get('loginSessionExpiredMessage').subscribe((res: string) => {
                    debugger;
                    this.showToast(res, '400');
                });

                setTimeout(() => {
                    authService.loginSessionExpired();
                }, 2000);

                break;
            case 403: // FORBIDDED ACCESS
                //TODO
                break;
            case 502: // BAD GATEWAY

                break;
            case 503: //SERVICE UNAVAILABLE
                jsToaster.error("SERVICE UNAVAILABLE", "503");
                break;
            case 504: //GATEWAY TIMEOUT
                jsToaster.error("SERVICE UNAVAILABLE", "CODE:504-GATEWAY TIMEOUT");
                break;
        }
        console.log(':Service Exception::', exception);
    }

    showToast(title, body, typeOfToast, waitTime) {
        setTimeout(() => {
            jsToaster[typeOfToast](body, title);
        }, waitTime);
    }

}


from Unable to use Ng2 Translate service in Http Interceptors Angular 2 , Angular 6

No comments:

Post a Comment