Skip to content

Commit a8d15b6

Browse files
committed
fetch prices uses WSS in trade creation modal
1 parent e3d86e5 commit a8d15b6

File tree

3 files changed

+40
-20
lines changed

3 files changed

+40
-20
lines changed

admin/src/app/binance.service.ts

+20-20
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,34 @@ import {environment} from '../environments/environment';
66
import {HttpClient, HttpHeaders} from '@angular/common/http';
77
import {TradeInfo} from './tradeInfo';
88

9-
10-
// const binHttpOptions = {
11-
// headers: new HttpHeaders({
12-
// 'Content-Type': 'application/json',
13-
// 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token',
14-
// 'Access-Control-Allow-Methods': 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
15-
// 'Access-Control-Allow-Origin': '*'
16-
// })
17-
// };
18-
9+
export class BinancePriceResult {
10+
symbol: string;
11+
bestAsk: string;
12+
bestBid: string;
13+
}
1914

2015
@Injectable({
2116
providedIn: 'root'
2217
})
2318
export class BinanceService {
2419

2520
symbols: Subject<string>;
26-
/*constructor(private wss: WebsocketService, private http: HttpClient) {
27-
}*/
2821

29-
// getOrderBookTickers(): Observable<any> {
30-
// return this.http.get<any>(`${environment.BINANCE_API_URL}/api/v3/ticker/bookTicker`, binHttpOptions).pipe(
31-
// retry(3),
32-
// tap(orderbook => console.log(`fetched Binance getOrderBookTickers`)),
33-
// catchError(this.handleError('getOrderBookTickers', [])),
34-
// map(orderbook => JSON.parse(orderbook))
35-
// );
36-
// }
22+
getPrice(symbol: string): Subject<BinancePriceResult> {
23+
const listener = this.listenSymbols([symbol]);
24+
25+
return <Subject<BinancePriceResult>>listener.pipe(
26+
map(data => JSON.parse(data).data),
27+
map(function(data) {
28+
setTimeout(() => this.complete());
29+
return Object.assign(new BinancePriceResult(), {
30+
symbol: data.s,
31+
bestAsk: data.a,
32+
bestBid: data.b,
33+
});
34+
})
35+
);
36+
}
3737

3838
listenSymbols(symbols: string[]): Subject<string> {
3939
if (this.symbols != null && this.symbols !== undefined) {

admin/src/app/trade-details/trade-details.component.html

+8
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ <h4 class="modal-title pull-left">Trade ({{mode.str()}} mode)</h4>
7474
</div>
7575
</div>
7676
</div>
77+
78+
<div class="form-group row" *ngIf="priceInfo?.symbol == trade.symbol">
79+
<label class="col-sm-2 col-form-label-sm">Price Info</label>
80+
<div class="col-sm-10">
81+
<span class="badge badge-success">Bid: {{ priceInfo.bestBid }}</span>&nbsp;
82+
<span class="badge badge-danger">Ask: {{ priceInfo.bestAsk }}</span>
83+
</div>
84+
</div>
7785
</fieldset>
7886
<app-exit-details [trade]="trade" [mode]="mode"></app-exit-details>
7987
<app-sl-details [trade]="trade" [mode]="mode"></app-sl-details>

admin/src/app/trade-details/trade-details.component.ts

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {AfterContentInit, ChangeDetectorRef, Component, ElementRef, OnInit, View
22
import {Location} from '@angular/common';
33
import {ActivatedRoute, ParamMap, Router} from '@angular/router';
44
import {BotApi} from '../botapi';
5+
import {BinanceService, BinancePriceResult} from '../binance.service';
56
import {switchMap} from 'rxjs/operators';
67
import {Mode, TradeDetailMode, TradeDetails} from '../trade-details';
78
import {Observable} from 'rxjs';
@@ -23,6 +24,7 @@ export class TradeDetailsComponent implements OnInit {
2324
// editMode: boolean;
2425
mode: Mode;
2526
// trade: TradeDetails;
27+
priceInfo: BinancePriceResult;
2628

2729
exchangeInfo: any[];
2830
symbols: Set<string>;
@@ -41,6 +43,7 @@ export class TradeDetailsComponent implements OnInit {
4143
private router: Router,
4244
private location: Location,
4345
private api: BotApi,
46+
private binance: BinanceService,
4447
private tradeService: TradeService) {
4548

4649
this.route.paramMap.subscribe(params => this.mode = new Mode(<TradeDetailMode>params.get('mode')));
@@ -105,8 +108,17 @@ export class TradeDetailsComponent implements OnInit {
105108
this.router.navigate(['/trades']);
106109
}
107110

111+
onPriceUpdate(price: BinancePriceResult): void {
112+
this.priceInfo = price;
113+
}
114+
108115
onSymbolSelected(event) {
109116
if (this.mode.isCreate()) {
117+
if (this.trade.asset !== event.item.b) {
118+
// query binance prices
119+
this.binance.getPrice(event.item.s).subscribe(this.onPriceUpdate.bind(this));
120+
}
121+
110122
this.trade.asset = event.item.b;
111123
}
112124
}

0 commit comments

Comments
 (0)