import { Component, OnInit } from '@angular/core'; import { EChartsOption } from 'echarts'; import { Observable } from 'rxjs'; import { map, tap } from 'rxjs/operators'; import { ApiService } from 'src/app/services/api.service'; import { SeoService } from 'src/app/services/seo.service'; @Component({ selector: 'app-difficulty-chart', templateUrl: './difficulty-chart.component.html', styleUrls: ['./difficulty-chart.component.scss'], styles: [` .loadingGraphs { position: absolute; top: 38%; left: calc(50% - 15px); z-index: 100; } `], }) export class DifficultyChartComponent implements OnInit { chartOptions: EChartsOption = {}; chartInitOptions = { renderer: 'svg' }; difficultyObservable$: Observable; isLoading = true; constructor( private seoService: SeoService, private apiService: ApiService, ) { this.seoService.setTitle($localize`:@@mining.difficulty:Difficulty`); } ngOnInit(): void { this.difficultyObservable$ = this.apiService.getHistoricalDifficulty$(undefined) .pipe( map(data => { return data.map(val => [val.timestamp, val.difficulty]) }), tap(data => { this.prepareChartOptions(data); this.isLoading = false; }) ) } prepareChartOptions(data) { this.chartOptions = { title: { text: $localize`:@@mining.difficulty:Difficulty`, left: 'center', textStyle: { color: '#FFF', }, }, tooltip: { show: true, trigger: 'axis', }, axisPointer: { type: 'line', }, xAxis: [ { type: 'time', } ], yAxis: { type: 'value', axisLabel: { fontSize: 11, formatter: function(val) { const diff = val / Math.pow(10, 12); // terra return diff.toString() + 'T'; } }, splitLine: { lineStyle: { type: 'dotted', color: '#ffffff66', opacity: 0.25, } } }, series: [ { data: data, type: 'line', smooth: false, lineStyle: { width: 3, }, areaStyle: {} }, ], }; } }