/* Copyright CloudLinux Zug GmbH 2010-2017 All Rights Reserved
*
* Licensed under CLOUD LINUX LICENSE AGREEMENT
* http://cloudlinux.com/docs/LICENSE.TXT
*/
import {ApplicationRef, ComponentFactoryResolver, Inject, Injectable, ViewContainerRef} from '@angular/core';
import {UnavailableComponent} from '../unavailable.component';
import {ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot} from "@angular/router";
import {Observable} from "rxjs/Observable";
@Injectable()
export class UnavailableService implements CanActivate {
component: UnavailableComponent;
constructor(
@Inject(ComponentFactoryResolver) private componentFactoryResolver: ComponentFactoryResolver,
@Inject(ApplicationRef) private appRef: ApplicationRef
) {}
public showPage(error) {
const appInstance = this.appRef.components[0].instance;
appInstance.routerOutlet.deactivate();
if (appInstance.tabHeader.nativeElement.parentNode !== null) {
appInstance.tabHeader.nativeElement.remove();
}
if (appInstance.tabHeaderFixed && appInstance.tabHeaderFixed.nativeElement.parentNode !== null) {
appInstance.tabHeaderFixed.nativeElement.remove();
}
if (!this.component) {
const factory = this.componentFactoryResolver.resolveComponentFactory(UnavailableComponent);
const ref = appInstance.viewRef.createComponent(factory);
ref.changeDetectorRef.detectChanges();
this.component = ref.instance;
}
this.component.errorText = error.error_id;
this.component.errorContext = error.context;
if (error.icon) {
this.component.icon = error.icon;
}
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return !this.component;
}
}
|