diff --git a/frontend/src/app/components/search-form/search-form.component.html b/frontend/src/app/components/search-form/search-form.component.html
index 378e38940..e96cd0a57 100644
--- a/frontend/src/app/components/search-form/search-form.component.html
+++ b/frontend/src/app/components/search-form/search-form.component.html
@@ -7,7 +7,13 @@
-
+
+
+
+
+
diff --git a/frontend/src/app/components/search-form/search-form.component.scss b/frontend/src/app/components/search-form/search-form.component.scss
index 448cb28b3..7c8161196 100644
--- a/frontend/src/app/components/search-form/search-form.component.scss
+++ b/frontend/src/app/components/search-form/search-form.component.scss
@@ -49,4 +49,10 @@ form {
.btn {
width: 100px;
}
-}
\ No newline at end of file
+}
+
+.spinner-border {
+ vertical-align: text-top;
+ margin-top: 1px;
+ margin-right: 2px;
+}
diff --git a/frontend/src/app/components/search-form/search-form.component.ts b/frontend/src/app/components/search-form/search-form.component.ts
index 9ed40700a..a9deccc6b 100644
--- a/frontend/src/app/components/search-form/search-form.component.ts
+++ b/frontend/src/app/components/search-form/search-form.component.ts
@@ -3,8 +3,8 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Router } from '@angular/router';
import { AssetsService } from 'src/app/services/assets.service';
import { StateService } from 'src/app/services/state.service';
-import { Observable, of, Subject, merge, zip } from 'rxjs';
-import { debounceTime, distinctUntilChanged, switchMap, filter, catchError, map } from 'rxjs/operators';
+import { Observable, of, Subject, zip, BehaviorSubject } from 'rxjs';
+import { debounceTime, distinctUntilChanged, switchMap, catchError, map } from 'rxjs/operators';
import { ElectrsApiService } from 'src/app/services/electrs-api.service';
import { RelativeUrlPipe } from 'src/app/shared/pipes/relative-url/relative-url.pipe';
import { ApiService } from 'src/app/services/api.service';
@@ -20,13 +20,14 @@ export class SearchFormComponent implements OnInit {
network = '';
assets: object = {};
isSearching = false;
+ isTypeaheading$ = new BehaviorSubject(false);
typeAhead$: Observable;
searchForm: FormGroup;
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,100}|[A-Z]{2,5}1[AC-HJ-NP-Z02-9]{8,100})$/;
regexBlockhash = /^[0]{8}[a-fA-F0-9]{56}$/;
- regexTransaction = /^([a-fA-F0-9]{64}):?(\d+)?$/;
- regexBlockheight = /^[0-9]+$/;
+ regexTransaction = /^([a-fA-F0-9]{64})(:\d+)?$/;
+ regexBlockheight = /^[0-9]{1,9}$/;
focus$ = new Subject();
click$ = new Subject();
@@ -68,7 +69,7 @@ export class SearchFormComponent implements OnInit {
}
return text.trim();
}),
- debounceTime(250),
+ debounceTime(200),
distinctUntilChanged(),
switchMap((text) => {
if (!text.length) {
@@ -80,6 +81,7 @@ export class SearchFormComponent implements OnInit {
}
]);
}
+ this.isTypeaheading$.next(true);
if (!this.stateService.env.LIGHTNING) {
return zip(
this.electrsApiService.getAddressesByPrefix$(text).pipe(catchError(() => of([]))),
@@ -95,6 +97,7 @@ export class SearchFormComponent implements OnInit {
);
}),
map((result: any[]) => {
+ this.isTypeaheading$.next(false);
if (this.network === 'bisq') {
return result[0].map((address: string) => 'B' + address);
}