| 1 | import "package:bloc/bloc.dart"; |
| 2 | import "package:cake_wallet/entities/balance_display_mode.dart"; |
| 3 | import "package:cake_wallet/entities/bitcoin_amount_display_mode.dart"; |
| 4 | import "package:cake_wallet/src/screens/wallet_connect/utils/string_parsing.dart"; |
| 5 | import "package:cake_wallet/store/settings_store.dart"; |
| 6 | import "package:cw_core/crypto_currency.dart"; |
| 7 | import "package:cw_core/currency.dart"; |
| 8 | import "package:mobx/mobx.dart"; |
| 9 | |
| 10 | class MoneySettingsCubit extends Cubit<MoneySettingsState> { |
| 11 | MoneySettingsCubit(SettingsStore _settingsStore) |
| 12 | : super( |
| 13 | MoneySettingsState( |
| 14 | bitcoinAmountDisplayMode: _settingsStore.displayAmountsInSatoshi, |
| 15 | displayMode: _settingsStore.balanceDisplayMode, |
| 16 | ), |
| 17 | ) { |
| 18 | _bitcoinAmountDisplayModeDisposer = reaction( |
| 19 | (_) => _settingsStore.displayAmountsInSatoshi, |
| 20 | (displayMode) => emit(state.copyWith(bitcoinAmountDisplayMode: displayMode)), |
| 21 | ); |
| 22 | _displayModeDisposer = reaction( |
| 23 | (_) => _settingsStore.balanceDisplayMode, |
| 24 | (displayMode) => emit(state.copyWith(displayMode: displayMode)), |
| 25 | ); |
| 26 | } |
| 27 | |
| 28 | late final ReactionDisposer _bitcoinAmountDisplayModeDisposer; |
| 29 | |
| 30 | late final ReactionDisposer _displayModeDisposer; |
| 31 | |
| 32 | @override |
| 33 | Future<void> close() { |
| 34 | if (!_bitcoinAmountDisplayModeDisposer.reaction.isDisposed) { |
| 35 | _bitcoinAmountDisplayModeDisposer.reaction.dispose(); |
| 36 | } |
| 37 | if (!_displayModeDisposer.reaction.isDisposed) { |
| 38 | _displayModeDisposer.reaction.dispose(); |
| 39 | } |
| 40 | return super.close(); |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | class MoneySettingsState { |
| 45 | const MoneySettingsState({required this.bitcoinAmountDisplayMode, required this.displayMode}); |
| 46 | |
| 47 | final BitcoinAmountDisplayMode bitcoinAmountDisplayMode; |
| 48 | final BalanceDisplayMode displayMode; |
| 49 | |
| 50 | bool useBaseUnit(Currency currency) => |
| 51 | ([CryptoCurrency.btc, CryptoCurrency.btcln].contains(currency) && |
| 52 | bitcoinAmountDisplayMode == BitcoinAmountDisplayMode.satoshi) || |
| 53 | (CryptoCurrency.btcln == currency && |
| 54 | bitcoinAmountDisplayMode == BitcoinAmountDisplayMode.satoshiForLightning); |
| 55 | |
| 56 | bool get isHidden => displayMode == BalanceDisplayMode.hiddenBalance; |
| 57 | |
| 58 | String getSymbol(Currency currency, {bool? overrideSettings}) { |
| 59 | if (overrideSettings == null) { |
| 60 | return useBaseUnit(currency) ? "sats" : currency.symbol.safeSubString(0, 8); |
| 61 | } |
| 62 | |
| 63 | if (overrideSettings == true && [CryptoCurrency.btc, CryptoCurrency.btcln].contains(currency)) { |
| 64 | return "sats"; |
| 65 | } |
| 66 | return currency.symbol.safeSubString(0, 8); |
| 67 | } |
| 68 | |
| 69 | |
| 70 | MoneySettingsState copyWith({ |
| 71 | BitcoinAmountDisplayMode? bitcoinAmountDisplayMode, |
| 72 | BalanceDisplayMode? displayMode, |
| 73 | }) => |
| 74 | MoneySettingsState( |
| 75 | bitcoinAmountDisplayMode: bitcoinAmountDisplayMode ?? this.bitcoinAmountDisplayMode, |
| 76 | displayMode: displayMode ?? this.displayMode, |
| 77 | ); |
| 78 | } |