Add carousel for stats graphs

feature/user-self-management
Florian Hartwich 2017-09-02 13:08:54 +02:00
parent e6d1f7c5ba
commit 66244467a5
4 changed files with 93 additions and 76 deletions

View File

@ -35,11 +35,11 @@ import {WarService} from "./services/war-service/war.service";
import {DataTableModule} from "angular2-datatable";
import {NgxChartsModule} from "@swimlane/ngx-charts";
import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
import {AccordionModule} from "ngx-bootstrap";
import {AccordionModule, CarouselModule} from "ngx-bootstrap";
@NgModule({
imports: [BrowserModule, FormsModule, ReactiveFormsModule, appRouting, HttpModule, ClipboardModule, DataTableModule,
BrowserAnimationsModule, NgxChartsModule, AccordionModule.forRoot()],
BrowserAnimationsModule, NgxChartsModule, AccordionModule.forRoot(), CarouselModule.forRoot()],
providers: [
HttpClient,
LoginService,

View File

@ -1,3 +1,9 @@
.chart-container {
.slide-chart-container {
width: 1200px;
margin: auto;
}
:host /deep/ .carousel-control {
width: 5%;
cursor: pointer;
}

View File

@ -1,69 +1,71 @@
<h2>{{title}}</h2>
<h3>Gesamtpunktzahl</h3>
<div class="chart-container">
<ngx-charts-line-chart
[view]="[1050, 350]"
[scheme]="colorScheme"
[results]="pointSumData"
[gradient]="false"
[xAxis]="true"
[yAxis]="true"
[legend]="true"
[legendTitle]="''"
[showXAxisLabel]="true"
[showYAxisLabel]="true"
[xAxisLabel]="'Schlachtdatum'"
[yAxisLabel]="'Gesamtpunkte'"
[autoScale]="true"
(select)="onSelect($event)">
</ngx-charts-line-chart>
<h2 style="margin-bottom: 20px">{{title}}</h2>
<div class="btn btn-default" [style.background]="activeSlideIndex === 2 ? '#d9edf7':'white'"
(click)="goToSlide(2)" *ngIf="id != 'all'">Gesamtpunktzahl
</div>
<div class="btn btn-default" [style.background]="activeSlideIndex === 0 ? '#d9edf7':'white'"
(click)="goToSlide(0)">Punkte je Schlacht
</div>
<div class="btn btn-default" [style.background]="activeSlideIndex === 1 ? '#d9edf7':'white'"
(click)="goToSlide(1)">Spielerzahlen
</div>
<h3 style="padding-top: 300px;">Punkte je Schlacht</h3>
<div class="chart-container">
<ngx-charts-line-chart
[view]="[1050, 350]"
[scheme]="colorScheme"
[results]="pointData"
[gradient]="false"
[xAxis]="true"
[yAxis]="true"
[legend]="true"
[legendTitle]="''"
[showXAxisLabel]="true"
[showYAxisLabel]="true"
[xAxisLabel]="'Schlachtdatum'"
[yAxisLabel]="'Punkte'"
[autoScale]="false">
</ngx-charts-line-chart>
</div>
<h3 style="padding-top: 300px;">Spielerzahlen</h3>
<div class="chart-container">
<ngx-charts-line-chart
[view]="[1050, 350]"
[scheme]="colorScheme"
[results]="playerData"
[gradient]="false"
[xAxis]="true"
[yAxis]="true"
[legend]="true"
[legendTitle]="''"
[showXAxisLabel]="true"
[showYAxisLabel]="true"
[xAxisLabel]="'Schlachtdatum'"
[yAxisLabel]="'Anzahl Spieler'"
[autoScale]="true"
(select)="onSelect($event)">
</ngx-charts-line-chart>
</div>
<carousel [(activeSlide)]="activeSlideIndex">
<slide *ngIf="id != 'all'">
<div class="slide-chart-container">
<h3>Gesamtpunktzahl</h3>
<ngx-charts-line-chart
[view]="[1200, 500]"
[scheme]="colorScheme"
[results]="pointSumData"
[gradient]="false"
[xAxis]="true"
[yAxis]="true"
[legend]="true"
[legendTitle]="''"
[showXAxisLabel]="true"
[showYAxisLabel]="true"
[yAxisLabel]="'Gesamtpunkte'"
[autoScale]="true">
</ngx-charts-line-chart>
</div>
</slide>
<slide>
<div class="slide-chart-container">
<h3>Punkte je Schlacht</h3>
<ngx-charts-line-chart
[view]="[1200, 500]"
[scheme]="colorScheme"
[results]="pointData"
[gradient]="false"
[xAxis]="true"
[yAxis]="true"
[legend]="true"
[legendTitle]="''"
[showXAxisLabel]="true"
[showYAxisLabel]="true"
[yAxisLabel]="'Punkte'"
[autoScale]="false">
</ngx-charts-line-chart>
</div>
</slide>
<slide>
<div class="slide-chart-container">
<h3>Spielerzahlen</h3>
<ngx-charts-line-chart
[view]="[1200, 500]"
[scheme]="colorScheme"
[results]="playerData"
[gradient]="false"
[xAxis]="true"
[yAxis]="true"
[legend]="true"
[legendTitle]="''"
[showXAxisLabel]="true"
[showYAxisLabel]="true"
[yAxisLabel]="'Anzahl Spieler'"
[autoScale]="true">
</ngx-charts-line-chart>
</div>
</slide>
</carousel>

View File

@ -1,17 +1,21 @@
import {Component} from "@angular/core";
import {WarService} from "../../services/war-service/war.service";
import {ActivatedRoute} from "@angular/router";
import {CarouselConfig} from "ngx-bootstrap";
@Component({
selector: 'stats-overview',
templateUrl: './stats-overview.component.html',
styleUrls: ['./stats-overview.component.css'],
inputs: ['campaigns']
inputs: ['campaigns'],
providers: [{provide: CarouselConfig, useValue: {interval: false}}]
})
export class StatisticOverviewComponent {
id = "";
title = "";
activeSlideIndex: number = 0;
pointData: any[] = [];
pointSumData: any[] = [];
@ -29,24 +33,25 @@ export class StatisticOverviewComponent {
this.route.params
.map(params => params['id'])
.subscribe((id) => {
this.id = id;
if (this.warService.campaigns) {
this.initWars(this.warService.campaigns, id);
this.initWars(this.warService.campaigns);
} else {
this.warService.getAllCampaigns().subscribe(campaigns => {
this.initWars(campaigns, id);
this.initWars(campaigns);
})
}
});
}
initWars(campaigns, id) {
initWars(campaigns) {
let wars = [];
let itemsProcessed = 0;
campaigns = campaigns.filter(campaign => id === 'all' || campaign._id === id);
campaigns = campaigns.filter(campaign => this.id === 'all' || campaign._id === this.id);
campaigns.forEach(campaign => {
if (id === 'all') {
this.title = "Gesamtübersicht"
if (this.id === 'all') {
this.title = "Gesamtübersicht";
} else {
this.title = campaign.title
}
@ -58,6 +63,10 @@ export class StatisticOverviewComponent {
})
}
goToSlide(index: number) {
this.activeSlideIndex = index;
}
initChart(wars: any[]) {
let pointsObj = [
{