import { Component, OnInit, Input, Inject, LOCALE_ID, ChangeDetectionStrategy } from '@angular/core'; import { formatDate } from '@angular/common'; import { EChartsOption } from 'echarts'; import { OnChanges } from '@angular/core'; import { StorageService } from 'src/app/services/storage.service'; @Component({ selector: 'app-incoming-transactions-graph', templateUrl: './incoming-transactions-graph.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) export class IncomingTransactionsGraphComponent implements OnInit, OnChanges { @Input() data: any; @Input() theme: string; @Input() height: number | string = '200'; @Input() right: number | string = '10'; @Input() top: number | string = '20'; @Input() left: number | string = '0'; @Input() template: ('widget' | 'advanced') = 'widget'; mempoolStatsChartOption: EChartsOption = {}; mempoolStatsChartInitOption = { renderer: 'svg' }; windowPreference: string; constructor( @Inject(LOCALE_ID) private locale: string, private storageService: StorageService, ) { } ngOnChanges(): void { this.windowPreference = this.storageService.getValue('graphWindowPreference'); this.mountChart(); } ngOnInit(): void { this.mountChart(); } mountChart(): void { this.mempoolStatsChartOption = { grid: { height: this.height, right: this.right, top: this.top, left: this.left, }, animation: false, dataZoom: [{ type: 'inside', realtime: true, zoomOnMouseWheel: (this.template === 'advanced') ? true : false, maxSpan: 100, minSpan: 10, }, { show: (this.template === 'advanced') ? true : false, type: 'slider', brushSelect: false, realtime: true, selectedDataBackground: { lineStyle: { color: '#fff', opacity: 0.45, }, areaStyle: { opacity: 0, } } }], tooltip: { trigger: 'axis', position: (pos, params, el, elRect, size) => { const obj = { top: -20 }; obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 80; return obj; }, extraCssText: `width: ${(['2h', '24h'].includes(this.windowPreference) || this.template === 'widget') ? '125px' : '135px'}; background: transparent; border: none; box-shadow: none;`, axisPointer: { type: 'line', }, formatter: (params: any) => { const colorSpan = (color: string) => ``; let itemFormatted = '