Cw 498 improve wallet accounts (#1152)
* CW-498 Call updateTransactions on account change * CW-498 Code Cleanup * CW-498 Add Wallet Address to trade to match transactions to trades * CW-498 Fix containsAddress to include only addresses of account * Handle nullability for fromWalletAddress --------- Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Konstantin Ullrich committed
Nov 2, 2023 at 16:52 UTC
e5d99313eb72405bc90903f47288983eb75bc120
13 files changed
+206
-230
cw_core/lib/wallet_addresses.dart
+3
-1
@@ -36,4 +36,6 @@ abstract class WalletAddresses {
36
print(e.toString());
37
}
38
}
39
-}
\ No newline at end of file
39
+
40
+ bool containsAddress(String address) => addressesMap.containsKey(address);
41
+}
cw_haven/lib/haven_wallet_addresses.dart
+7
-3
@@ -63,14 +63,14 @@ abstract class HavenWalletAddressesBase extends WalletAddressesWithAccount<Accou
63
64
bool validate() {
65
accountList.update();
66
- final accountListLength = accountList.accounts.length ?? 0;
66
+ final accountListLength = accountList.accounts.length;
67
68
if (accountListLength <= 0) {
69
return false;
70
}
71
72
subaddressList.update(accountIndex: accountList.accounts.first.id);
73
- final subaddressListLength = subaddressList.subaddresses.length ?? 0;
73
+ final subaddressListLength = subaddressList.subaddresses.length;
74
75
if (subaddressListLength <= 0) {
76
return false;
@@ -84,4 +84,8 @@ abstract class HavenWalletAddressesBase extends WalletAddressesWithAccount<Accou
84
subaddress = subaddressList.subaddresses.first;
85
address = subaddress!.address;
86
}
87
-}
\ No newline at end of file
87
+
88
+ @override
89
+ bool containsAddress(String address) =>
90
+ addressInfos[account?.id ?? 0]?.any((it) => it.address == address) ?? false;
91
+}
cw_monero/lib/monero_wallet.dart
+5
-9
@@ -57,9 +57,7 @@ abstract class MoneroWalletBase
57
walletAddresses = MoneroWalletAddresses(walletInfo, transactionHistory);
58
59
_onAccountChangeReaction = reaction((_) => walletAddresses.account, (Account? account) {
60
- if (account == null) {
61
- return;
62
- }
60
+ if (account == null) return;
61
62
balance = ObservableMap<CryptoCurrency, MoneroBalance>.of(<CryptoCurrency, MoneroBalance>{
63
currency: MoneroBalance(
@@ -67,6 +65,7 @@ abstract class MoneroWalletBase
65
unlockedBalance: monero_wallet.getUnlockedBalance(accountIndex: account.id))
66
});
67
_updateSubAddress(isEnabledAutoGenerateSubaddress, account: account);
68
+ _askForUpdateTransactionHistory();
69
});
70
71
reaction((_) => isEnabledAutoGenerateSubaddress, (bool enabled) {
@@ -362,9 +361,7 @@ abstract class MoneroWalletBase
361
}
362
363
@override
365
- Future<void> changePassword(String password) async {
366
- monero_wallet.setPasswordSync(password);
367
- }
364
+ Future<void> changePassword(String password) async => monero_wallet.setPasswordSync(password);
365
366
Future<int> getNodeHeight() async => monero_wallet.getNodeHeight();
367
@@ -499,9 +496,8 @@ abstract class MoneroWalletBase
496
}
497
}
498
502
- String getSubaddressLabel(int accountIndex, int addressIndex) {
503
- return monero_wallet.getSubaddressLabel(accountIndex, addressIndex);
504
- }
499
+ String getSubaddressLabel(int accountIndex, int addressIndex) =>
500
+ monero_wallet.getSubaddressLabel(accountIndex, addressIndex);
501
502
List<MoneroTransactionInfo> _getAllTransactionsOfAccount(int? accountIndex) => transaction_history
503
.getAllTransactions()
cw_monero/lib/monero_wallet_addresses.dart
+6
-2
@@ -1,11 +1,11 @@
1
+import 'package:cw_core/account.dart';
2
import 'package:cw_core/address_info.dart';
3
+import 'package:cw_core/subaddress.dart';
4
import 'package:cw_core/wallet_addresses.dart';
5
import 'package:cw_core/wallet_info.dart';
4
-import 'package:cw_core/account.dart';
6
import 'package:cw_monero/api/wallet.dart';
7
import 'package:cw_monero/monero_account_list.dart';
8
import 'package:cw_monero/monero_subaddress_list.dart';
8
-import 'package:cw_core/subaddress.dart';
9
import 'package:cw_monero/monero_transaction_history.dart';
10
import 'package:mobx/mobx.dart';
11
@@ -112,4 +112,8 @@ abstract class MoneroWalletAddressesBase extends WalletAddresses with Store {
112
subaddress = subaddressList.subaddresses.last;
113
address = subaddress!.address;
114
}
115
+
116
+ @override
117
+ bool containsAddress(String address) =>
118
+ addressInfos[account?.id ?? 0]?.any((it) => it.address == address) ?? false;
119
}
lib/exchange/trade.dart
+9
-2
@@ -27,6 +27,7 @@ class Trade extends HiveObject {
27
this.password,
28
this.providerId,
29
this.providerName,
30
+ this.fromWalletAddress
31
}) {
32
if (provider != null) providerRaw = provider.raw;
33
@@ -101,6 +102,9 @@ class Trade extends HiveObject {
102
@HiveField(16)
103
String? providerName;
104
105
+ @HiveField(17)
106
+ String? fromWalletAddress;
107
+
108
static Trade fromMap(Map<String, Object?> map) {
109
return Trade(
110
id: map['id'] as String,
@@ -110,7 +114,9 @@ class Trade extends HiveObject {
114
createdAt:
115
map['date'] != null ? DateTime.fromMillisecondsSinceEpoch(map['date'] as int) : null,
116
amount: map['amount'] as String,
113
- walletId: map['wallet_id'] as String);
117
+ walletId: map['wallet_id'] as String,
118
+ fromWalletAddress: map['from_wallet_address'] as String?
119
+ );
120
}
121
122
Map<String, dynamic> toMap() {
@@ -121,7 +127,8 @@ class Trade extends HiveObject {
127
'output': to.serialize(),
128
'date': createdAt != null ? createdAt!.millisecondsSinceEpoch : null,
129
'amount': amount,
124
- 'wallet_id': walletId
130
+ 'wallet_id': walletId,
131
+ 'from_wallet_address': fromWalletAddress
132
};
133
}
134
lib/monero/cw_monero.dart
+56
-84
@@ -120,8 +120,6 @@ class CWMoneroWalletDetails extends MoneroWalletDetails {
120
@computed
121
@override
122
MoneroBalance get balance {
123
- final moneroWallet = _wallet as MoneroWallet;
124
- final balance = moneroWallet.balance;
123
throw Exception('Unimplemented');
124
// return MoneroBalance();
125
//return MoneroBalance(
@@ -132,14 +130,10 @@ class CWMoneroWalletDetails extends MoneroWalletDetails {
130
131
class CWMonero extends Monero {
132
@override
135
- MoneroAccountList getAccountList(Object wallet) {
136
- return CWMoneroAccountList(wallet);
137
- }
133
+ MoneroAccountList getAccountList(Object wallet) => CWMoneroAccountList(wallet);
134
135
@override
140
- MoneroSubaddressList getSubaddressList(Object wallet) {
141
- return CWMoneroSubaddressList(wallet);
142
- }
136
+ MoneroSubaddressList getSubaddressList(Object wallet) => CWMoneroSubaddressList(wallet);
137
138
@override
139
TransactionHistoryBase getTransactionHistory(Object wallet) {
@@ -148,19 +142,13 @@ class CWMonero extends Monero {
142
}
143
144
@override
151
- MoneroWalletDetails getMoneroWalletDetails(Object wallet) {
152
- return CWMoneroWalletDetails(wallet);
153
- }
145
+ MoneroWalletDetails getMoneroWalletDetails(Object wallet) => CWMoneroWalletDetails(wallet);
146
147
@override
156
- int getHeigthByDate({required DateTime date}) {
157
- return getMoneroHeigthByDate(date: date);
158
- }
148
+ int getHeightByDate({required DateTime date}) => getMoneroHeigthByDate(date: date);
149
150
@override
161
- TransactionPriority getDefaultTransactionPriority() {
162
- return MoneroTransactionPriority.automatic;
163
- }
151
+ TransactionPriority getDefaultTransactionPriority() => MoneroTransactionPriority.automatic;
152
153
@override
154
TransactionPriority getMoneroTransactionPrioritySlow() => MoneroTransactionPriority.slow;
@@ -170,14 +158,11 @@ class CWMonero extends Monero {
158
MoneroTransactionPriority.automatic;
159
160
@override
173
- TransactionPriority deserializeMoneroTransactionPriority({required int raw}) {
174
- return MoneroTransactionPriority.deserialize(raw: raw);
175
- }
161
+ TransactionPriority deserializeMoneroTransactionPriority({required int raw}) =>
162
+ MoneroTransactionPriority.deserialize(raw: raw);
163
164
@override
178
- List<TransactionPriority> getTransactionPriorities() {
179
- return MoneroTransactionPriority.all;
180
- }
165
+ List<TransactionPriority> getTransactionPriorities() => MoneroTransactionPriority.all;
166
167
@override
168
List<String> getMoneroWordList(String language) {
@@ -209,41 +194,37 @@ class CWMonero extends Monero {
194
195
@override
196
WalletCredentials createMoneroRestoreWalletFromKeysCredentials(
212
- {required String name,
213
- required String spendKey,
214
- required String viewKey,
215
- required String address,
216
- required String password,
217
- required String language,
218
- required int height}) {
219
- return MoneroRestoreWalletFromKeysCredentials(
220
- name: name,
221
- spendKey: spendKey,
222
- viewKey: viewKey,
223
- address: address,
224
- password: password,
225
- language: language,
226
- height: height);
227
- }
197
+ {required String name,
198
+ required String spendKey,
199
+ required String viewKey,
200
+ required String address,
201
+ required String password,
202
+ required String language,
203
+ required int height}) =>
204
+ MoneroRestoreWalletFromKeysCredentials(
205
+ name: name,
206
+ spendKey: spendKey,
207
+ viewKey: viewKey,
208
+ address: address,
209
+ password: password,
210
+ language: language,
211
+ height: height);
212
213
@override
214
WalletCredentials createMoneroRestoreWalletFromSeedCredentials(
231
- {required String name,
232
- required String password,
233
- required int height,
234
- required String mnemonic}) {
235
- return MoneroRestoreWalletFromSeedCredentials(
236
- name: name, password: password, height: height, mnemonic: mnemonic);
237
- }
215
+ {required String name,
216
+ required String password,
217
+ required int height,
218
+ required String mnemonic}) =>
219
+ MoneroRestoreWalletFromSeedCredentials(
220
+ name: name, password: password, height: height, mnemonic: mnemonic);
221
222
@override
223
WalletCredentials createMoneroNewWalletCredentials({
224
required String name,
225
required String language,
243
- String? password,
244
- }) {
245
- return MoneroNewWalletCredentials(name: name, password: password, language: language);
246
- }
226
+ String? password}) =>
227
+ MoneroNewWalletCredentials(name: name, password: password, language: language);
228
229
@override
230
Map<String, String> getKeys(Object wallet) {
@@ -259,43 +240,37 @@ class CWMonero extends Monero {
240
241
@override
242
Object createMoneroTransactionCreationCredentials(
262
- {required List<Output> outputs, required TransactionPriority priority}) {
263
- return MoneroTransactionCreationCredentials(
264
- outputs: outputs
265
- .map((out) => OutputInfo(
266
- fiatAmount: out.fiatAmount,
267
- cryptoAmount: out.cryptoAmount,
268
- address: out.address,
269
- note: out.note,
270
- sendAll: out.sendAll,
271
- extractedAddress: out.extractedAddress,
272
- isParsedAddress: out.isParsedAddress,
273
- formattedCryptoAmount: out.formattedCryptoAmount))
274
- .toList(),
275
- priority: priority as MoneroTransactionPriority);
276
- }
243
+ {required List<Output> outputs, required TransactionPriority priority}) =>
244
+ MoneroTransactionCreationCredentials(
245
+ outputs: outputs
246
+ .map((out) => OutputInfo(
247
+ fiatAmount: out.fiatAmount,
248
+ cryptoAmount: out.cryptoAmount,
249
+ address: out.address,
250
+ note: out.note,
251
+ sendAll: out.sendAll,
252
+ extractedAddress: out.extractedAddress,
253
+ isParsedAddress: out.isParsedAddress,
254
+ formattedCryptoAmount: out.formattedCryptoAmount))
255
+ .toList(),
256
+ priority: priority as MoneroTransactionPriority);
257
258
@override
259
Object createMoneroTransactionCreationCredentialsRaw(
280
- {required List<OutputInfo> outputs, required TransactionPriority priority}) {
281
- return MoneroTransactionCreationCredentials(
282
- outputs: outputs, priority: priority as MoneroTransactionPriority);
283
- }
260
+ {required List<OutputInfo> outputs, required TransactionPriority priority}) =>
261
+ MoneroTransactionCreationCredentials(
262
+ outputs: outputs, priority: priority as MoneroTransactionPriority);
263
264
@override
286
- String formatterMoneroAmountToString({required int amount}) {
287
- return moneroAmountToString(amount: amount);
288
- }
265
+ String formatterMoneroAmountToString({required int amount}) =>
266
+ moneroAmountToString(amount: amount);
267
268
@override
291
- double formatterMoneroAmountToDouble({required int amount}) {
292
- return moneroAmountToDouble(amount: amount);
293
- }
269
+ double formatterMoneroAmountToDouble({required int amount}) =>
270
+ moneroAmountToDouble(amount: amount);
271
272
@override
296
- int formatterMoneroParseAmount({required String amount}) {
297
- return moneroParseAmount(amount: amount);
298
- }
273
+ int formatterMoneroParseAmount({required String amount}) => moneroParseAmount(amount: amount);
274
275
@override
276
Account getCurrentAccount(Object wallet) {
@@ -312,9 +287,7 @@ class CWMonero extends Monero {
287
}
288
289
@override
315
- void onStartup() {
316
- monero_wallet_api.onStartup();
317
- }
290
+ void onStartup() => monero_wallet_api.onStartup();
291
292
@override
293
int getTransactionInfoAccountId(TransactionInfo tx) {
@@ -324,9 +297,8 @@ class CWMonero extends Monero {
297
298
@override
299
WalletService createMoneroWalletService(
327
- Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource) {
328
- return MoneroWalletService(walletInfoSource, unspentCoinSource);
329
- }
300
+ Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource) =>
301
+ MoneroWalletService(walletInfoSource, unspentCoinSource);
302
303
@override
304
String getTransactionAddress(Object wallet, int accountIndex, int addressIndex) {
lib/src/widgets/blockchain_height_widget.dart
+5
-8
@@ -36,16 +36,13 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
36
restoreHeightController.addListener(() {
37
if (restoreHeightController.text.isNotEmpty) {
38
widget.onHeightOrDateEntered?.call(true);
39
- }
40
- else {
39
+ } else {
40
widget.onHeightOrDateEntered?.call(false);
41
dateController.text = '';
42
}
43
try {
45
- _changeHeight(restoreHeightController.text != null &&
46
- restoreHeightController.text.isNotEmpty
47
- ? int.parse(restoreHeightController.text)
48
- : 0);
44
+ _changeHeight(
45
+ restoreHeightController.text.isNotEmpty ? int.parse(restoreHeightController.text) : 0);
46
} catch (_) {
47
_changeHeight(0);
48
}
@@ -117,7 +114,7 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
114
);
115
}
116
120
- Future _selectDate(BuildContext context) async {
117
+ Future<void> _selectDate(BuildContext context) async {
118
final now = DateTime.now();
119
final date = await getDate(
120
context: context,
@@ -126,7 +123,7 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
123
lastDate: now);
124
125
if (date != null) {
129
- final height = monero!.getHeigthByDate(date: date);
126
+ final height = monero!.getHeightByDate(date: date);
127
setState(() {
128
dateController.text = DateFormat('yyyy-MM-dd').format(date);
129
restoreHeightController.text = '$height';
lib/store/dashboard/trade_filter_store.dart
+24
-22
@@ -1,7 +1,7 @@
1
-import 'package:cw_core/wallet_base.dart';
2
-import 'package:mobx/mobx.dart';
1
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
2
import 'package:cake_wallet/view_model/dashboard/trade_list_item.dart';
3
+import 'package:cw_core/wallet_base.dart';
4
+import 'package:mobx/mobx.dart';
5
6
part'trade_filter_store.g.dart';
7
@@ -87,29 +87,31 @@ abstract class TradeFilterStoreBase with Store {
87
}
88
89
List<TradeListItem> filtered({required List<TradeListItem> trades, required WalletBase wallet}) {
90
- final _trades =
91
- trades.where((item) => item.trade.walletId == wallet.id).toList();
90
+ final _trades = trades
91
+ .where((item) => item.trade.walletId == wallet.id && isTradeInAccount(item, wallet))
92
+ .toList();
93
final needToFilter = !displayAllTrades;
94
95
return needToFilter
96
? _trades
96
- .where((item) =>
97
- (displayXMRTO &&
98
- item.trade.provider == ExchangeProviderDescription.xmrto) ||
99
- (displaySideShift &&
100
- item.trade.provider == ExchangeProviderDescription.sideShift) ||
101
- (displayChangeNow &&
102
- item.trade.provider ==
103
- ExchangeProviderDescription.changeNow) ||
104
- (displayMorphToken &&
105
- item.trade.provider ==
106
- ExchangeProviderDescription.morphToken)
107
- ||(displaySimpleSwap &&
108
- item.trade.provider ==
109
- ExchangeProviderDescription.simpleSwap)
110
- ||(displayTrocador && item.trade.provider == ExchangeProviderDescription.trocador)
111
- ||(displayExolix && item.trade.provider == ExchangeProviderDescription.exolix))
112
- .toList()
97
+ .where((item) =>
98
+ (displayXMRTO && item.trade.provider == ExchangeProviderDescription.xmrto) ||
99
+ (displaySideShift &&
100
+ item.trade.provider == ExchangeProviderDescription.sideShift) ||
101
+ (displayChangeNow &&
102
+ item.trade.provider == ExchangeProviderDescription.changeNow) ||
103
+ (displayMorphToken &&
104
+ item.trade.provider == ExchangeProviderDescription.morphToken) ||
105
+ (displaySimpleSwap &&
106
+ item.trade.provider == ExchangeProviderDescription.simpleSwap) ||
107
+ (displayTrocador && item.trade.provider == ExchangeProviderDescription.trocador) ||
108
+ (displayExolix && item.trade.provider == ExchangeProviderDescription.exolix))
109
+ .toList()
110
: _trades;
111
}
115
-}
\ No newline at end of file
112
+
113
+ bool isTradeInAccount(TradeListItem item, WalletBase wallet) =>
114
+ item.trade.fromWalletAddress == null
115
+ ? true
116
+ : wallet.walletAddresses.containsAddress(item.trade.fromWalletAddress!);
117
+}
lib/view_model/dashboard/dashboard_view_model.dart
+84
-85
@@ -1,36 +1,36 @@
1
import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart';
2
+import 'package:cake_wallet/entities/balance_display_mode.dart';
3
import 'package:cake_wallet/entities/buy_provider_types.dart';
4
import 'package:cake_wallet/entities/exchange_api_mode.dart';
4
-import 'package:cake_wallet/store/anonpay/anonpay_transactions_store.dart';
5
-import 'package:cake_wallet/view_model/dashboard/anonpay_transaction_list_item.dart';
6
-import 'package:cake_wallet/view_model/settings/sync_mode.dart';
7
-import 'package:cake_wallet/wallet_type_utils.dart';
8
-import 'package:cw_core/transaction_history.dart';
9
-import 'package:cw_core/balance.dart';
10
-import 'package:cake_wallet/entities/balance_display_mode.dart';
11
-import 'package:cw_core/transaction_info.dart';
5
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
13
-import 'package:cake_wallet/store/settings_store.dart';
6
+import 'package:cake_wallet/generated/i18n.dart';
7
+import 'package:cake_wallet/monero/monero.dart';
8
+import 'package:cake_wallet/store/anonpay/anonpay_transactions_store.dart';
9
+import 'package:cake_wallet/store/app_store.dart';
10
import 'package:cake_wallet/store/dashboard/orders_store.dart';
11
+import 'package:cake_wallet/store/dashboard/trade_filter_store.dart';
12
+import 'package:cake_wallet/store/dashboard/trades_store.dart';
13
+import 'package:cake_wallet/store/dashboard/transaction_filter_store.dart';
14
+import 'package:cake_wallet/store/settings_store.dart';
15
import 'package:cake_wallet/store/yat/yat_store.dart';
16
import 'package:cake_wallet/utils/mobx.dart';
17
+import 'package:cake_wallet/view_model/dashboard/action_list_item.dart';
18
+import 'package:cake_wallet/view_model/dashboard/anonpay_transaction_list_item.dart';
19
import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart';
20
import 'package:cake_wallet/view_model/dashboard/filter_item.dart';
21
+import 'package:cake_wallet/view_model/dashboard/formatted_item_list.dart';
22
import 'package:cake_wallet/view_model/dashboard/order_list_item.dart';
23
import 'package:cake_wallet/view_model/dashboard/trade_list_item.dart';
24
import 'package:cake_wallet/view_model/dashboard/transaction_list_item.dart';
22
-import 'package:cake_wallet/view_model/dashboard/action_list_item.dart';
23
-import 'package:mobx/mobx.dart';
24
-import 'package:cw_core/wallet_base.dart';
25
+import 'package:cake_wallet/view_model/settings/sync_mode.dart';
26
+import 'package:cake_wallet/wallet_type_utils.dart';
27
+import 'package:cw_core/balance.dart';
28
import 'package:cw_core/sync_status.dart';
29
+import 'package:cw_core/transaction_history.dart';
30
+import 'package:cw_core/transaction_info.dart';
31
+import 'package:cw_core/wallet_base.dart';
32
import 'package:cw_core/wallet_type.dart';
27
-import 'package:cake_wallet/store/app_store.dart';
28
-import 'package:cake_wallet/generated/i18n.dart';
29
-import 'package:cake_wallet/store/dashboard/trades_store.dart';
30
-import 'package:cake_wallet/store/dashboard/trade_filter_store.dart';
31
-import 'package:cake_wallet/store/dashboard/transaction_filter_store.dart';
32
-import 'package:cake_wallet/view_model/dashboard/formatted_item_list.dart';
33
-import 'package:cake_wallet/monero/monero.dart';
33
+import 'package:mobx/mobx.dart';
34
35
part 'dashboard_view_model.g.dart';
36
@@ -47,69 +47,69 @@ abstract class DashboardViewModelBase with Store {
47
required this.yatStore,
48
required this.ordersStore,
49
required this.anonpayTransactionsStore})
50
- : hasSellAction = false,
51
- hasBuyAction = false,
52
- hasExchangeAction = false,
53
- isShowFirstYatIntroduction = false,
54
- isShowSecondYatIntroduction = false,
55
- isShowThirdYatIntroduction = false,
56
- filterItems = {
57
- S.current.transactions: [
58
- FilterItem(
59
- value: () => transactionFilterStore.displayAll,
60
- caption: S.current.all_transactions,
61
- onChanged: transactionFilterStore.toggleAll),
62
- FilterItem(
63
- value: () => transactionFilterStore.displayIncoming,
64
- caption: S.current.incoming,
65
- onChanged:transactionFilterStore.toggleIncoming),
66
- FilterItem(
67
- value: () => transactionFilterStore.displayOutgoing,
68
- caption: S.current.outgoing,
69
- onChanged: transactionFilterStore.toggleOutgoing),
70
- // FilterItem(
71
- // value: () => false,
72
- // caption: S.current.transactions_by_date,
73
- // onChanged: null),
74
- ],
75
- S.current.trades: [
76
- FilterItem(
77
- value: () => tradeFilterStore.displayAllTrades,
78
- caption: S.current.all_trades,
79
- onChanged: () => tradeFilterStore
80
- .toggleDisplayExchange(ExchangeProviderDescription.all)),
81
- FilterItem(
82
- value: () => tradeFilterStore.displayChangeNow,
83
- caption: ExchangeProviderDescription.changeNow.title,
84
- onChanged: () => tradeFilterStore
85
- .toggleDisplayExchange(ExchangeProviderDescription.changeNow)),
86
- FilterItem(
87
- value: () => tradeFilterStore.displaySideShift,
88
- caption: ExchangeProviderDescription.sideShift.title,
89
- onChanged: () => tradeFilterStore
90
- .toggleDisplayExchange(ExchangeProviderDescription.sideShift)),
91
- FilterItem(
92
- value: () => tradeFilterStore.displaySimpleSwap,
93
- caption: ExchangeProviderDescription.simpleSwap.title,
94
- onChanged: () => tradeFilterStore
95
- .toggleDisplayExchange(ExchangeProviderDescription.simpleSwap)),
96
- FilterItem(
97
- value: () => tradeFilterStore.displayTrocador,
98
- caption: ExchangeProviderDescription.trocador.title,
99
- onChanged: () => tradeFilterStore
100
- .toggleDisplayExchange(ExchangeProviderDescription.trocador)),
101
- FilterItem(
102
- value: () => tradeFilterStore.displayExolix,
103
- caption: ExchangeProviderDescription.exolix.title,
104
- onChanged: () => tradeFilterStore
105
- .toggleDisplayExchange(ExchangeProviderDescription.exolix)),
106
- ]
107
- },
108
- subname = '',
109
- name = appStore.wallet!.name,
110
- type = appStore.wallet!.type,
111
- transactions = ObservableList<TransactionListItem>(),
112
- wallet = appStore.wallet! {
50
+ : hasSellAction = false,
51
+ hasBuyAction = false,
52
+ hasExchangeAction = false,
53
+ isShowFirstYatIntroduction = false,
54
+ isShowSecondYatIntroduction = false,
55
+ isShowThirdYatIntroduction = false,
56
+ filterItems = {
57
+ S.current.transactions: [
58
+ FilterItem(
59
+ value: () => transactionFilterStore.displayAll,
60
+ caption: S.current.all_transactions,
61
+ onChanged: transactionFilterStore.toggleAll),
62
+ FilterItem(
63
+ value: () => transactionFilterStore.displayIncoming,
64
+ caption: S.current.incoming,
65
+ onChanged: transactionFilterStore.toggleIncoming),
66
+ FilterItem(
67
+ value: () => transactionFilterStore.displayOutgoing,
68
+ caption: S.current.outgoing,
69
+ onChanged: transactionFilterStore.toggleOutgoing),
70
+ // FilterItem(
71
+ // value: () => false,
72
+ // caption: S.current.transactions_by_date,
73
+ // onChanged: null),
74
+ ],
75
+ S.current.trades: [
76
+ FilterItem(
77
+ value: () => tradeFilterStore.displayAllTrades,
78
+ caption: S.current.all_trades,
79
+ onChanged: () =>
80
+ tradeFilterStore.toggleDisplayExchange(ExchangeProviderDescription.all)),
81
+ FilterItem(
82
+ value: () => tradeFilterStore.displayChangeNow,
83
+ caption: ExchangeProviderDescription.changeNow.title,
84
+ onChanged: () =>
85
+ tradeFilterStore.toggleDisplayExchange(ExchangeProviderDescription.changeNow)),
86
+ FilterItem(
87
+ value: () => tradeFilterStore.displaySideShift,
88
+ caption: ExchangeProviderDescription.sideShift.title,
89
+ onChanged: () =>
90
+ tradeFilterStore.toggleDisplayExchange(ExchangeProviderDescription.sideShift)),
91
+ FilterItem(
92
+ value: () => tradeFilterStore.displaySimpleSwap,
93
+ caption: ExchangeProviderDescription.simpleSwap.title,
94
+ onChanged: () =>
95
+ tradeFilterStore.toggleDisplayExchange(ExchangeProviderDescription.simpleSwap)),
96
+ FilterItem(
97
+ value: () => tradeFilterStore.displayTrocador,
98
+ caption: ExchangeProviderDescription.trocador.title,
99
+ onChanged: () =>
100
+ tradeFilterStore.toggleDisplayExchange(ExchangeProviderDescription.trocador)),
101
+ FilterItem(
102
+ value: () => tradeFilterStore.displayExolix,
103
+ caption: ExchangeProviderDescription.exolix.title,
104
+ onChanged: () =>
105
+ tradeFilterStore.toggleDisplayExchange(ExchangeProviderDescription.exolix)),
106
+ ]
107
+ },
108
+ subname = '',
109
+ name = appStore.wallet!.name,
110
+ type = appStore.wallet!.type,
111
+ transactions = ObservableList<TransactionListItem>(),
112
+ wallet = appStore.wallet! {
113
name = wallet.name;
114
type = wallet.type;
115
isShowFirstYatIntroduction = false;
@@ -222,9 +222,8 @@ abstract class DashboardViewModelBase with Store {
222
BalanceDisplayMode get balanceDisplayMode => appStore.settingsStore.balanceDisplayMode;
223
224
@computed
225
- bool get shouldShowMarketPlaceInDashboard {
226
- return appStore.settingsStore.shouldShowMarketPlaceInDashboard;
227
- }
225
+ bool get shouldShowMarketPlaceInDashboard =>
226
+ appStore.settingsStore.shouldShowMarketPlaceInDashboard;
227
228
@computed
229
List<TradeListItem> get trades =>
lib/view_model/dashboard/trade_list_item.dart
+4
-11
@@ -1,25 +1,18 @@
1
+import 'package:cake_wallet/entities/balance_display_mode.dart';
2
import 'package:cake_wallet/exchange/trade.dart';
3
import 'package:cake_wallet/store/settings_store.dart';
4
import 'package:cake_wallet/view_model/dashboard/action_list_item.dart';
4
-import 'package:cake_wallet/entities/balance_display_mode.dart';
5
6
class TradeListItem extends ActionListItem {
7
- TradeListItem({
8
- required this.trade,
9
- required this.settingsStore});
7
+ TradeListItem({required this.trade, required this.settingsStore});
8
9
final Trade trade;
10
final SettingsStore settingsStore;
11
12
BalanceDisplayMode get displayMode => settingsStore.balanceDisplayMode;
13
16
- String get tradeFormattedAmount {
17
- return trade.amount != null
18
- ? displayMode == BalanceDisplayMode.hiddenBalance
19
- ? '---'
20
- : trade.amountFormatted()
21
- : trade.amount;
22
- }
14
+ String get tradeFormattedAmount =>
15
+ displayMode == BalanceDisplayMode.hiddenBalance ? '---' : trade.amountFormatted();
16
17
@override
18
DateTime get date => trade.createdAt!;
lib/view_model/exchange/exchange_view_model.dart
+1
@@ -491,6 +491,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
491
final trade =
492
await provider.createTrade(request: request, isFixedRateMode: isFixedRateMode);
493
trade.walletId = wallet.id;
494
+ trade.fromWalletAddress = wallet.walletAddresses.address;
495
tradesStore.setTrade(trade);
496
await trades.add(trade);
497
tradeState = TradeIsCreatedSuccessfully(trade: trade);
lib/view_model/wallet_keys_view_model.dart
+1
-2
@@ -1,4 +1,3 @@
1
-import 'package:cake_wallet/nano/nano.dart';
1
import 'package:cake_wallet/store/app_store.dart';
2
import 'package:cw_core/transaction_direction.dart';
3
import 'package:cw_core/transaction_info.dart';
@@ -194,7 +193,7 @@ abstract class WalletKeysViewModelBase with Store {
193
194
int _getRestoreHeightByTransactions(WalletType type, DateTime date) {
195
if (type == WalletType.monero) {
197
- return monero!.getHeigthByDate(date: date);
196
+ return monero!.getHeightByDate(date: date);
197
} else if (type == WalletType.haven) {
198
return haven!.getHeightByDate(date: date);
199
}
tool/configure.dart
+1
-1
@@ -235,7 +235,7 @@ abstract class Monero {
235
236
String getSubaddressLabel(Object wallet, int accountIndex, int addressIndex);
237
238
- int getHeigthByDate({required DateTime date});
238
+ int getHeightByDate({required DateTime date});
239
TransactionPriority getDefaultTransactionPriority();
240
TransactionPriority getMoneroTransactionPrioritySlow();
241
TransactionPriority getMoneroTransactionPriorityAutomatic();