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

95 lines
2.9 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';
@Component({
selector: 'cc-stats',
templateUrl: './stats.component.html',
styleUrls: ['./stats.component.css']
})
export class StatisticComponent implements OnInit {
selectedCampaign: Campaign = {};
campaigns: Campaign[] = [];
collapsed = false;
constructor(private campaignService: CampaignService,
private router: Router,
private route: ActivatedRoute,
private translate: TranslateService,
private settingsService: SettingsService) {
this.settingsService.getLanguage().subscribe((language) => this.translate.setDefaultLang(language));
}
ngOnInit() {
this.campaignService.getAllCampaignsWithWars().subscribe((campaigns) => {
this.campaigns = campaigns;
// TODO: next line has to die!
this.campaignService.campaigns = campaigns;
this.selectedCampaign = this.resolveCampaignFromUrl();
this.switchCampaign(this.selectedCampaign);
});
}
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') {
return {_id: id}
}
const filteredCampaigns = this.campaigns.filter(c => c._id === id);
if (filteredCampaigns.length === 1) {
return filteredCampaigns[0];
}
}
if (url.includes('right:war')) {
const id = idFetchPattern.exec(url)[1];
const filteredCampaigns = this.campaigns.filter(c => c.wars.filter(war => war._id === id).length > 0);
if (filteredCampaigns.length === 1) {
return filteredCampaigns[0];
}
}
return this.campaigns[0]
}
switchCampaign(campaign) {
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._id)
.subscribe((res) => {
this.campaigns.splice(this.campaigns.indexOf(campaign), 1);
});
}
});
}
editCampaign(selectCampaign) {
this.router.navigate([{outlets: {'right': ['campaign', selectCampaign._id]}}], {relativeTo: this.route});
}
}