Save fee rates legend preference - Fix xaxis label
This commit is contained in:
		
							parent
							
								
									31ded69a4c
								
							
						
					
					
						commit
						d0b27813b0
					
				@ -6,7 +6,7 @@ import { ApiService } from 'src/app/services/api.service';
 | 
				
			|||||||
import { SeoService } from 'src/app/services/seo.service';
 | 
					import { SeoService } from 'src/app/services/seo.service';
 | 
				
			||||||
import { formatNumber } from '@angular/common';
 | 
					import { formatNumber } from '@angular/common';
 | 
				
			||||||
import { FormBuilder, FormGroup } from '@angular/forms';
 | 
					import { FormBuilder, FormGroup } from '@angular/forms';
 | 
				
			||||||
import { formatterXAxis } from 'src/app/shared/graphs.utils';
 | 
					import { formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from 'src/app/shared/graphs.utils';
 | 
				
			||||||
import { StorageService } from 'src/app/services/storage.service';
 | 
					import { StorageService } from 'src/app/services/storage.service';
 | 
				
			||||||
import { MiningService } from 'src/app/services/mining.service';
 | 
					import { MiningService } from 'src/app/services/mining.service';
 | 
				
			||||||
import { selectPowerOfTen } from 'src/app/bitcoin.utils';
 | 
					import { selectPowerOfTen } from 'src/app/bitcoin.utils';
 | 
				
			||||||
@ -152,7 +152,7 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
      grid: {
 | 
					      grid: {
 | 
				
			||||||
        right: this.right,
 | 
					        right: this.right,
 | 
				
			||||||
        left: this.left,
 | 
					        left: this.left,
 | 
				
			||||||
        bottom: 70,
 | 
					        bottom: 80,
 | 
				
			||||||
        top: this.isMobile() ? 10 : 50,
 | 
					        top: this.isMobile() ? 10 : 50,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      tooltip: {
 | 
					      tooltip: {
 | 
				
			||||||
@ -189,17 +189,28 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
          return tooltip;
 | 
					          return tooltip;
 | 
				
			||||||
        }.bind(this)
 | 
					        }.bind(this)
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      xAxis: data.series.length === 0 ? undefined : {
 | 
					      xAxis: data.series.length === 0 ? undefined :
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        name: formatterXAxisLabel(this.locale, this.timespan),
 | 
				
			||||||
 | 
					        nameLocation: 'middle',
 | 
				
			||||||
 | 
					        nameTextStyle: {
 | 
				
			||||||
 | 
					          padding: [10, 0, 0, 0],
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        type: 'category',
 | 
					        type: 'category',
 | 
				
			||||||
        splitNumber: this.isMobile() ? 5 : 10,
 | 
					        boundaryGap: false,
 | 
				
			||||||
 | 
					        axisLine: { onZero: true },
 | 
				
			||||||
        axisLabel: {
 | 
					        axisLabel: {
 | 
				
			||||||
 | 
					          formatter: val => formatterXAxisTimeCategory(this.locale, this.timespan, parseInt(val, 10)),
 | 
				
			||||||
 | 
					          align: 'center',
 | 
				
			||||||
 | 
					          fontSize: 11,
 | 
				
			||||||
 | 
					          lineHeight: 12,
 | 
				
			||||||
          hideOverlap: true,
 | 
					          hideOverlap: true,
 | 
				
			||||||
          formatter: val => formatterXAxis(this.locale, this.timespan, parseInt(val, 10)),
 | 
					          padding: [0, 5],
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      legend: (data.series.length === 0) ? undefined : {
 | 
					      legend: (data.series.length === 0) ? undefined : {
 | 
				
			||||||
        data: data.legends,
 | 
					        data: data.legends,
 | 
				
			||||||
        selected: {
 | 
					        selected: JSON.parse(this.storageService.getValue('fee_rates_legend')) ?? {
 | 
				
			||||||
          'Min': true,
 | 
					          'Min': true,
 | 
				
			||||||
          '10th': true,
 | 
					          '10th': true,
 | 
				
			||||||
          '25th': true,
 | 
					          '25th': true,
 | 
				
			||||||
@ -207,7 +218,8 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
          '75th': true,
 | 
					          '75th': true,
 | 
				
			||||||
          '90th': true,
 | 
					          '90th': true,
 | 
				
			||||||
          'Max': false,
 | 
					          'Max': false,
 | 
				
			||||||
        }
 | 
					        },
 | 
				
			||||||
 | 
					        id: 4242,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      yAxis: data.series.length === 0 ? undefined : {
 | 
					      yAxis: data.series.length === 0 ? undefined : {
 | 
				
			||||||
        position: 'left',
 | 
					        position: 'left',
 | 
				
			||||||
@ -216,7 +228,7 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
          formatter: (val) => {
 | 
					          formatter: (val) => {
 | 
				
			||||||
            const selectedPowerOfTen: any = selectPowerOfTen(val);
 | 
					            const selectedPowerOfTen: any = selectPowerOfTen(val);
 | 
				
			||||||
            const newVal = Math.round(val / selectedPowerOfTen.divider);
 | 
					            const newVal = Math.round(val / selectedPowerOfTen.divider);
 | 
				
			||||||
            return `${newVal}${selectedPowerOfTen.unit} sats/vB`;
 | 
					            return `${newVal}${selectedPowerOfTen.unit} s/vB`;
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        splitLine: {
 | 
					        splitLine: {
 | 
				
			||||||
@ -227,7 +239,7 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
          }
 | 
					          }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        type: 'value',
 | 
					        type: 'value',
 | 
				
			||||||
        max: () => this.timespan === 'all' ? 5000 : undefined,
 | 
					        max: (val) => this.timespan === 'all' ? Math.min(val.max, 5000) : undefined,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      series: data.series,
 | 
					      series: data.series,
 | 
				
			||||||
      dataZoom: [{
 | 
					      dataZoom: [{
 | 
				
			||||||
@ -235,7 +247,7 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
        realtime: true,
 | 
					        realtime: true,
 | 
				
			||||||
        zoomLock: true,
 | 
					        zoomLock: true,
 | 
				
			||||||
        maxSpan: 100,
 | 
					        maxSpan: 100,
 | 
				
			||||||
        minSpan: 10,
 | 
					        minSpan: 5,
 | 
				
			||||||
        moveOnMouseMove: false,
 | 
					        moveOnMouseMove: false,
 | 
				
			||||||
      }, {
 | 
					      }, {
 | 
				
			||||||
        showDetail: false,
 | 
					        showDetail: false,
 | 
				
			||||||
@ -264,6 +276,7 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.chartInstance = ec;
 | 
					    this.chartInstance = ec;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.chartInstance.on('click', (e) => {
 | 
					    this.chartInstance.on('click', (e) => {
 | 
				
			||||||
      if (e.data.data === 9999) { // "Other"
 | 
					      if (e.data.data === 9999) { // "Other"
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@ -275,6 +288,10 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.chartInstance.on('legendselectchanged', (e) => {
 | 
				
			||||||
 | 
					      this.storageService.setValue('fee_rates_legend', JSON.stringify(e.selected));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  isMobile() {
 | 
					  isMobile() {
 | 
				
			||||||
 | 
				
			|||||||
@ -175,7 +175,7 @@ export class BlockFeesGraphComponent implements OnInit {
 | 
				
			|||||||
        realtime: true,
 | 
					        realtime: true,
 | 
				
			||||||
        zoomLock: true,
 | 
					        zoomLock: true,
 | 
				
			||||||
        maxSpan: 100,
 | 
					        maxSpan: 100,
 | 
				
			||||||
        minSpan: 10,
 | 
					        minSpan: 5,
 | 
				
			||||||
        moveOnMouseMove: false,
 | 
					        moveOnMouseMove: false,
 | 
				
			||||||
      }, {
 | 
					      }, {
 | 
				
			||||||
        showDetail: false,
 | 
					        showDetail: false,
 | 
				
			||||||
 | 
				
			|||||||
@ -175,7 +175,7 @@ export class BlockRewardsGraphComponent implements OnInit {
 | 
				
			|||||||
        realtime: true,
 | 
					        realtime: true,
 | 
				
			||||||
        zoomLock: true,
 | 
					        zoomLock: true,
 | 
				
			||||||
        maxSpan: 100,
 | 
					        maxSpan: 100,
 | 
				
			||||||
        minSpan: 10,
 | 
					        minSpan: 5,
 | 
				
			||||||
        moveOnMouseMove: false,
 | 
					        moveOnMouseMove: false,
 | 
				
			||||||
      }, {
 | 
					      }, {
 | 
				
			||||||
        showDetail: false,
 | 
					        showDetail: false,
 | 
				
			||||||
 | 
				
			|||||||
@ -328,7 +328,7 @@ export class HashrateChartComponent implements OnInit {
 | 
				
			|||||||
        realtime: true,
 | 
					        realtime: true,
 | 
				
			||||||
        zoomLock: true,
 | 
					        zoomLock: true,
 | 
				
			||||||
        maxSpan: 100,
 | 
					        maxSpan: 100,
 | 
				
			||||||
        minSpan: 10,
 | 
					        minSpan: 5,
 | 
				
			||||||
        moveOnMouseMove: false,
 | 
					        moveOnMouseMove: false,
 | 
				
			||||||
      }, {
 | 
					      }, {
 | 
				
			||||||
        showDetail: false,
 | 
					        showDetail: false,
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@ export const formatterXAxis = (
 | 
				
			|||||||
  windowPreference: string,
 | 
					  windowPreference: string,
 | 
				
			||||||
  value: string | number
 | 
					  value: string | number
 | 
				
			||||||
) => {
 | 
					) => {
 | 
				
			||||||
  if (typeof value === 'string' && value.length === 0){
 | 
					  if (typeof value === 'string' && value.length === 0) {
 | 
				
			||||||
    return null;
 | 
					    return null;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -22,8 +22,9 @@ export const formatterXAxis = (
 | 
				
			|||||||
      return date.toLocaleTimeString(locale, { month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric' });
 | 
					      return date.toLocaleTimeString(locale, { month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric' });
 | 
				
			||||||
    case '2y':
 | 
					    case '2y':
 | 
				
			||||||
    case '3y':
 | 
					    case '3y':
 | 
				
			||||||
    case 'all':
 | 
					 | 
				
			||||||
      return date.toLocaleDateString(locale, { year: 'numeric', month: 'short', day: 'numeric' });
 | 
					      return date.toLocaleDateString(locale, { year: 'numeric', month: 'short', day: 'numeric' });
 | 
				
			||||||
 | 
					    case 'all':
 | 
				
			||||||
 | 
					      return date.toLocaleDateString(locale, { year: 'numeric', month: 'short' });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -36,6 +37,7 @@ export const formatterXAxisLabel = (
 | 
				
			|||||||
    case '2h':
 | 
					    case '2h':
 | 
				
			||||||
    case '24h':
 | 
					    case '24h':
 | 
				
			||||||
      return date.toLocaleDateString(locale, { year: 'numeric', month: 'short', day: 'numeric' });
 | 
					      return date.toLocaleDateString(locale, { year: 'numeric', month: 'short', day: 'numeric' });
 | 
				
			||||||
 | 
					    case '3d':
 | 
				
			||||||
    case '1w':
 | 
					    case '1w':
 | 
				
			||||||
      return date.toLocaleDateString(locale, { year: 'numeric', month: 'long' });
 | 
					      return date.toLocaleDateString(locale, { year: 'numeric', month: 'long' });
 | 
				
			||||||
    case '1m':
 | 
					    case '1m':
 | 
				
			||||||
@ -48,3 +50,30 @@ export const formatterXAxisLabel = (
 | 
				
			|||||||
      return null;
 | 
					      return null;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const formatterXAxisTimeCategory = (
 | 
				
			||||||
 | 
					  locale: string,
 | 
				
			||||||
 | 
					  windowPreference: string,
 | 
				
			||||||
 | 
					  value: number
 | 
				
			||||||
 | 
					) => {
 | 
				
			||||||
 | 
					  const date = new Date(value);
 | 
				
			||||||
 | 
					  switch (windowPreference) {
 | 
				
			||||||
 | 
					    case '2h':
 | 
				
			||||||
 | 
					      return date.toLocaleTimeString(locale, { hour: 'numeric', minute: 'numeric' });
 | 
				
			||||||
 | 
					    case '24h':
 | 
				
			||||||
 | 
					      return date.toLocaleTimeString(locale, { weekday: 'short', hour: 'numeric' });
 | 
				
			||||||
 | 
					    case '3d':
 | 
				
			||||||
 | 
					    case '1w':
 | 
				
			||||||
 | 
					      return date.toLocaleTimeString(locale, { month: 'short', day: 'numeric', hour: 'numeric' });
 | 
				
			||||||
 | 
					    case '1m':
 | 
				
			||||||
 | 
					    case '3m':
 | 
				
			||||||
 | 
					      return date.toLocaleDateString(locale, { month: 'long', day: 'numeric' });
 | 
				
			||||||
 | 
					    case '6m':
 | 
				
			||||||
 | 
					    case '1y':
 | 
				
			||||||
 | 
					      return date.toLocaleDateString(locale, { year: 'numeric', month: 'short', day: 'numeric' });
 | 
				
			||||||
 | 
					    case '2y':
 | 
				
			||||||
 | 
					    case '3y':
 | 
				
			||||||
 | 
					    case 'all':
 | 
				
			||||||
 | 
					      return date.toLocaleDateString(locale, { year: 'numeric', month: 'long' });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user