|
|
|
@ -37,13 +37,14 @@ export class CreateOrUpdateTransactionDialog implements OnDestroy {
|
|
|
|
|
|
|
|
|
|
public currencies: Currency[] = [];
|
|
|
|
|
public currentMarketPrice = null;
|
|
|
|
|
public filteredLookupItems: Observable<LookupItem[]>;
|
|
|
|
|
public filteredLookupItems: LookupItem[];
|
|
|
|
|
public filteredLookupItemsObservable: Observable<LookupItem[]>;
|
|
|
|
|
public isLoading = false;
|
|
|
|
|
public platforms: { id: string; name: string }[];
|
|
|
|
|
public searchSymbolCtrl = new FormControl(
|
|
|
|
|
{
|
|
|
|
|
dataSource: this.data.transaction.dataSource,
|
|
|
|
|
name: this.data.transaction.symbol
|
|
|
|
|
symbol: this.data.transaction.symbol
|
|
|
|
|
},
|
|
|
|
|
Validators.required
|
|
|
|
|
);
|
|
|
|
@ -63,18 +64,26 @@ export class CreateOrUpdateTransactionDialog implements OnDestroy {
|
|
|
|
|
this.currencies = currencies;
|
|
|
|
|
this.platforms = platforms;
|
|
|
|
|
|
|
|
|
|
this.filteredLookupItems = this.searchSymbolCtrl.valueChanges.pipe(
|
|
|
|
|
startWith(''),
|
|
|
|
|
debounceTime(400),
|
|
|
|
|
distinctUntilChanged(),
|
|
|
|
|
switchMap((query: string) => {
|
|
|
|
|
if (isString(query)) {
|
|
|
|
|
return this.dataService.fetchSymbols(query);
|
|
|
|
|
}
|
|
|
|
|
this.filteredLookupItemsObservable =
|
|
|
|
|
this.searchSymbolCtrl.valueChanges.pipe(
|
|
|
|
|
startWith(''),
|
|
|
|
|
debounceTime(400),
|
|
|
|
|
distinctUntilChanged(),
|
|
|
|
|
switchMap((query: string) => {
|
|
|
|
|
if (isString(query)) {
|
|
|
|
|
const filteredLookupItemsObservable =
|
|
|
|
|
this.dataService.fetchSymbols(query);
|
|
|
|
|
|
|
|
|
|
return [];
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
filteredLookupItemsObservable.subscribe((filteredLookupItems) => {
|
|
|
|
|
this.filteredLookupItems = filteredLookupItems;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return filteredLookupItemsObservable;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return [];
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (this.data.transaction.symbol) {
|
|
|
|
|
this.dataService
|
|
|
|
@ -96,17 +105,22 @@ export class CreateOrUpdateTransactionDialog implements OnDestroy {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public displayFn(aLookupItem: LookupItem) {
|
|
|
|
|
return aLookupItem?.name ?? '';
|
|
|
|
|
return aLookupItem?.symbol ?? '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public onBlurSymbol() {
|
|
|
|
|
this.data.transaction.currency = null;
|
|
|
|
|
this.data.transaction.dataSource = null;
|
|
|
|
|
const currentLookupItem = this.filteredLookupItems.find((lookupItem) => {
|
|
|
|
|
return lookupItem.symbol === this.data.transaction.symbol;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (this.autocomplete.isOpen) {
|
|
|
|
|
this.searchSymbolCtrl.setErrors({ incorrect: true });
|
|
|
|
|
if (currentLookupItem) {
|
|
|
|
|
this.updateSymbol(currentLookupItem.symbol);
|
|
|
|
|
} else {
|
|
|
|
|
this.data.transaction.unitPrice = null;
|
|
|
|
|
this.searchSymbolCtrl.setErrors({ incorrect: true });
|
|
|
|
|
|
|
|
|
|
this.data.transaction.currency = null;
|
|
|
|
|
this.data.transaction.dataSource = null;
|
|
|
|
|
this.data.transaction.symbol = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.changeDetectorRef.markForCheck();
|
|
|
|
|