dev
dart 55 lines 1.82 KB
Raw
1 import 'package:cake_wallet/bitcoin/bitcoin.dart';
2 import 'package:cake_wallet/zcash/zcash.dart';
3 import 'package:cw_core/receive_page_option.dart';
4 import 'package:cw_core/wallet_base.dart';
5 import 'package:cw_core/wallet_type.dart';
6 import 'package:mobx/mobx.dart';
7
8 part 'receive_option_view_model.g.dart';
9
10 class ReceiveOptionViewModel = ReceiveOptionViewModelBase with _$ReceiveOptionViewModel;
11
12 abstract class ReceiveOptionViewModelBase with Store {
13 ReceiveOptionViewModelBase(this._wallet, this.initialPageOption)
14 : selectedReceiveOption = initialPageOption ??
15 ([WalletType.bitcoin, WalletType.litecoin].contains(_wallet.type)
16 ? bitcoin!.getSelectedAddressType(_wallet)
17 : (_wallet.type == WalletType.decred && _wallet.isTestnet)
18 ? ReceivePageOption.testnet
19 : _wallet.type == WalletType.zcash
20 ? zcash!.getSelectedAddressType(_wallet)
21 : ReceivePageOption.mainnet) {
22 if (_wallet.type == WalletType.zcash) {
23 reaction<bool>(
24 (_) => zcash!.ironwoodActive(_wallet.walletAddresses),
25 (_) => _syncZcashShieldedLabel(),
26 );
27 }
28 }
29
30 final WalletBase _wallet;
31
32 final ReceivePageOption? initialPageOption;
33
34 @observable
35 ReceivePageOption selectedReceiveOption;
36
37 @computed
38 List<ReceivePageOption> get options =>
39 _wallet.walletAddresses.receivePageOptions.where(_wallet.receiveOptionAvailable).toList();
40
41 String get walletTypeString => walletTypeToString(_wallet.type);
42
43 @action
44 void selectReceiveOption(ReceivePageOption option) => selectedReceiveOption = option;
45
46 @action
47 void _syncZcashShieldedLabel() {
48 for (final option in options) {
49 if (option.value == selectedReceiveOption.value) {
50 selectedReceiveOption = option;
51 return;
52 }
53 }
54 }
55 }