- BalanceBreakdown migrated - unit and snapshot tests fixed - some terminology cleanup beyond scope of this task, the dependencies are keys essentially so I refactored all of them to follow the same syntax - SDKSynchronizer refactored to sdkSynchronizer
This commit is contained in:
parent
85bf0c4224
commit
1c85264083
|
@ -144,9 +144,11 @@
|
|||
9E6713F8289BC58C00A6796F /* BalanceBreakdownView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6713F5289BC58C00A6796F /* BalanceBreakdownView.swift */; };
|
||||
9E6713FA289BE0E100A6796F /* ClearBackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6713F9289BE0E100A6796F /* ClearBackgroundView.swift */; };
|
||||
9E69A24D27FB002800A55317 /* WelcomeStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E69A24C27FB002800A55317 /* WelcomeStore.swift */; };
|
||||
9E6EF2CB291287BB00CA007B /* FeedbackGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2CA291287BB00CA007B /* FeedbackGenerator.swift */; };
|
||||
9E6EF2D12913B75400CA007B /* MnemonicKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2D02913B75400CA007B /* MnemonicKey.swift */; };
|
||||
9E6EF2D32913B79A00CA007B /* WalletStorageKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2D22913B79A00CA007B /* WalletStorageKey.swift */; };
|
||||
9E6EF2CB291287BB00CA007B /* FeedbackGeneratorKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2CA291287BB00CA007B /* FeedbackGeneratorKey.swift */; };
|
||||
9E6EF2CD2913B06300CA007B /* NumberFormatterKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2CC2913B06300CA007B /* NumberFormatterKey.swift */; };
|
||||
9E6EF2CF2913B11A00CA007B /* SDKSynchronizerKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2CE2913B11A00CA007B /* SDKSynchronizerKey.swift */; };
|
||||
9E7225F12889539300DF7F17 /* SettingsSnapshotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7225F02889539300DF7F17 /* SettingsSnapshotTests.swift */; };
|
||||
9E7225F3288AB6DD00DF7F17 /* MultipleLineTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7225F2288AB6DD00DF7F17 /* MultipleLineTextField.swift */; };
|
||||
9E7225F6288AC71A00DF7F17 /* MultiLineTextFieldStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7225F5288AC71A00DF7F17 /* MultiLineTextFieldStore.swift */; };
|
||||
|
@ -200,8 +202,8 @@
|
|||
9EDDEAA22829610D00B4100C /* CurrencySelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EDDEA9F2829610D00B4100C /* CurrencySelectionTests.swift */; };
|
||||
9EDDEAA32829610D00B4100C /* TransactionAmountInputTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EDDEAA02829610D00B4100C /* TransactionAmountInputTests.swift */; };
|
||||
9EDDEAA42829610D00B4100C /* TransactionAddressInputTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EDDEAA12829610D00B4100C /* TransactionAddressInputTests.swift */; };
|
||||
9EF1082B29114B93003D8097 /* Pasteboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF1082A29114B93003D8097 /* Pasteboard.swift */; };
|
||||
9EF1082D29114BCD003D8097 /* NewRecoveryPhrase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF1082C29114BCD003D8097 /* NewRecoveryPhrase.swift */; };
|
||||
9EF1082B29114B93003D8097 /* PasteboardKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF1082A29114B93003D8097 /* PasteboardKey.swift */; };
|
||||
9EF1082D29114BCD003D8097 /* NewRecoveryPhraseKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF1082C29114BCD003D8097 /* NewRecoveryPhraseKey.swift */; };
|
||||
9EF8135C27ECC25E0075AF48 /* WalletStorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF8135A27ECC25E0075AF48 /* WalletStorageTests.swift */; };
|
||||
9EF8135D27ECC25E0075AF48 /* UserPreferencesStorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF8135B27ECC25E0075AF48 /* UserPreferencesStorageTests.swift */; };
|
||||
9EF8136027F043CC0075AF48 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF8135F27F043CC0075AF48 /* AppDelegate.swift */; };
|
||||
|
@ -392,9 +394,11 @@
|
|||
9E6713F6289BC58C00A6796F /* BalanceBreakdownStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceBreakdownStore.swift; sourceTree = "<group>"; };
|
||||
9E6713F9289BE0E100A6796F /* ClearBackgroundView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClearBackgroundView.swift; sourceTree = "<group>"; };
|
||||
9E69A24C27FB002800A55317 /* WelcomeStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeStore.swift; sourceTree = "<group>"; };
|
||||
9E6EF2CA291287BB00CA007B /* FeedbackGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackGenerator.swift; sourceTree = "<group>"; };
|
||||
9E6EF2D02913B75400CA007B /* MnemonicKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MnemonicKey.swift; sourceTree = "<group>"; };
|
||||
9E6EF2D22913B79A00CA007B /* WalletStorageKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletStorageKey.swift; sourceTree = "<group>"; };
|
||||
9E6EF2CA291287BB00CA007B /* FeedbackGeneratorKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackGeneratorKey.swift; sourceTree = "<group>"; };
|
||||
9E6EF2CC2913B06300CA007B /* NumberFormatterKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumberFormatterKey.swift; sourceTree = "<group>"; };
|
||||
9E6EF2CE2913B11A00CA007B /* SDKSynchronizerKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDKSynchronizerKey.swift; sourceTree = "<group>"; };
|
||||
9E7225F02889539300DF7F17 /* SettingsSnapshotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSnapshotTests.swift; sourceTree = "<group>"; };
|
||||
9E7225F2288AB6DD00DF7F17 /* MultipleLineTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleLineTextField.swift; sourceTree = "<group>"; };
|
||||
9E7225F5288AC71A00DF7F17 /* MultiLineTextFieldStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiLineTextFieldStore.swift; sourceTree = "<group>"; };
|
||||
|
@ -442,8 +446,8 @@
|
|||
9EDDEA9F2829610D00B4100C /* CurrencySelectionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CurrencySelectionTests.swift; sourceTree = "<group>"; };
|
||||
9EDDEAA02829610D00B4100C /* TransactionAmountInputTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionAmountInputTests.swift; sourceTree = "<group>"; };
|
||||
9EDDEAA12829610D00B4100C /* TransactionAddressInputTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionAddressInputTests.swift; sourceTree = "<group>"; };
|
||||
9EF1082A29114B93003D8097 /* Pasteboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pasteboard.swift; sourceTree = "<group>"; };
|
||||
9EF1082C29114BCD003D8097 /* NewRecoveryPhrase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewRecoveryPhrase.swift; sourceTree = "<group>"; };
|
||||
9EF1082A29114B93003D8097 /* PasteboardKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasteboardKey.swift; sourceTree = "<group>"; };
|
||||
9EF1082C29114BCD003D8097 /* NewRecoveryPhraseKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewRecoveryPhraseKey.swift; sourceTree = "<group>"; };
|
||||
9EF8135A27ECC25E0075AF48 /* WalletStorageTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletStorageTests.swift; sourceTree = "<group>"; };
|
||||
9EF8135B27ECC25E0075AF48 /* UserPreferencesStorageTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserPreferencesStorageTests.swift; sourceTree = "<group>"; };
|
||||
9EF8135F27F043CC0075AF48 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
|
@ -1132,11 +1136,13 @@
|
|||
9E3911442848EEB90073DD9A /* UserPreferencesStorage.swift */,
|
||||
9E3911472848EEB90073DD9A /* WalletStorage.swift */,
|
||||
9E3911452848EEB90073DD9A /* ZCashSDKEnvironment.swift */,
|
||||
9EF1082A29114B93003D8097 /* Pasteboard.swift */,
|
||||
9EF1082C29114BCD003D8097 /* NewRecoveryPhrase.swift */,
|
||||
9E6EF2CA291287BB00CA007B /* FeedbackGenerator.swift */,
|
||||
9E6EF2D02913B75400CA007B /* MnemonicKey.swift */,
|
||||
9E6EF2D22913B79A00CA007B /* WalletStorageKey.swift */,
|
||||
9EF1082A29114B93003D8097 /* PasteboardKey.swift */,
|
||||
9EF1082C29114BCD003D8097 /* NewRecoveryPhraseKey.swift */,
|
||||
9E6EF2CA291287BB00CA007B /* FeedbackGeneratorKey.swift */,
|
||||
9E6EF2CC2913B06300CA007B /* NumberFormatterKey.swift */,
|
||||
9E6EF2CE2913B11A00CA007B /* SDKSynchronizerKey.swift */,
|
||||
);
|
||||
path = Dependencies;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1674,14 +1680,14 @@
|
|||
0DC487C32772574C00BE6A63 /* RecoveryPhraseBackupSucceededView.swift in Sources */,
|
||||
2EB1C5E827D77F6100BC43D7 /* TCATextFieldStore.swift in Sources */,
|
||||
9E5BF648282277BE00BA3F17 /* WrappedNotificationCenter.swift in Sources */,
|
||||
9EF1082D29114BCD003D8097 /* NewRecoveryPhrase.swift in Sources */,
|
||||
9EF1082D29114BCD003D8097 /* NewRecoveryPhraseKey.swift in Sources */,
|
||||
0D8A43C4272AEEDE005A6414 /* SecantTextStyles.swift in Sources */,
|
||||
9E5BF641281FD7B600BA3F17 /* TransactionFailedView.swift in Sources */,
|
||||
9E4DC6E027C409A100E657F4 /* NeumorphicDesignModifier.swift in Sources */,
|
||||
9E7CB6292875AC2D00A02233 /* AppVersionHandler.swift in Sources */,
|
||||
0DACFA7F27208CE00039EEA5 /* Clamped.swift in Sources */,
|
||||
9EAB467A2861EA6A002904A0 /* TransactionRowView.swift in Sources */,
|
||||
9E6EF2CB291287BB00CA007B /* FeedbackGenerator.swift in Sources */,
|
||||
9E6EF2CB291287BB00CA007B /* FeedbackGeneratorKey.swift in Sources */,
|
||||
0DFE93E3272CA1AA000FCCA5 /* RecoveryPhraseValidationFlowStore.swift in Sources */,
|
||||
9E2DF99E27CF704D00649636 /* ImportWalletView.swift in Sources */,
|
||||
0D535FE2271F9476009A9E3E /* EnumeratedChip.swift in Sources */,
|
||||
|
@ -1733,6 +1739,7 @@
|
|||
66D50668271D9B6100E51F0D /* NavigationButtonStyle.swift in Sources */,
|
||||
9E7225F6288AC71A00DF7F17 /* MultiLineTextFieldStore.swift in Sources */,
|
||||
2EDA07A427EDE2A900D6F09B /* DebugFrame.swift in Sources */,
|
||||
9E6EF2CF2913B11A00CA007B /* SDKSynchronizerKey.swift in Sources */,
|
||||
9E6612332878338C00C75B70 /* LottieAnimation.swift in Sources */,
|
||||
0D3D040A2728B3A10032ABC1 /* RecoveryPhraseDisplayStore.swift in Sources */,
|
||||
9EAB4671285A1C77002904A0 /* DeeplinkHandler.swift in Sources */,
|
||||
|
@ -1757,6 +1764,7 @@
|
|||
34E0AF0F28DEE4C70034CF37 /* HoldToSendButton.swift in Sources */,
|
||||
F9C165C02740403600592F76 /* TransactionConfirmationView.swift in Sources */,
|
||||
0DF2DC5427235E3E00FA31E2 /* View+InnerShadow.swift in Sources */,
|
||||
9E6EF2CD2913B06300CA007B /* NumberFormatterKey.swift in Sources */,
|
||||
3448CB3428E47787006ADEDB /* WrappedDiskSpaceChecker.swift in Sources */,
|
||||
9E39113F2848EC360073DD9A /* WrappedRecoveryPhraseRandomizer.swift in Sources */,
|
||||
9EAFEB84280597B700199FC9 /* WrappedSecItem.swift in Sources */,
|
||||
|
@ -1775,7 +1783,7 @@
|
|||
0D7DF08C271DCC0E00530046 /* ScreenBackground.swift in Sources */,
|
||||
9E01F8242833C0D8000EFC57 /* WrappedURIParser.swift in Sources */,
|
||||
346715A528E2027D0035F7C4 /* CheckCircleStore.swift in Sources */,
|
||||
9EF1082B29114B93003D8097 /* Pasteboard.swift in Sources */,
|
||||
9EF1082B29114B93003D8097 /* PasteboardKey.swift in Sources */,
|
||||
F9C165C22740403600592F76 /* CreateTransactionView.swift in Sources */,
|
||||
F9C165B4274031F600592F76 /* Bindings.swift in Sources */,
|
||||
2E35F99A27B3E99C00EB79CD /* TextFieldTitleAccessoryButtonStyle.swift in Sources */,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// FeedbackGenerator.swift
|
||||
// FeedbackGeneratorKey.swift
|
||||
// secant-testnet
|
||||
//
|
||||
// Created by Lukáš Korba on 02.11.2022.
|
||||
|
@ -7,14 +7,14 @@
|
|||
|
||||
import ComposableArchitecture
|
||||
|
||||
private enum FeedbackGenerator: DependencyKey {
|
||||
private enum FeedbackGeneratorKey: DependencyKey {
|
||||
static let liveValue = WrappedFeedbackGenerator.haptic
|
||||
static let testValue = WrappedFeedbackGenerator.silent
|
||||
}
|
||||
|
||||
extension DependencyValues {
|
||||
var feedbackGenerator: WrappedFeedbackGenerator {
|
||||
get { self[FeedbackGenerator.self] }
|
||||
set { self[FeedbackGenerator.self] = newValue }
|
||||
get { self[FeedbackGeneratorKey.self] }
|
||||
set { self[FeedbackGeneratorKey.self] = newValue }
|
||||
}
|
||||
}
|
|
@ -9,14 +9,14 @@ import ComposableArchitecture
|
|||
|
||||
// TODO: Ensure that sensitive information can't be logged intentionally or by accident #444.
|
||||
// https://github.com/zcash/secant-ios-wallet/issues/444
|
||||
private enum NewPhrase: DependencyKey {
|
||||
private enum NewRecoveryPhraseKey: DependencyKey {
|
||||
static let liveValue = { RecoveryPhrase.init(words: RecoveryPhrase.placeholder.words) }
|
||||
static let testValue = { RecoveryPhrase.init(words: RecoveryPhrase.placeholder.words) }
|
||||
}
|
||||
|
||||
extension DependencyValues {
|
||||
var newPhrase: () -> RecoveryPhrase {
|
||||
get { self[NewPhrase.self] }
|
||||
set { self[NewPhrase.self] = newValue }
|
||||
var newRecoveryPhrase: () -> RecoveryPhrase {
|
||||
get { self[NewRecoveryPhraseKey.self] }
|
||||
set { self[NewRecoveryPhraseKey.self] = newValue }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// NumberFormatterKey.swift
|
||||
// secant-testnet
|
||||
//
|
||||
// Created by Lukáš Korba on 03.11.2022.
|
||||
//
|
||||
|
||||
import ComposableArchitecture
|
||||
|
||||
private enum NumberFormatterKey: DependencyKey {
|
||||
static let liveValue = WrappedNumberFormatter.live()
|
||||
}
|
||||
|
||||
extension DependencyValues {
|
||||
var numberFormatter: WrappedNumberFormatter {
|
||||
get { self[NumberFormatterKey.self] }
|
||||
set { self[NumberFormatterKey.self] = newValue }
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Pasteboard.swift
|
||||
// PasteboardKey.swift
|
||||
// secant-testnet
|
||||
//
|
||||
// Created by Lukáš Korba on 01.11.2022.
|
||||
|
@ -9,14 +9,14 @@ import ComposableArchitecture
|
|||
|
||||
// TODO: Ensure that sensitive information can't be logged intentionally or by accident #444.
|
||||
// https://github.com/zcash/secant-ios-wallet/issues/444
|
||||
private enum Pasteboard: DependencyKey {
|
||||
private enum PasteboardKey: DependencyKey {
|
||||
static let liveValue = WrappedPasteboard.live
|
||||
static let testValue = WrappedPasteboard.test
|
||||
}
|
||||
|
||||
extension DependencyValues {
|
||||
var pasteboard: WrappedPasteboard {
|
||||
get { self[Pasteboard.self] }
|
||||
set { self[Pasteboard.self] = newValue }
|
||||
get { self[PasteboardKey.self] }
|
||||
set { self[PasteboardKey.self] = newValue }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
//
|
||||
// SDKSynchronizerKey.swift
|
||||
// secant-testnet
|
||||
//
|
||||
// Created by Lukáš Korba on 03.11.2022.
|
||||
//
|
||||
|
||||
import ComposableArchitecture
|
||||
|
||||
private enum SDKSynchronizerKey: DependencyKey {
|
||||
static let liveValue: WrappedSDKSynchronizer = LiveWrappedSDKSynchronizer()
|
||||
static let testValue: WrappedSDKSynchronizer = MockWrappedSDKSynchronizer()
|
||||
}
|
||||
|
||||
extension DependencyValues {
|
||||
var sdkSynchronizer: WrappedSDKSynchronizer {
|
||||
get { self[SDKSynchronizerKey.self] }
|
||||
set { self[SDKSynchronizerKey.self] = newValue }
|
||||
}
|
||||
}
|
|
@ -9,65 +9,38 @@ import Foundation
|
|||
import ComposableArchitecture
|
||||
import ZcashLightClientKit
|
||||
|
||||
typealias BalanceBreakdownReducer = Reducer<BalanceBreakdownState, BalanceBreakdownAction, BalanceBreakdownEnvironment>
|
||||
typealias BalanceBreakdownStore = Store<BalanceBreakdownState, BalanceBreakdownAction>
|
||||
typealias BalanceBreakdownViewStore = ViewStore<BalanceBreakdownState, BalanceBreakdownAction>
|
||||
typealias BalanceBreakdownStore = Store<BalanceBreakdown.State, BalanceBreakdown.Action>
|
||||
|
||||
// MARK: - State
|
||||
|
||||
struct BalanceBreakdownState: Equatable {
|
||||
var autoShieldingTreshold: Zatoshi
|
||||
var latestBlock: String
|
||||
var shieldedBalance: WalletBalance
|
||||
var transparentBalance: WalletBalance
|
||||
|
||||
var totalBalance: Zatoshi {
|
||||
shieldedBalance.total + transparentBalance.total
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Action
|
||||
|
||||
enum BalanceBreakdownAction: Equatable {
|
||||
case onAppear
|
||||
case onDisappear
|
||||
case synchronizerStateChanged(WrappedSDKSynchronizerState)
|
||||
case updateLatestBlock
|
||||
case updateSynchronizerStatus
|
||||
}
|
||||
|
||||
// MARK: - Environment
|
||||
|
||||
struct BalanceBreakdownEnvironment {
|
||||
let numberFormatter: WrappedNumberFormatter
|
||||
let SDKSynchronizer: WrappedSDKSynchronizer
|
||||
let scheduler: AnySchedulerOf<DispatchQueue>
|
||||
}
|
||||
|
||||
extension BalanceBreakdownEnvironment {
|
||||
static let live = BalanceBreakdownEnvironment(
|
||||
numberFormatter: .live(),
|
||||
SDKSynchronizer: LiveWrappedSDKSynchronizer(),
|
||||
scheduler: DispatchQueue.main.eraseToAnyScheduler()
|
||||
)
|
||||
|
||||
static let mock = BalanceBreakdownEnvironment(
|
||||
numberFormatter: .live(),
|
||||
SDKSynchronizer: MockWrappedSDKSynchronizer(),
|
||||
scheduler: DispatchQueue.main.eraseToAnyScheduler()
|
||||
)
|
||||
}
|
||||
|
||||
// MARK: - Reducer
|
||||
|
||||
extension BalanceBreakdownReducer {
|
||||
struct BalanceBreakdown: ReducerProtocol {
|
||||
private enum CancelId {}
|
||||
|
||||
struct State: Equatable {
|
||||
var autoShieldingTreshold: Zatoshi
|
||||
var latestBlock: String
|
||||
var shieldedBalance: WalletBalance
|
||||
var transparentBalance: WalletBalance
|
||||
|
||||
var totalBalance: Zatoshi {
|
||||
shieldedBalance.total + transparentBalance.total
|
||||
}
|
||||
}
|
||||
|
||||
static let `default` = BalanceBreakdownReducer { state, action, environment in
|
||||
@Dependency(\.numberFormatter) var numberFormatter
|
||||
@Dependency(\.sdkSynchronizer) var sdkSynchronizer
|
||||
|
||||
enum Action: Equatable {
|
||||
case onAppear
|
||||
case onDisappear
|
||||
case synchronizerStateChanged(WrappedSDKSynchronizerState)
|
||||
case updateLatestBlock
|
||||
case updateSynchronizerStatus
|
||||
}
|
||||
|
||||
func reduce(into state: inout State, action: Action) -> ComposableArchitecture.EffectTask<Action> {
|
||||
switch action {
|
||||
case .onAppear:
|
||||
return environment.SDKSynchronizer.stateChanged
|
||||
.map(BalanceBreakdownAction.synchronizerStateChanged)
|
||||
return sdkSynchronizer.stateChanged
|
||||
.map(BalanceBreakdown.Action.synchronizerStateChanged)
|
||||
.eraseToEffect()
|
||||
.cancellable(id: CancelId.self, cancelInFlight: true)
|
||||
|
||||
|
@ -77,21 +50,21 @@ extension BalanceBreakdownReducer {
|
|||
case .synchronizerStateChanged(.synced):
|
||||
return Effect(value: .updateSynchronizerStatus)
|
||||
|
||||
case .synchronizerStateChanged(let synchronizerState):
|
||||
case .synchronizerStateChanged:
|
||||
return Effect(value: .updateSynchronizerStatus)
|
||||
|
||||
case .updateSynchronizerStatus:
|
||||
if let shieldedBalance = environment.SDKSynchronizer.latestScannedSynchronizerState?.shieldedBalance {
|
||||
if let shieldedBalance = sdkSynchronizer.latestScannedSynchronizerState?.shieldedBalance {
|
||||
state.shieldedBalance = shieldedBalance
|
||||
}
|
||||
if let transparentBalance = environment.SDKSynchronizer.latestScannedSynchronizerState?.transparentBalance {
|
||||
if let transparentBalance = sdkSynchronizer.latestScannedSynchronizerState?.transparentBalance {
|
||||
state.transparentBalance = transparentBalance
|
||||
}
|
||||
return Effect(value: .updateLatestBlock)
|
||||
|
||||
case .updateLatestBlock:
|
||||
guard let latestBlockNumber = environment.SDKSynchronizer.latestScannedSynchronizerState?.latestScannedHeight,
|
||||
let latestBlock = environment.numberFormatter.string(NSDecimalNumber(value: latestBlockNumber)) else {
|
||||
guard let latestBlockNumber = sdkSynchronizer.latestScannedSynchronizerState?.latestScannedHeight,
|
||||
let latestBlock = numberFormatter.string(NSDecimalNumber(value: latestBlockNumber)) else {
|
||||
state.latestBlock = "unknown"
|
||||
return .none
|
||||
}
|
||||
|
@ -103,8 +76,8 @@ extension BalanceBreakdownReducer {
|
|||
|
||||
// MARK: - Placeholders
|
||||
|
||||
extension BalanceBreakdownState {
|
||||
static let placeholder = BalanceBreakdownState(
|
||||
extension BalanceBreakdown.State {
|
||||
static let placeholder = BalanceBreakdown.State(
|
||||
autoShieldingTreshold: Zatoshi(1_000_000),
|
||||
latestBlock: "unknown",
|
||||
shieldedBalance: WalletBalance.zero,
|
||||
|
@ -115,7 +88,6 @@ extension BalanceBreakdownState {
|
|||
extension BalanceBreakdownStore {
|
||||
static let placeholder = BalanceBreakdownStore(
|
||||
initialState: .placeholder,
|
||||
reducer: .default,
|
||||
environment: .live
|
||||
reducer: BalanceBreakdown()
|
||||
)
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ import SwiftUI
|
|||
import ComposableArchitecture
|
||||
import ZcashLightClientKit
|
||||
|
||||
struct BalanceBreakdown: View {
|
||||
struct BalanceBreakdownView: View {
|
||||
let store: BalanceBreakdownStore
|
||||
|
||||
var body: some View {
|
||||
|
@ -48,7 +48,7 @@ struct BalanceBreakdown: View {
|
|||
}
|
||||
}
|
||||
|
||||
extension BalanceBreakdown {
|
||||
extension BalanceBreakdownView {
|
||||
func balanceView(title: String, _ balance: Zatoshi, titleColor: Color = .white) -> some View {
|
||||
VStack(alignment: .leading) {
|
||||
Text("\(title)")
|
||||
|
@ -62,7 +62,7 @@ extension BalanceBreakdown {
|
|||
|
||||
struct BalanceBreakdown_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
BalanceBreakdown(store: .placeholder)
|
||||
BalanceBreakdownView(store: .placeholder)
|
||||
.preferredColorScheme(.dark)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,8 @@ typealias HomeReducer = Reducer<HomeState, HomeAction, HomeEnvironment>
|
|||
typealias HomeStore = Store<HomeState, HomeAction>
|
||||
typealias HomeViewStore = ViewStore<HomeState, HomeAction>
|
||||
|
||||
typealias AnyBalanceBreakdownReducer = AnyReducer<BalanceBreakdown.State, BalanceBreakdown.Action, HomeEnvironment>
|
||||
|
||||
// MARK: State
|
||||
|
||||
struct HomeState: Equatable {
|
||||
|
@ -23,7 +25,7 @@ struct HomeState: Equatable {
|
|||
|
||||
var route: Route?
|
||||
|
||||
var balanceBreakdown: BalanceBreakdownState
|
||||
var balanceBreakdown: BalanceBreakdown.State
|
||||
var drawerOverlay: DrawerOverlay
|
||||
var profileState: ProfileState
|
||||
var requestState: RequestState
|
||||
|
@ -58,7 +60,7 @@ struct HomeState: Equatable {
|
|||
// MARK: Action
|
||||
|
||||
enum HomeAction: Equatable {
|
||||
case balanceBreakdown(BalanceBreakdownAction)
|
||||
case balanceBreakdown(BalanceBreakdown.Action)
|
||||
case debugMenuStartup
|
||||
case onAppear
|
||||
case onDisappear
|
||||
|
@ -285,16 +287,13 @@ extension HomeReducer {
|
|||
}
|
||||
)
|
||||
|
||||
private static let balanceBreakdownReducer: HomeReducer = BalanceBreakdownReducer.default.pullback(
|
||||
private static let balanceBreakdownReducer: HomeReducer = AnyBalanceBreakdownReducer { _ in
|
||||
BalanceBreakdown()
|
||||
}
|
||||
.pullback(
|
||||
state: \HomeState.balanceBreakdown,
|
||||
action: /HomeAction.balanceBreakdown,
|
||||
environment: { environment in
|
||||
BalanceBreakdownEnvironment(
|
||||
numberFormatter: .live(),
|
||||
SDKSynchronizer: environment.SDKSynchronizer,
|
||||
scheduler: environment.scheduler
|
||||
)
|
||||
}
|
||||
environment: { $0 }
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ struct HomeView: View {
|
|||
.onAppear(perform: { viewStore.send(.onAppear) })
|
||||
.onDisappear(perform: { viewStore.send(.onDisappear) })
|
||||
.fullScreenCover(isPresented: viewStore.bindingForRoute(.balanceBreakdown)) {
|
||||
BalanceBreakdown(store: store.balanceBreakdownStore())
|
||||
BalanceBreakdownView(store: store.balanceBreakdownStore())
|
||||
}
|
||||
}
|
||||
.navigationLinkEmpty(
|
||||
|
|
|
@ -24,13 +24,13 @@ struct RecoveryPhraseDisplay: ReducerProtocol {
|
|||
}
|
||||
|
||||
@Dependency(\.pasteboard) var pasteboard
|
||||
@Dependency(\.newPhrase) var newPhrase
|
||||
@Dependency(\.newRecoveryPhrase) var newRecoveryPhrase
|
||||
|
||||
func reduce(into state: inout State, action: Action) -> EffectTask<Action> {
|
||||
switch action {
|
||||
case .createPhrase:
|
||||
return .run { send in
|
||||
await send(.phraseResponse(newPhrase()))
|
||||
await send(.phraseResponse(newRecoveryPhrase()))
|
||||
}
|
||||
|
||||
case .copyToBufferPressed:
|
||||
|
|
|
@ -17,13 +17,8 @@ class BalanceBreakdownTests: XCTestCase {
|
|||
|
||||
let store = TestStore(
|
||||
initialState: .placeholder,
|
||||
reducer: BalanceBreakdownReducer.default,
|
||||
environment:
|
||||
BalanceBreakdownEnvironment(
|
||||
numberFormatter: .live(),
|
||||
SDKSynchronizer: MockWrappedSDKSynchronizer(),
|
||||
scheduler: testScheduler.eraseToAnyScheduler()
|
||||
)
|
||||
reducer: BalanceBreakdown()
|
||||
.dependency(\.mainQueue, testScheduler.eraseToAnyScheduler())
|
||||
)
|
||||
|
||||
store.send(.onAppear)
|
||||
|
|
|
@ -14,16 +14,15 @@ import SwiftUI
|
|||
class BalanceBreakdownSnapshotTests: XCTestCase {
|
||||
func testBalanceBreakdownSnapshot() throws {
|
||||
let store = Store(
|
||||
initialState: BalanceBreakdownState(
|
||||
initialState: BalanceBreakdown.State(
|
||||
autoShieldingTreshold: Zatoshi(1_000_000),
|
||||
latestBlock: "unknown",
|
||||
shieldedBalance: WalletBalance(verified: Zatoshi(123_000_000_000), total: Zatoshi(123_000_000_000)),
|
||||
transparentBalance: WalletBalance(verified: Zatoshi(850_000_000), total: Zatoshi(850_000_000))
|
||||
),
|
||||
reducer: BalanceBreakdownReducer.default,
|
||||
environment: .mock
|
||||
reducer: BalanceBreakdown()
|
||||
)
|
||||
|
||||
addAttachments(BalanceBreakdown(store: store))
|
||||
addAttachments(BalanceBreakdownView(store: store))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue