import { BsModalService } from 'ngx-bootstrap/ng2-bootstrap';
import { BsModalRef } from 'ngx-bootstrap/modal/modal-options.class';
import { ToastyService, ToastOptions } from 'ng2-toasty';
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import { MENU_OPTIONS } from './menu-options.enum';
import {
IRailincSSOUser,
AccountSearchTypes,
RailincUserService,
NoAccountSelectedModalComponent,
PermissionService,
UnauthorizedAccountModalComponent,
AccountListErrorModalComponent,
LoginErrorComponent
} from '@railinc/rl-ngx-core';
@Component({
selector: 'app',
encapsulation: ViewEncapsulation.None,
styleUrls: [
'./app.component.css'
],
template: `
<rl-block-ui></rl-block-ui>
<ng2-toasty [position]="'top-right'"></ng2-toasty>
<railinc-application
applicationName="My Application Name"
[railincUser]="user"
[applicationList]="applicationList"
[menuOptions]="menuOptions"
[accountList]="accountList"
[showAccountList]="showAccountList"
[accountListType]="accountListType"
>
</railinc-application>
`
})
export class AppComponent implements OnInit {
public user: IRailincSSOUser;
public applicationList: any[];
public accountList: string[];
public menuOptions: any[] = MENU_OPTIONS;
private bsModalRef: BsModalRef;
public showAccountList: boolean = true;
public accountListType: AccountSearchTypes = AccountSearchTypes.DRODOWN;
constructor(
private userService: RailincUserService,
public toastyService: ToastyService,
private modalService: BsModalService,
private permissionService: PermissionService
) { }
public ngOnInit() {
setTimeout(() => {
this.userService.getSSOUser()
.subscribe((user) => {
this.user = <IRailincSSOUser> user;
this.permissionService.setRoleArray(user['userRoles']['userRoles']);
});
this.userService.getApplications()
.catch((error) => {
this.showAppListToast();
return Observable.throw([]);
})
.subscribe((applicationList) => {
this.applicationList = applicationList;
});
this.userService.onLoginFailure.debounceTime(250).subscribe(failure => {
this.showSSOUserError();
});
this.permissionService.onUnauthorizedRoute
.debounceTime(250)
.subscribe(error => {
this.showUnauthorizedRouteModal();
});
Eif (this.showAccountList) {
this.userService.getAccountList()
.catch(e => {
this.showAccountListError();
return Observable.throw([]);
})
.subscribe((accountList) => {
this.accountList = accountList;
});
this.userService.onAccountChage
.debounceTime(250)
.subscribe(account => {
this.toastyService.info(<ToastOptions> {
msg: 'New Account Selected: ' + this.userService.SELECTED_ACCOUNT
});
});
this.userService.onNoAccountSelected
.debounceTime(10)
.subscribe(error => {
this.showNoAccountSelectedModal();
});
}
}, 0);
}
private showUnauthorizedRouteModal() {
this.bsModalRef = this.modalService.show(UnauthorizedAccountModalComponent, { class: 'dialog-sm dialog-error' });
this.modalService.onHidden.subscribe(data => {
// Handle exit error modal click
});
}
private showNoAccountSelectedModal() {
this.bsModalRef = this.modalService.show(NoAccountSelectedModalComponent, { class: 'dialog-sm dialog-error' });
this.modalService.onHidden.subscribe(data => {
// Handle exit error modal click
});
}
private showAccountListError() {
this.bsModalRef = this.modalService.show(AccountListErrorModalComponent, { class: 'dialog-sm dialog-error' });
this.modalService.onHidden.subscribe(data => {
// Handle exit error modal click
});
}
private showSSOUserError() {
this.bsModalRef = this.modalService.show(LoginErrorComponent, { class: 'dialog-sm dialog-error' });
this.modalService.onHide.subscribe(data => {
//window.location.href = '/sso/logout.do';
});
}
private showAppListToast() {
this.toastyService.error(<ToastOptions> {
msg: 'Unable to load User Applications'
});
}
} |