@@ -17,6 +17,7 @@ import 'package:web_dex/mm2/mm2_api/rpc/best_orders/best_orders.dart';
17
17
import 'package:web_dex/mm2/mm2_api/rpc/best_orders/best_orders_request.dart' ;
18
18
import 'package:web_dex/mm2/mm2_api/rpc/sell/sell_request.dart' ;
19
19
import 'package:web_dex/mm2/mm2_api/rpc/sell/sell_response.dart' ;
20
+ import 'package:web_dex/mm2/mm2_api/rpc/setprice/setprice_request.dart' ;
20
21
import 'package:web_dex/model/available_balance_state.dart' ;
21
22
import 'package:web_dex/model/coin.dart' ;
22
23
import 'package:web_dex/model/data_from_service.dart' ;
@@ -92,13 +93,54 @@ class TakerBloc extends Bloc<TakerEvent, TakerState> {
92
93
inProgress: () => true ,
93
94
));
94
95
95
- final SellResponse response = await _dexRepo.sell (SellRequest (
96
- base : state.sellCoin! .abbr,
97
- rel: state.selectedOrder! .coin,
98
- volume: state.sellAmount! ,
99
- price: state.selectedOrder! .price,
100
- orderType: SellBuyOrderType .fillOrKill,
101
- ));
96
+ final base = state.sellCoin! .abbr;
97
+ final rel = state.selectedOrder! .coin;
98
+
99
+ BestOrders fetchedOrders = await _dexRepo.getBestOrders (
100
+ BestOrdersRequest (
101
+ coin: base ,
102
+ type: BestOrdersRequestType .number,
103
+ number: 40 ,
104
+ action: 'sell' ,
105
+ ),
106
+ );
107
+
108
+ bool hasMatchingOrder = false ;
109
+ final ordersForRel = fetchedOrders.result? [rel];
110
+ if (ordersForRel != null ) {
111
+ hasMatchingOrder =
112
+ ordersForRel.any ((order) => order.uuid == state.selectedOrder! .uuid);
113
+ }
114
+
115
+ if (! hasMatchingOrder) {
116
+ final response = await _dexRepo.setPrice (
117
+ SetPriceRequest (
118
+ base : base ,
119
+ rel: rel,
120
+ volume: state.sellAmount! ,
121
+ price: state.selectedOrder! .price,
122
+ ),
123
+ );
124
+ final String ? uuid = response? ['result' ]? ['uuid' ] as String ? ;
125
+ if (response == null || response['error' ] != null || uuid == null ) {
126
+ add (TakerAddError (DexFormError (
127
+ error: response? ['error' ]? .toString () ?? 'Order failed' )));
128
+ emit (state.copyWith (inProgress: () => false ));
129
+ return ;
130
+ }
131
+ emit (state.copyWith (swapUuid: () => uuid));
132
+ return ;
133
+ }
134
+
135
+ final SellResponse response = await _dexRepo.sell (
136
+ SellRequest (
137
+ base : base ,
138
+ rel: rel,
139
+ volume: state.sellAmount! ,
140
+ price: state.selectedOrder! .price,
141
+ orderType: SellBuyOrderType .fillOrKill,
142
+ ),
143
+ );
102
144
103
145
if (response.error != null ) {
104
146
add (TakerAddError (DexFormError (error: response.error! .message)));
0 commit comments