2018-03-29 17:01:49 +02:00
|
|
|
import {Component, HostListener, Inject, OnInit} from '@angular/core';
|
2017-09-09 06:00:25 +02:00
|
|
|
import {NavigationEnd, NavigationStart, Router} from '@angular/router';
|
2017-10-22 18:06:37 +02:00
|
|
|
import {LoginService} from './services/app-user-service/login-service';
|
2018-03-07 11:56:50 +01:00
|
|
|
import {PromotionService} from './services/army-management/promotion.service';
|
|
|
|
import {AwardingService} from './services/army-management/awarding.service';
|
|
|
|
import {RouteConfig} from './app.config';
|
2018-03-29 17:14:45 +02:00
|
|
|
import {DOCUMENT} from '@angular/common';
|
2018-07-06 23:45:03 +02:00
|
|
|
import {DomSanitizer} from '@angular/platform-browser';
|
|
|
|
import {MatIconRegistry} from '@angular/material';
|
2017-05-10 11:04:06 +02:00
|
|
|
|
2017-10-14 18:43:00 +02:00
|
|
|
declare function require(url: string);
|
|
|
|
|
2017-05-10 11:04:06 +02:00
|
|
|
@Component({
|
|
|
|
selector: 'app-root',
|
|
|
|
templateUrl: 'app.component.html',
|
2017-09-09 06:00:25 +02:00
|
|
|
styleUrls: ['app.component.css', 'style/load-indicator.css']
|
2017-05-10 11:04:06 +02:00
|
|
|
})
|
2018-03-08 09:44:35 +01:00
|
|
|
export class AppComponent implements OnInit {
|
2017-05-10 11:04:06 +02:00
|
|
|
|
2017-08-01 23:52:10 +02:00
|
|
|
config = RouteConfig;
|
|
|
|
|
2018-03-08 09:44:35 +01:00
|
|
|
loading = false;
|
2017-09-09 06:00:25 +02:00
|
|
|
|
2018-07-15 15:38:33 +02:00
|
|
|
sidebarOpen = true;
|
|
|
|
|
2018-07-17 08:32:01 +02:00
|
|
|
showSidebarToggleBtn = false;
|
|
|
|
|
2018-03-29 17:01:24 +02:00
|
|
|
scrollTopVisible = false;
|
|
|
|
|
|
|
|
scrollBtnVisibleVal = 100;
|
|
|
|
|
2018-07-17 08:32:01 +02:00
|
|
|
svgIcons = {
|
|
|
|
'add': 'outline-add_box-24px',
|
|
|
|
'add-user': 'twotone-person_add-24px',
|
|
|
|
'edit': 'twotone-edit-24px',
|
|
|
|
'delete': 'twotone-delete-24px',
|
|
|
|
'stats-detail': 'round-assessment-24px',
|
|
|
|
'chevron-left': 'baseline-chevron_left-24px',
|
|
|
|
'chevron-right': 'baseline-chevron_right-24px'
|
|
|
|
};
|
|
|
|
|
2018-03-29 17:13:55 +02:00
|
|
|
version = 'v'.concat(require('./../../../package.json').version);
|
2017-10-14 18:43:00 +02:00
|
|
|
|
2017-10-15 12:56:16 +02:00
|
|
|
constructor(public loginService: LoginService,
|
2017-07-23 10:57:46 +02:00
|
|
|
private promotionService: PromotionService,
|
|
|
|
private awardingService: AwardingService,
|
2018-03-29 17:01:24 +02:00
|
|
|
private router: Router,
|
2018-07-06 17:01:59 +02:00
|
|
|
private iconRegistry: MatIconRegistry,
|
|
|
|
private sanitizer: DomSanitizer,
|
2018-03-29 17:01:24 +02:00
|
|
|
@Inject(DOCUMENT) private document) {
|
2018-07-17 08:32:01 +02:00
|
|
|
this.initMaterialSvgIcons();
|
2018-07-06 17:01:59 +02:00
|
|
|
|
2017-09-09 06:00:25 +02:00
|
|
|
router.events.subscribe(event => {
|
|
|
|
if (event instanceof NavigationStart) {
|
|
|
|
this.loading = true;
|
|
|
|
}
|
|
|
|
if (event instanceof NavigationEnd) {
|
|
|
|
this.loading = false;
|
2018-03-29 17:01:24 +02:00
|
|
|
// scroll to top on route from army overview to user detail and back
|
2018-07-17 08:32:01 +02:00
|
|
|
if (router.url.includes('/overview')) {
|
2018-03-29 17:14:45 +02:00
|
|
|
this.scrollToTop();
|
2018-03-29 17:01:24 +02:00
|
|
|
}
|
2018-07-17 08:32:01 +02:00
|
|
|
// show sidebar menu on initial stats page access
|
|
|
|
if (router.url.includes('/stats')) {
|
|
|
|
this.showSidebarToggleBtn = true;
|
|
|
|
this.sidebarOpen = true;
|
|
|
|
} else {
|
|
|
|
this.showSidebarToggleBtn = false;
|
|
|
|
}
|
2017-09-09 06:00:25 +02:00
|
|
|
}
|
|
|
|
});
|
2017-05-10 11:04:06 +02:00
|
|
|
}
|
|
|
|
|
2018-07-17 08:32:01 +02:00
|
|
|
initMaterialSvgIcons() {
|
|
|
|
Object.keys(this.svgIcons).forEach(key => {
|
|
|
|
const fileUri = '../assets/icon/' + this.svgIcons[key] + '.svg';
|
|
|
|
this.iconRegistry.addSvgIcon(key, this.sanitizer.bypassSecurityTrustResourceUrl(fileUri));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2018-03-29 17:14:45 +02:00
|
|
|
@HostListener('window:scroll', [])
|
2018-03-29 17:01:24 +02:00
|
|
|
onWindowScroll() {
|
|
|
|
this.scrollTopVisible = document.body.scrollTop > this.scrollBtnVisibleVal
|
|
|
|
|| document.documentElement.scrollTop > this.scrollBtnVisibleVal;
|
|
|
|
}
|
|
|
|
|
2018-07-15 15:38:33 +02:00
|
|
|
toggleSidebar() {
|
|
|
|
this.sidebarOpen = !this.sidebarOpen;
|
2018-07-15 18:01:27 +02:00
|
|
|
setTimeout(_ => {
|
|
|
|
window.dispatchEvent(new Event('resize'));
|
|
|
|
});
|
2018-07-15 15:38:33 +02:00
|
|
|
}
|
2018-03-29 17:01:24 +02:00
|
|
|
|
2017-05-10 11:04:06 +02:00
|
|
|
ngOnInit() {
|
2017-07-23 10:57:46 +02:00
|
|
|
if (this.loginService.hasPermission(2)) {
|
|
|
|
const fraction = this.loginService.getCurrentUser().squad.fraction;
|
2017-07-27 16:38:35 +02:00
|
|
|
this.promotionService.checkUnconfirmedPromotions(fraction);
|
|
|
|
this.awardingService.checkUnprocessedAwards(fraction);
|
2017-05-10 11:04:06 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
logout() {
|
|
|
|
this.loginService.logout();
|
2017-08-01 23:52:10 +02:00
|
|
|
this.router.navigate([RouteConfig.overviewPath]);
|
2017-05-10 11:04:06 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-03-29 17:01:24 +02:00
|
|
|
scrollToTop() {
|
|
|
|
this.document.body.scrollTop = 0; // For Safari
|
|
|
|
this.document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera
|
|
|
|
}
|
|
|
|
|
2017-05-10 11:04:06 +02:00
|
|
|
}
|
|
|
|
|