Add #{timespan} in mining charts urls for easier sharing
This commit is contained in:
		
							parent
							
								
									c5bcf76353
								
							
						
					
					
						commit
						d28fe93360
					
				@ -9,34 +9,34 @@
 | 
				
			|||||||
    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats">
 | 
					    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats">
 | 
				
			||||||
      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
					      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'24h'" fragment="24h"> 24h
 | 
					          <input ngbButton type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 24h
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3d'" fragment="3d"> 3D
 | 
					          <input ngbButton type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 3D
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1w'" fragment="1w"> 1W
 | 
					          <input ngbButton type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 1W
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1m'" fragment="1m"> 1M
 | 
					          <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 1M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3m'" fragment="3m"> 3M
 | 
					          <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 3M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'6m'" fragment="6m"> 6M
 | 
					          <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 6M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1y'" fragment="1y"> 1Y
 | 
					          <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 1Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'2y'" fragment="2y"> 2Y
 | 
					          <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 2Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3y'" fragment="3y"> 3Y
 | 
					          <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 3Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'all'" fragment="all"> ALL
 | 
					          <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> ALL
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </form>
 | 
					    </form>
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@ import { MiningService } from 'src/app/services/mining.service';
 | 
				
			|||||||
import { selectPowerOfTen } from 'src/app/bitcoin.utils';
 | 
					import { selectPowerOfTen } from 'src/app/bitcoin.utils';
 | 
				
			||||||
import { RelativeUrlPipe } from 'src/app/shared/pipes/relative-url/relative-url.pipe';
 | 
					import { RelativeUrlPipe } from 'src/app/shared/pipes/relative-url/relative-url.pipe';
 | 
				
			||||||
import { StateService } from 'src/app/services/state.service';
 | 
					import { StateService } from 'src/app/services/state.service';
 | 
				
			||||||
import { Router } from '@angular/router';
 | 
					import { ActivatedRoute, Router } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-block-fee-rates-graph',
 | 
					  selector: 'app-block-fee-rates-graph',
 | 
				
			||||||
@ -56,6 +56,7 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
    private stateService: StateService,
 | 
					    private stateService: StateService,
 | 
				
			||||||
    private router: Router,
 | 
					    private router: Router,
 | 
				
			||||||
    private zone: NgZone,
 | 
					    private zone: NgZone,
 | 
				
			||||||
 | 
					    private route: ActivatedRoute,
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: '1y' });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: '1y' });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue('1y');
 | 
					    this.radioGroupForm.controls.dateSpan.setValue('1y');
 | 
				
			||||||
@ -67,9 +68,17 @@ export class BlockFeeRatesGraphComponent implements OnInit {
 | 
				
			|||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
					    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.route
 | 
				
			||||||
 | 
					      .fragment
 | 
				
			||||||
 | 
					      .subscribe((fragment) => {
 | 
				
			||||||
 | 
					        if (['24h', '3d', '1w', '1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) {
 | 
				
			||||||
 | 
					          this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: true });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.statsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
					    this.statsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
				
			||||||
      .pipe(
 | 
					      .pipe(
 | 
				
			||||||
        startWith(this.miningWindowPreference),
 | 
					        startWith(this.radioGroupForm.controls.dateSpan.value),
 | 
				
			||||||
        switchMap((timespan) => {
 | 
					        switchMap((timespan) => {
 | 
				
			||||||
          this.storageService.setValue('miningWindowPreference', timespan);
 | 
					          this.storageService.setValue('miningWindowPreference', timespan);
 | 
				
			||||||
          this.timespan = timespan;
 | 
					          this.timespan = timespan;
 | 
				
			||||||
 | 
				
			|||||||
@ -9,34 +9,34 @@
 | 
				
			|||||||
    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats">
 | 
					    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats">
 | 
				
			||||||
      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
					      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'24h'" fragment="24h"> 24h
 | 
					          <input ngbButton type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 24h
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3d'" fragment="3d"> 3D
 | 
					          <input ngbButton type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 3D
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1w'" fragment="1w"> 1W
 | 
					          <input ngbButton type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 1W
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1m'" fragment="1m"> 1M
 | 
					          <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 1M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3m'" fragment="3m"> 3M
 | 
					          <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 3M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'6m'" fragment="6m"> 6M
 | 
					          <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 6M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1y'" fragment="1y"> 1Y
 | 
					          <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 1Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'2y'" fragment="2y"> 2Y
 | 
					          <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 2Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3y'" fragment="3y"> 3Y
 | 
					          <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 3Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'all'" fragment="all"> ALL
 | 
					          <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> ALL
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </form>
 | 
					    </form>
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,7 @@ import { FormBuilder, FormGroup } from '@angular/forms';
 | 
				
			|||||||
import { download, formatterXAxis, formatterXAxisLabel } from 'src/app/shared/graphs.utils';
 | 
					import { download, formatterXAxis, formatterXAxisLabel } 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 { ActivatedRoute } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-block-fees-graph',
 | 
					  selector: 'app-block-fees-graph',
 | 
				
			||||||
@ -48,7 +49,8 @@ export class BlockFeesGraphComponent implements OnInit {
 | 
				
			|||||||
    private apiService: ApiService,
 | 
					    private apiService: ApiService,
 | 
				
			||||||
    private formBuilder: FormBuilder,
 | 
					    private formBuilder: FormBuilder,
 | 
				
			||||||
    private storageService: StorageService,
 | 
					    private storageService: StorageService,
 | 
				
			||||||
    private miningService: MiningService
 | 
					    private miningService: MiningService,
 | 
				
			||||||
 | 
					    private route: ActivatedRoute,
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: '1y' });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: '1y' });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue('1y');
 | 
					    this.radioGroupForm.controls.dateSpan.setValue('1y');
 | 
				
			||||||
@ -60,9 +62,17 @@ export class BlockFeesGraphComponent implements OnInit {
 | 
				
			|||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
					    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.route
 | 
				
			||||||
 | 
					      .fragment
 | 
				
			||||||
 | 
					      .subscribe((fragment) => {
 | 
				
			||||||
 | 
					        if (['24h', '3d', '1w', '1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) {
 | 
				
			||||||
 | 
					          this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: true });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.statsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
					    this.statsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
				
			||||||
      .pipe(
 | 
					      .pipe(
 | 
				
			||||||
        startWith(this.miningWindowPreference),
 | 
					        startWith(this.radioGroupForm.controls.dateSpan.value),
 | 
				
			||||||
        switchMap((timespan) => {
 | 
					        switchMap((timespan) => {
 | 
				
			||||||
          this.storageService.setValue('miningWindowPreference', timespan);
 | 
					          this.storageService.setValue('miningWindowPreference', timespan);
 | 
				
			||||||
          this.timespan = timespan;
 | 
					          this.timespan = timespan;
 | 
				
			||||||
 | 
				
			|||||||
@ -10,34 +10,34 @@
 | 
				
			|||||||
    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats">
 | 
					    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats">
 | 
				
			||||||
      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
					      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'24h'" fragment="24h"> 24h
 | 
					          <input ngbButton type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 24h
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3d'" fragment="3d"> 3D
 | 
					          <input ngbButton type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 3D
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1w'" fragment="1w"> 1W
 | 
					          <input ngbButton type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 1W
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1m'" fragment="1m"> 1M
 | 
					          <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 1M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3m'" fragment="3m"> 3M
 | 
					          <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 3M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'6m'" fragment="6m"> 6M
 | 
					          <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 6M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1y'" fragment="1y"> 1Y
 | 
					          <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 1Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'2y'" fragment="2y"> 2Y
 | 
					          <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 2Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3y'" fragment="3y"> 3Y
 | 
					          <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 3Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'all'" fragment="all"> ALL
 | 
					          <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> ALL
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </form>
 | 
					    </form>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core';
 | 
					import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core';
 | 
				
			||||||
import { EChartsOption, graphic } from 'echarts';
 | 
					import { EChartsOption, graphic } from 'echarts';
 | 
				
			||||||
import { Observable } from 'rxjs';
 | 
					import { Observable } from 'rxjs';
 | 
				
			||||||
import { map, share, startWith, switchMap, tap } from 'rxjs/operators';
 | 
					import { map, share, startWith, switchMap, tap } from 'rxjs/operators';
 | 
				
			||||||
@ -9,6 +9,7 @@ import { FormBuilder, FormGroup } from '@angular/forms';
 | 
				
			|||||||
import { download, formatterXAxis, formatterXAxisLabel } from 'src/app/shared/graphs.utils';
 | 
					import { download, formatterXAxis, formatterXAxisLabel } from 'src/app/shared/graphs.utils';
 | 
				
			||||||
import { MiningService } from 'src/app/services/mining.service';
 | 
					import { MiningService } from 'src/app/services/mining.service';
 | 
				
			||||||
import { StorageService } from 'src/app/services/storage.service';
 | 
					import { StorageService } from 'src/app/services/storage.service';
 | 
				
			||||||
 | 
					import { ActivatedRoute } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-block-rewards-graph',
 | 
					  selector: 'app-block-rewards-graph',
 | 
				
			||||||
@ -48,7 +49,8 @@ export class BlockRewardsGraphComponent implements OnInit {
 | 
				
			|||||||
    private apiService: ApiService,
 | 
					    private apiService: ApiService,
 | 
				
			||||||
    private formBuilder: FormBuilder,
 | 
					    private formBuilder: FormBuilder,
 | 
				
			||||||
    private miningService: MiningService,
 | 
					    private miningService: MiningService,
 | 
				
			||||||
    private storageService: StorageService
 | 
					    private storageService: StorageService,
 | 
				
			||||||
 | 
					    private route: ActivatedRoute,
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -58,9 +60,17 @@ export class BlockRewardsGraphComponent implements OnInit {
 | 
				
			|||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
					    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.route
 | 
				
			||||||
 | 
					      .fragment
 | 
				
			||||||
 | 
					      .subscribe((fragment) => {
 | 
				
			||||||
 | 
					        if (['24h', '3d', '1w', '1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) {
 | 
				
			||||||
 | 
					          this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: true });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.statsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
					    this.statsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
				
			||||||
      .pipe(
 | 
					      .pipe(
 | 
				
			||||||
        startWith(this.miningWindowPreference),
 | 
					        startWith(this.radioGroupForm.controls.dateSpan.value),
 | 
				
			||||||
        switchMap((timespan) => {
 | 
					        switchMap((timespan) => {
 | 
				
			||||||
          this.storageService.setValue('miningWindowPreference', timespan);
 | 
					          this.storageService.setValue('miningWindowPreference', timespan);
 | 
				
			||||||
          this.timespan = timespan;
 | 
					          this.timespan = timespan;
 | 
				
			||||||
 | 
				
			|||||||
@ -9,34 +9,34 @@
 | 
				
			|||||||
    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(blockSizesWeightsObservable$ | async) as stats">
 | 
					    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(blockSizesWeightsObservable$ | async) as stats">
 | 
				
			||||||
      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
					      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'24h'" fragment="24h"> 24h
 | 
					          <input ngbButton type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 24h
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3d'" fragment="3d"> 3D
 | 
					          <input ngbButton type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 3D
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1w'" fragment="1w"> 1W
 | 
					          <input ngbButton type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 1W
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1m'" fragment="1m"> 1M
 | 
					          <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 1M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3m'" fragment="3m"> 3M
 | 
					          <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 3M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'6m'" fragment="6m"> 6M
 | 
					          <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 6M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1y'" fragment="1y"> 1Y
 | 
					          <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 1Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'2y'" fragment="2y"> 2Y
 | 
					          <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 2Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3y'" fragment="3y"> 3Y
 | 
					          <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 3Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'all'" fragment="all"> ALL
 | 
					          <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> ALL
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </form>
 | 
					    </form>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding, NgZone } from '@angular/core';
 | 
					import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core';
 | 
				
			||||||
import { EChartsOption} from 'echarts';
 | 
					import { EChartsOption} from 'echarts';
 | 
				
			||||||
import { Observable } from 'rxjs';
 | 
					import { Observable } from 'rxjs';
 | 
				
			||||||
import { map, share, startWith, switchMap, tap } from 'rxjs/operators';
 | 
					import { map, share, startWith, switchMap, tap } from 'rxjs/operators';
 | 
				
			||||||
@ -8,8 +8,7 @@ import { formatNumber } from '@angular/common';
 | 
				
			|||||||
import { FormBuilder, FormGroup } from '@angular/forms';
 | 
					import { FormBuilder, FormGroup } from '@angular/forms';
 | 
				
			||||||
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 { StateService } from 'src/app/services/state.service';
 | 
					import { ActivatedRoute } from '@angular/router';
 | 
				
			||||||
import { Router } from '@angular/router';
 | 
					 | 
				
			||||||
import { download, formatterXAxis } from 'src/app/shared/graphs.utils';
 | 
					import { download, formatterXAxis } from 'src/app/shared/graphs.utils';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
@ -53,9 +52,7 @@ export class BlockSizesWeightsGraphComponent implements OnInit {
 | 
				
			|||||||
    private formBuilder: FormBuilder,
 | 
					    private formBuilder: FormBuilder,
 | 
				
			||||||
    private storageService: StorageService,
 | 
					    private storageService: StorageService,
 | 
				
			||||||
    private miningService: MiningService,
 | 
					    private miningService: MiningService,
 | 
				
			||||||
    private stateService: StateService,
 | 
					    private route: ActivatedRoute,
 | 
				
			||||||
    private router: Router,
 | 
					 | 
				
			||||||
    private zone: NgZone,
 | 
					 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -67,9 +64,17 @@ export class BlockSizesWeightsGraphComponent implements OnInit {
 | 
				
			|||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
					    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.route
 | 
				
			||||||
 | 
					      .fragment
 | 
				
			||||||
 | 
					      .subscribe((fragment) => {
 | 
				
			||||||
 | 
					        if (['24h', '3d', '1w', '1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) {
 | 
				
			||||||
 | 
					          this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: true });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.blockSizesWeightsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
					    this.blockSizesWeightsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
				
			||||||
      .pipe(
 | 
					      .pipe(
 | 
				
			||||||
        startWith(this.miningWindowPreference),
 | 
					        startWith(this.radioGroupForm.controls.dateSpan.value),
 | 
				
			||||||
        switchMap((timespan) => {
 | 
					        switchMap((timespan) => {
 | 
				
			||||||
          this.timespan = timespan;
 | 
					          this.timespan = timespan;
 | 
				
			||||||
          if (!firstRun) {
 | 
					          if (!firstRun) {
 | 
				
			||||||
 | 
				
			|||||||
@ -28,25 +28,25 @@
 | 
				
			|||||||
    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(hashrateObservable$ | async) as stats">
 | 
					    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(hashrateObservable$ | async) as stats">
 | 
				
			||||||
      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
					      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1m'" fragment="1m"> 1M
 | 
					          <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]"> 1M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3m'" fragment="3m"> 3M
 | 
					          <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]"> 3M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'6m'" fragment="6m"> 6M
 | 
					          <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]"> 6M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1y'" fragment="1y"> 1Y
 | 
					          <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]"> 1Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'2y'" fragment="2y"> 2Y
 | 
					          <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]"> 2Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3y'" fragment="3y"> 3Y
 | 
					          <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]"> 3Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'all'" fragment="all"> ALL
 | 
					          <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]"> ALL
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </form>
 | 
					    </form>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core';
 | 
					import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core';
 | 
				
			||||||
import { EChartsOption, graphic } from 'echarts';
 | 
					import { EChartsOption, graphic } from 'echarts';
 | 
				
			||||||
import { Observable } from 'rxjs';
 | 
					import { Observable } from 'rxjs';
 | 
				
			||||||
import { delay, map, retryWhen, share, startWith, switchMap, tap } from 'rxjs/operators';
 | 
					import { map, share, startWith, switchMap, tap } from 'rxjs/operators';
 | 
				
			||||||
import { ApiService } from 'src/app/services/api.service';
 | 
					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';
 | 
				
			||||||
@ -10,6 +10,7 @@ import { selectPowerOfTen } from 'src/app/bitcoin.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 { download } from 'src/app/shared/graphs.utils';
 | 
					import { download } from 'src/app/shared/graphs.utils';
 | 
				
			||||||
 | 
					import { ActivatedRoute } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-hashrate-chart',
 | 
					  selector: 'app-hashrate-chart',
 | 
				
			||||||
@ -52,9 +53,9 @@ export class HashrateChartComponent implements OnInit {
 | 
				
			|||||||
    private seoService: SeoService,
 | 
					    private seoService: SeoService,
 | 
				
			||||||
    private apiService: ApiService,
 | 
					    private apiService: ApiService,
 | 
				
			||||||
    private formBuilder: FormBuilder,
 | 
					    private formBuilder: FormBuilder,
 | 
				
			||||||
    private cd: ChangeDetectorRef,
 | 
					 | 
				
			||||||
    private storageService: StorageService,
 | 
					    private storageService: StorageService,
 | 
				
			||||||
    private miningService: MiningService
 | 
					    private miningService: MiningService,
 | 
				
			||||||
 | 
					    private route: ActivatedRoute,
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -70,9 +71,17 @@ export class HashrateChartComponent implements OnInit {
 | 
				
			|||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
					    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.route
 | 
				
			||||||
 | 
					      .fragment
 | 
				
			||||||
 | 
					      .subscribe((fragment) => {
 | 
				
			||||||
 | 
					        if (['1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) {
 | 
				
			||||||
 | 
					          this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: true });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.hashrateObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
					    this.hashrateObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
				
			||||||
      .pipe(
 | 
					      .pipe(
 | 
				
			||||||
        startWith(this.miningWindowPreference),
 | 
					        startWith(this.radioGroupForm.controls.dateSpan.value),
 | 
				
			||||||
        switchMap((timespan) => {
 | 
					        switchMap((timespan) => {
 | 
				
			||||||
          if (!this.widget && !firstRun) {
 | 
					          if (!this.widget && !firstRun) {
 | 
				
			||||||
            this.storageService.setValue('miningWindowPreference', timespan);
 | 
					            this.storageService.setValue('miningWindowPreference', timespan);
 | 
				
			||||||
 | 
				
			|||||||
@ -9,26 +9,20 @@
 | 
				
			|||||||
    </button>
 | 
					    </button>
 | 
				
			||||||
    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(hashrateObservable$ | async) as stats">
 | 
					    <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(hashrateObservable$ | async) as stats">
 | 
				
			||||||
      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
					      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320">
 | 
					 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1m'" fragment="1m"> 1M
 | 
					 | 
				
			||||||
        </label>
 | 
					 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960">
 | 
					 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3m'" fragment="3m"> 3M
 | 
					 | 
				
			||||||
        </label>
 | 
					 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'6m'" fragment="6m"> 6M
 | 
					          <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]"> 6M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1y'" fragment="1y"> 1Y
 | 
					          <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]"> 1Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'2y'" fragment="2y"> 2Y
 | 
					          <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]"> 2Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3y'" fragment="3y"> 3Y
 | 
					          <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]"> 3Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'all'" fragment="all"> ALL
 | 
					          <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]"> ALL
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </form>
 | 
					    </form>
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@ import { poolsColor } from 'src/app/app.constants';
 | 
				
			|||||||
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 { download } from 'src/app/shared/graphs.utils';
 | 
					import { download } from 'src/app/shared/graphs.utils';
 | 
				
			||||||
import { time } from 'console';
 | 
					import { ActivatedRoute } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-hashrate-chart-pools',
 | 
					  selector: 'app-hashrate-chart-pools',
 | 
				
			||||||
@ -51,7 +51,8 @@ export class HashrateChartPoolsComponent implements OnInit {
 | 
				
			|||||||
    private formBuilder: FormBuilder,
 | 
					    private formBuilder: FormBuilder,
 | 
				
			||||||
    private cd: ChangeDetectorRef,
 | 
					    private cd: ChangeDetectorRef,
 | 
				
			||||||
    private storageService: StorageService,
 | 
					    private storageService: StorageService,
 | 
				
			||||||
    private miningService: MiningService
 | 
					    private miningService: MiningService,
 | 
				
			||||||
 | 
					    private route: ActivatedRoute,
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: '1y' });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: '1y' });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue('1y');
 | 
					    this.radioGroupForm.controls.dateSpan.setValue('1y');
 | 
				
			||||||
@ -61,13 +62,21 @@ export class HashrateChartPoolsComponent implements OnInit {
 | 
				
			|||||||
    let firstRun = true;
 | 
					    let firstRun = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.seoService.setTitle($localize`:@@mining.pools-historical-dominance:Pools Historical Dominance`);
 | 
					    this.seoService.setTitle($localize`:@@mining.pools-historical-dominance:Pools Historical Dominance`);
 | 
				
			||||||
    this.miningWindowPreference = this.miningService.getDefaultTimespan('1m');
 | 
					    this.miningWindowPreference = this.miningService.getDefaultTimespan('6m');
 | 
				
			||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
					    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.route
 | 
				
			||||||
 | 
					      .fragment
 | 
				
			||||||
 | 
					      .subscribe((fragment) => {
 | 
				
			||||||
 | 
					        if (['6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) {
 | 
				
			||||||
 | 
					          this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: true });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.hashrateObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
					    this.hashrateObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
 | 
				
			||||||
      .pipe(
 | 
					      .pipe(
 | 
				
			||||||
        startWith(this.miningWindowPreference),
 | 
					        startWith(this.radioGroupForm.controls.dateSpan.value),
 | 
				
			||||||
        switchMap((timespan) => {
 | 
					        switchMap((timespan) => {
 | 
				
			||||||
          if (!firstRun) {
 | 
					          if (!firstRun) {
 | 
				
			||||||
            this.storageService.setValue('miningWindowPreference', timespan);
 | 
					            this.storageService.setValue('miningWindowPreference', timespan);
 | 
				
			||||||
 | 
				
			|||||||
@ -40,34 +40,34 @@
 | 
				
			|||||||
      *ngIf="!widget && (miningStatsObservable$ | async) as stats">
 | 
					      *ngIf="!widget && (miningStatsObservable$ | async) as stats">
 | 
				
			||||||
      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
					      <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan">
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 144">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 144">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'24h'" fragment="24h"> 24h
 | 
					          <input ngbButton type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/pools' | relativeUrl]"> 24h
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 432">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 432">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3d'" fragment="3d"> 3D
 | 
					          <input ngbButton type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/pools' | relativeUrl]"> 3D
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 1008">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 1008">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1w'" fragment="1w"> 1W
 | 
					          <input ngbButton type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/pools' | relativeUrl]"> 1W
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 4320">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 4320">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1m'" fragment="1m"> 1M
 | 
					          <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/pools' | relativeUrl]"> 1M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 12960">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 12960">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3m'" fragment="3m"> 3M
 | 
					          <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/pools' | relativeUrl]"> 3M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 25920">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 25920">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'6m'" fragment="6m"> 6M
 | 
					          <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/pools' | relativeUrl]"> 6M
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 52560">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 52560">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'1y'" fragment="1y"> 1Y
 | 
					          <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/pools' | relativeUrl]"> 1Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 105120">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 105120">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'2y'" fragment="2y"> 2Y
 | 
					          <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/pools' | relativeUrl]"> 2Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'3y'" fragment="3y"> 3Y
 | 
					          <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/pools' | relativeUrl]"> 3Y
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount > 157680">
 | 
					        <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount > 157680">
 | 
				
			||||||
          <input ngbButton type="radio" [value]="'all'" fragment="all"><span i18n>All</span>
 | 
					          <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/pools' | relativeUrl]"><span i18n>All</span>
 | 
				
			||||||
        </label>
 | 
					        </label>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </form>
 | 
					    </form>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
import { ChangeDetectionStrategy, Component, Input, NgZone, OnInit, HostBinding } from '@angular/core';
 | 
					import { ChangeDetectionStrategy, Component, Input, NgZone, OnInit, HostBinding } from '@angular/core';
 | 
				
			||||||
import { FormBuilder, FormGroup } from '@angular/forms';
 | 
					import { FormBuilder, FormGroup } from '@angular/forms';
 | 
				
			||||||
import { Router } from '@angular/router';
 | 
					import { ActivatedRoute, Router } from '@angular/router';
 | 
				
			||||||
import { EChartsOption, PieSeriesOption } from 'echarts';
 | 
					import { EChartsOption, PieSeriesOption } from 'echarts';
 | 
				
			||||||
import { concat, Observable } from 'rxjs';
 | 
					import { concat, Observable } from 'rxjs';
 | 
				
			||||||
import { map, share, startWith, switchMap, tap } from 'rxjs/operators';
 | 
					import { map, share, startWith, switchMap, tap } from 'rxjs/operators';
 | 
				
			||||||
@ -45,6 +45,7 @@ export class PoolRankingComponent implements OnInit {
 | 
				
			|||||||
    private seoService: SeoService,
 | 
					    private seoService: SeoService,
 | 
				
			||||||
    private router: Router,
 | 
					    private router: Router,
 | 
				
			||||||
    private zone: NgZone,
 | 
					    private zone: NgZone,
 | 
				
			||||||
 | 
					    private route: ActivatedRoute,
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -58,10 +59,18 @@ export class PoolRankingComponent implements OnInit {
 | 
				
			|||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
					    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.route
 | 
				
			||||||
 | 
					      .fragment
 | 
				
			||||||
 | 
					      .subscribe((fragment) => {
 | 
				
			||||||
 | 
					        if (['24h', '3d', '1w', '1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) {
 | 
				
			||||||
 | 
					          this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: true });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.miningStatsObservable$ = concat(
 | 
					    this.miningStatsObservable$ = concat(
 | 
				
			||||||
      this.radioGroupForm.get('dateSpan').valueChanges
 | 
					      this.radioGroupForm.get('dateSpan').valueChanges
 | 
				
			||||||
        .pipe(
 | 
					        .pipe(
 | 
				
			||||||
          startWith(this.miningWindowPreference), // (trigger when the page loads)
 | 
					          startWith(this.radioGroupForm.controls.dateSpan.value), // (trigger when the page loads)
 | 
				
			||||||
          tap((value) => {
 | 
					          tap((value) => {
 | 
				
			||||||
            this.timespan = value;
 | 
					            this.timespan = value;
 | 
				
			||||||
            if (!this.widget) {
 | 
					            if (!this.widget) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user