2020-04-14 15:35:20 +07:00
|
|
|
import { Component, OnInit, ChangeDetectionStrategy, EventEmitter, Output } from '@angular/core';
|
2020-02-16 22:15:07 +07:00
|
|
|
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
|
|
import { Router } from '@angular/router';
|
2020-05-02 12:36:35 +07:00
|
|
|
import { AssetsService } from 'src/app/services/assets.service';
|
2020-05-09 20:37:50 +07:00
|
|
|
import { StateService } from 'src/app/services/state.service';
|
2020-02-16 22:15:07 +07:00
|
|
|
|
|
|
|
@Component({
|
|
|
|
selector: 'app-search-form',
|
|
|
|
templateUrl: './search-form.component.html',
|
|
|
|
styleUrls: ['./search-form.component.scss'],
|
|
|
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
|
|
})
|
|
|
|
export class SearchFormComponent implements OnInit {
|
2020-05-09 20:37:50 +07:00
|
|
|
network = '';
|
2020-05-28 01:01:35 +07:00
|
|
|
assets: object = {};
|
2020-05-02 12:36:35 +07:00
|
|
|
|
2020-02-16 22:15:07 +07:00
|
|
|
searchForm: FormGroup;
|
2020-04-14 15:35:20 +07:00
|
|
|
@Output() searchTriggered = new EventEmitter();
|
2020-02-16 22:15:07 +07:00
|
|
|
|
|
|
|
regexAddress = /^([a-km-zA-HJ-NP-Z1-9]{26,35}|[a-km-zA-HJ-NP-Z1-9]{80}|[a-z]{2,5}1[ac-hj-np-z02-9]{8,87})$/;
|
2020-02-19 23:50:23 +07:00
|
|
|
regexBlockhash = /^[0]{8}[a-fA-F0-9]{56}$/;
|
|
|
|
regexTransaction = /^[a-fA-F0-9]{64}$/;
|
2020-05-10 14:32:27 +07:00
|
|
|
regexBlockheight = /^[0-9]+$/;
|
2020-02-16 22:15:07 +07:00
|
|
|
|
|
|
|
constructor(
|
|
|
|
private formBuilder: FormBuilder,
|
|
|
|
private router: Router,
|
2020-05-02 12:36:35 +07:00
|
|
|
private assetsService: AssetsService,
|
2020-05-09 20:37:50 +07:00
|
|
|
private stateService: StateService,
|
2020-02-16 22:15:07 +07:00
|
|
|
) { }
|
|
|
|
|
|
|
|
ngOnInit() {
|
2020-05-09 20:37:50 +07:00
|
|
|
this.stateService.networkChanged$.subscribe((network) => this.network = network);
|
|
|
|
|
2020-02-16 22:15:07 +07:00
|
|
|
this.searchForm = this.formBuilder.group({
|
|
|
|
searchText: ['', Validators.required],
|
|
|
|
});
|
2020-05-05 15:26:23 +07:00
|
|
|
if (this.network === 'liquid') {
|
|
|
|
this.assetsService.getAssetsMinimalJson$
|
|
|
|
.subscribe((assets) => {
|
|
|
|
this.assets = assets;
|
|
|
|
});
|
|
|
|
}
|
2020-02-16 22:15:07 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
search() {
|
|
|
|
const searchText = this.searchForm.value.searchText.trim();
|
|
|
|
if (searchText) {
|
|
|
|
if (this.regexAddress.test(searchText)) {
|
2020-05-09 20:37:50 +07:00
|
|
|
this.router.navigate([(this.network ? '/' + this.network : '') + '/address/', searchText]);
|
2020-04-14 15:35:20 +07:00
|
|
|
this.searchTriggered.emit();
|
2020-05-10 14:32:27 +07:00
|
|
|
} else if (this.regexBlockhash.test(searchText) || this.regexBlockheight.test(searchText)) {
|
2020-05-09 20:37:50 +07:00
|
|
|
this.router.navigate([(this.network ? '/' + this.network : '') + '/block/', searchText]);
|
2020-04-14 15:35:20 +07:00
|
|
|
this.searchTriggered.emit();
|
2020-02-19 23:50:23 +07:00
|
|
|
} else if (this.regexTransaction.test(searchText)) {
|
2020-05-02 12:36:35 +07:00
|
|
|
if (this.network === 'liquid' && this.assets[searchText]) {
|
2020-05-09 20:37:50 +07:00
|
|
|
this.router.navigate([(this.network ? '/' + this.network : '') + '/asset/', searchText]);
|
2020-05-02 12:36:35 +07:00
|
|
|
} else {
|
2020-05-09 20:37:50 +07:00
|
|
|
this.router.navigate([(this.network ? '/' + this.network : '') + '/tx/', searchText]);
|
2020-05-02 12:36:35 +07:00
|
|
|
}
|
2020-04-14 15:35:20 +07:00
|
|
|
this.searchTriggered.emit();
|
2020-02-19 23:50:23 +07:00
|
|
|
} else {
|
|
|
|
return;
|
2020-02-16 22:15:07 +07:00
|
|
|
}
|
|
|
|
this.searchForm.setValue({
|
|
|
|
searchText: '',
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|