diff --git a/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.html b/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.html index abf4389..3b20d5a 100644 --- a/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.html +++ b/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.html @@ -1,2 +1,12 @@ -

{{station.commonName}}


- +{{station.commonName}}
+{{station.status.NbBikes}}
+{{station.status.NbDocks}}
+
+ +
+ diff --git a/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.scss b/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.scss index e69de29..583b745 100644 --- a/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.scss +++ b/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.scss @@ -0,0 +1,11 @@ +#route-button { + margin: 10px 0 0 0; + padding: 0; +} + +#chart { + padding: 0; + max-width: 400px; + max-height: 400px; + margin: 35px auto; +} diff --git a/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.ts b/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.ts index b363980..f4ddf59 100644 --- a/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.ts +++ b/projects/project-3/frontend/src/app/map/pop-up/pop-up.component.ts @@ -2,24 +2,44 @@ import {Component, OnInit} from '@angular/core'; import {IBikeStation} from '../../service/domain/bike-station'; import {Router} from '@angular/router'; +import {ApexChart, ApexNonAxisChartSeries, ApexPlotOptions} from 'ng-apexcharts'; + +export type ChartOptions = { + series: ApexNonAxisChartSeries; + chart: ApexChart; + labels: string[]; + plotOptions: ApexPlotOptions; +}; + + @Component({ selector: 'app-pop-up', templateUrl: './pop-up.component.html', styleUrls: ['./pop-up.component.scss'] }) export class PopUpComponent implements OnInit { - text = 'test'; station: IBikeStation; + public chartOptions: Partial; constructor(private router: Router) { } ngOnInit(): void { - this.text = 'test'; + const bikes = Math.round((this.station.status.NbBikes / this.station.status.NbDocks) * 100); + this.chartOptions = { + series: [bikes], + chart: { + height: 300, + width: 300, + type: 'radialBar' + }, + labels: ['Availability'] + }; } public route(): void { this.router.navigate(['/dashboard', this.station.id]); } + } diff --git a/projects/project-3/frontend/src/app/service/map.service.ts b/projects/project-3/frontend/src/app/service/map.service.ts index 7bc423d..0875d75 100644 --- a/projects/project-3/frontend/src/app/service/map.service.ts +++ b/projects/project-3/frontend/src/app/service/map.service.ts @@ -10,7 +10,7 @@ const createIcon = L.icon({ iconUrl: '../../assets/bike-point.png', iconSize: [60, 60], iconAnchor: [30, 60], - popupAnchor: [0, -53] + popupAnchor: [-118, -53] }); @Injectable({ @@ -41,16 +41,22 @@ export class MapService { showCoverageOnHover: true, zoomToBoundsOnClick: true }); - for (const station of data) { - const marker = L.marker([station.lat, station.lon], {icon: createIcon}).bindPopup(this.popUpService.makeAvailabilityPopUp(station)); - markerClusters.addLayer(marker); - } this.map.addLayer(markerClusters); + for (const station of data) { + const marker = L.marker([station.lat, station.lon], {icon: createIcon}); + markerClusters.addLayer(marker); + marker.on('click', e => e.target + .bindPopup(this.popUpService.makeAvailabilityPopUp(station), {maxWidth: 'auto'}) + .openPopup() + ); + marker.on('popupclose', e => e.target.unbindPopup()); + } }).catch((error) => { console.log('something went wrong: ' + JSON.stringify(error)); }); } + private async fetchStationGeoData(): Promise { return await this.client.get(environment.apiUrl + 'latest/bikepoints/').toPromise(); } diff --git a/projects/project-3/frontend/src/app/service/pop-up.service.ts b/projects/project-3/frontend/src/app/service/pop-up.service.ts index 0f41fd8..4fc8984 100644 --- a/projects/project-3/frontend/src/app/service/pop-up.service.ts +++ b/projects/project-3/frontend/src/app/service/pop-up.service.ts @@ -1,55 +1,18 @@ import {ComponentFactoryResolver, Injectable, Injector} from '@angular/core'; import {IBikeStation} from './domain/bike-station'; -import { - ApexAxisChartSeries, - ApexChart, - ApexDataLabels, - ApexFill, - ApexLegend, - ApexPlotOptions, - ApexStroke, - ApexTitleSubtitle, - ApexXAxis -} from 'ng-apexcharts'; -import {Router} from '@angular/router'; import {PopUpComponent} from '../map/pop-up/pop-up.component'; -export type ChartOptions = { - series: ApexAxisChartSeries; - chart: ApexChart; - dataLabels: ApexDataLabels; - plotOptions: ApexPlotOptions; - xaxis: ApexXAxis; - stroke: ApexStroke; - title: ApexTitleSubtitle; - fill: ApexFill; - legend: ApexLegend; -}; - @Injectable({ providedIn: 'root' }) export class PopUpService { - public chartOptions: Partial; constructor( - private router: Router, private componentFactoryResolver: ComponentFactoryResolver, private injector: Injector ) { } - // - makeAvailabilityPopUp(station: IBikeStation): any { const factory = this.componentFactoryResolver.resolveComponentFactory(PopUpComponent); const component = factory.create(this.injector); @@ -59,56 +22,4 @@ export class PopUpService { return component.location.nativeElement; } - - route(station: IBikeStation): void { - this.router.navigate(['/dashboard', station.id]); - } - - bindChartOptionsToGivenStation(station: IBikeStation): void { - this.chartOptions = { - series: [ - { - name: 'wenig vorhanden', - data: [44, 55, 41, 37, 22, 43, 21] - }, - { - name: 'moderat voll', - data: [53, 32, 33, 52, 13, 43, 32] - }, - { - name: 'voll', - data: [12, 17, 11, 9, 15, 11, 20] - } - ], - chart: { - type: 'bar', - height: 350, - stacked: true, - stackType: '100%' - }, - plotOptions: { - bar: { - horizontal: true - } - }, - stroke: { - width: 1, - colors: ['#fff'] - }, - title: { - text: 'Availability of Station: ' + station.commonName - }, - xaxis: { - categories: [] - }, - fill: { - opacity: 1 - }, - legend: { - position: 'top', - horizontalAlign: 'left', - offsetX: 40 - } - }; - } } diff --git a/projects/project-3/frontend/src/environments/environment.prod.ts b/projects/project-3/frontend/src/environments/environment.prod.ts index 3612073..e82d631 100644 --- a/projects/project-3/frontend/src/environments/environment.prod.ts +++ b/projects/project-3/frontend/src/environments/environment.prod.ts @@ -1,3 +1,4 @@ export const environment = { - production: true + production: true, + apiUrl: 'https://it-schwarz.net/api/' };