opt-cc/static/src/app/statistic/stats.component.ts

112 lines
3.4 KiB
TypeScript

import {Component, OnInit} from '@angular/core';
import {Campaign} from '../models/model-interfaces';
import {CampaignService} from '../services/logs/campaign.service';
import {ActivatedRoute, Router} from '@angular/router';
import {TranslateService} from '@ngx-translate/core';
import {SettingsService} from '../services/settings.service';
import {WarService} from '../services/logs/war.service';
import {Observable} from 'rxjs';
import {BaseConfig} from '../app.config';
@Component({
selector: 'cc-stats',
templateUrl: './stats.component.html',
styleUrls: ['./stats.component.scss']
})
export class StatisticComponent implements OnInit {
selectedCampaign: Campaign = {};
campaigns: Campaign[] = [];
collapsed = false;
isSmallLayout = false;
constructor(private campaignService: CampaignService,
private warService: WarService,
private router: Router,
private route: ActivatedRoute,
private translate: TranslateService,
private settingsService: SettingsService) {
this.settingsService.getLanguage().subscribe((language) => this.translate.setDefaultLang(language));
}
ngOnInit() {
this.campaignService.getAllCampaigns()
.filter(campaigns => campaigns.length !== 0)
.subscribe((campaigns) => {
this.campaigns = campaigns;
this.resolveCampaignFromUrl();
});
this.isSmallLayout = window.innerWidth <= BaseConfig.responsive.breakpointPx;
Observable.fromEvent(window, 'resize').subscribe(event => {
this.isSmallLayout = event.target['innerWidth'] <= BaseConfig.responsive.breakpointPx;
});
}
resolveCampaignFromUrl() {
const url = this.router.url;
const idFetchPattern = /right:.*\/(.*)\)$/;
if (url.includes('right:overview') || url.includes('right:highscore')) {
const id = idFetchPattern.exec(url)[1];
if (id === 'all') {
this.switchCampaign({_id: id});
} else {
const filteredCampaigns = this.campaigns.filter(c => c._id === id);
if (filteredCampaigns.length === 1) {
this.switchCampaign(filteredCampaigns[0]);
}
}
} else if (url.includes('right:war')) {
const id = idFetchPattern.exec(url)[1];
this.campaignService.getCampaignByWarId(id).subscribe((campaign) => {
this.switchCampaign(campaign);
});
} else {
this.switchCampaign(this.campaigns[0]);
}
}
switchCampaign(campaign) {
if (campaign._id !== 'all') {
campaign.wars$ = this.warService.wars$;
this.warService.getAllWars(campaign._id).subscribe((wars) => {
this.selectedCampaign = campaign;
});
} else {
this.selectedCampaign = campaign;
}
if (campaign._id === 'all' || this.router.url.includes('/overview/all')) {
setTimeout(_ => {
window.dispatchEvent(new Event('resize'));
});
}
}
toggleCollapse() {
this.collapsed = !this.collapsed;
setTimeout(_ => {
window.dispatchEvent(new Event('resize'));
});
}
deleteCampaign(campaign) {
this.translate.get('stats.campaign.manage.delete.confirm', {title: campaign.title}).subscribe((confirmQuestion: string) => {
if (confirm(confirmQuestion)) {
this.campaignService.deleteCampaign(campaign)
.subscribe((res) => {
});
}
});
}
editCampaign(selectCampaign) {
this.router.navigate([{outlets: {'right': ['campaign', selectCampaign._id]}}], {relativeTo: this.route});
}
}