opt-cc/static/src/app/statistic/war/scoreboard/scoreboard.component.ts

107 lines
3.1 KiB
TypeScript
Raw Normal View History

2018-03-08 09:44:35 +01:00
import {Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';
2018-03-07 11:56:50 +01:00
import {War} from '../../../models/model-interfaces';
import {Fraction} from '../../../utils/fraction.enum';
import {PlayerUtils} from '../../../utils/player-utils';
2018-04-02 13:20:44 +02:00
import {saveAs} from 'file-saver/FileSaver';
@Component({
2018-03-08 10:17:10 +01:00
selector: 'cc-scoreboard',
templateUrl: './scoreboard.component.html',
styleUrls: ['./scoreboard.component.css', '../../../style/list-entry.css', '../../../style/hide-scrollbar.css']
})
2018-03-08 09:44:35 +01:00
export class ScoreboardComponent implements OnChanges {
readonly fraction = Fraction;
2018-03-07 11:56:50 +01:00
@Input() war: War;
2018-03-07 11:56:50 +01:00
@Input() fractionFilterSelected: string;
2018-03-07 11:56:50 +01:00
@Output() playerTabSwitch = new EventEmitter();
2018-04-26 12:26:07 +02:00
tableHead = [
2018-05-04 21:42:12 +02:00
{prop: 'name', head: 'Spieler'}, {prop: 'fraction', head: 'Fraktion'}, {prop: 'kill', head: 'Abschüsse'},
{prop: 'friendlyFire', head: 'Friendly Fire'}, {prop: 'vehicleLight', head: 'Fahrzeug (leicht)'},
2018-04-26 12:26:07 +02:00
{prop: 'vehicleHeavy', head: 'Fahrzeug (schwer)'}, {prop: 'vehicleAir', head: 'Fahrzeug (Luft)'},
2018-05-04 21:42:12 +02:00
{prop: 'revive', head: 'Revive'}, {prop: 'flagTouch', head: 'Eroberungen'}, {prop: 'death', head: 'Tode'},
2018-04-26 12:26:07 +02:00
{prop: 'respawn', head: 'Respawn'}
];
2018-04-02 13:20:44 +02:00
2018-03-07 11:56:50 +01:00
isSteamUUID = PlayerUtils.isSteamUUID;
cellHeight = 40;
2018-04-22 13:31:38 +02:00
columnWidth = 65;
rows = [];
2018-03-08 09:44:35 +01:00
reorderable = false;
customClasses = {
sortAscending: 'glyphicon glyphicon-triangle-top',
sortDescending: 'glyphicon glyphicon-triangle-bottom',
};
2018-02-26 08:53:51 +01:00
constructor(private elRef: ElementRef) {
}
selectPlayerDetail(view: number, player) {
this.playerTabSwitch.emit({
view: view,
player: player
2018-03-07 11:56:50 +01:00
});
}
ngOnChanges(changes: SimpleChanges) {
if (changes.war) {
this.rows = changes.war.currentValue.players;
2018-02-26 09:04:27 +01:00
this.elRef.nativeElement
.querySelector('.datatable-body')
.scrollTo(0, 0);
}
if (changes.fractionFilterSelected) {
2018-03-07 11:56:50 +01:00
this.filterPlayersByFraction(this.fractionFilterSelected);
}
}
filterPlayersByFraction(fraction?: string) {
if (fraction) {
this.rows = this.war.players.filter((player) => {
return player.fraction === fraction;
2018-03-07 11:56:50 +01:00
});
} else {
this.rows = this.war.players;
}
}
2018-04-02 13:20:44 +02:00
exportCSV() {
let csvOut = '';
for (let i = 0; i < this.tableHead.length; i++) {
csvOut += this.tableHead[i];
if (i !== this.tableHead.length - 1) {
csvOut += ',';
}
}
for (let j = 0; j < this.war.players.length; j++) {
const player = this.war.players[j];
csvOut += '\r\n';
csvOut += '"' + player.name + '",';
csvOut += player.fraction + ',';
csvOut += player.kill + ',';
csvOut += player.friendlyFire + ',';
2018-04-14 17:46:01 +02:00
csvOut += player.vehicleLight + ',';
csvOut += player.vehicleHeavy + ',';
csvOut += player.vehicleAir + ',';
2018-04-02 13:20:44 +02:00
csvOut += player.revive + ',';
csvOut += player.flagTouch + ',';
csvOut += player.death + ',';
csvOut += player.respawn;
}
const blob = new Blob([csvOut], {type: 'text/plain'});
saveAs(blob, this.war.title.toLowerCase().replace(' ', '_').concat('.csv'));
}
}