- TransactionAddressTextField migrated to ReducerProtocol - unit and snapshot tests fixed
This commit is contained in:
parent
2afafb1b39
commit
02d094904a
|
@ -150,6 +150,7 @@
|
|||
9E6EF2D12913B75400CA007B /* MnemonicKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2D02913B75400CA007B /* MnemonicKey.swift */; };
|
||||
9E6EF2D32913B79A00CA007B /* WalletStorageKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2D22913B79A00CA007B /* WalletStorageKey.swift */; };
|
||||
9E6EF2D5291525D300CA007B /* CaptureDeviceKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2D4291525D300CA007B /* CaptureDeviceKey.swift */; };
|
||||
9E6EF2D72916BE2500CA007B /* DerivationToolKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6EF2D62916BE2500CA007B /* DerivationToolKey.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 */; };
|
||||
|
@ -401,6 +402,7 @@
|
|||
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>"; };
|
||||
9E6EF2D4291525D300CA007B /* CaptureDeviceKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaptureDeviceKey.swift; sourceTree = "<group>"; };
|
||||
9E6EF2D62916BE2500CA007B /* DerivationToolKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DerivationToolKey.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>"; };
|
||||
|
@ -1146,6 +1148,7 @@
|
|||
9E6EF2CC2913B06300CA007B /* NumberFormatterKey.swift */,
|
||||
9E6EF2CE2913B11A00CA007B /* SDKSynchronizerKey.swift */,
|
||||
9E6EF2D4291525D300CA007B /* CaptureDeviceKey.swift */,
|
||||
9E6EF2D62916BE2500CA007B /* DerivationToolKey.swift */,
|
||||
);
|
||||
path = Dependencies;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1807,6 +1810,7 @@
|
|||
9E39114B2848EEB90073DD9A /* ZCashSDKEnvironment.swift in Sources */,
|
||||
0D0781C4278750E30083ACD7 /* WelcomeView.swift in Sources */,
|
||||
F9971A6527680DFE00A2DB75 /* SettingsStore.swift in Sources */,
|
||||
9E6EF2D72916BE2500CA007B /* DerivationToolKey.swift in Sources */,
|
||||
9EF8139C27F47AED0075AF48 /* InitializationState.swift in Sources */,
|
||||
0D0781C9278776D20083ACD7 /* ZcashSymbol.swift in Sources */,
|
||||
2E8719CB27FB09990082C926 /* TransactionAmountTextField.swift in Sources */,
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
//
|
||||
// DerivationToolKey.swift
|
||||
// secant-testnet
|
||||
//
|
||||
// Created by Lukáš Korba on 05.11.2022.
|
||||
//
|
||||
|
||||
import ComposableArchitecture
|
||||
|
||||
private enum DerivationToolKey: DependencyKey {
|
||||
static let liveValue = WrappedDerivationTool.live()
|
||||
static let testValue = WrappedDerivationTool.live()
|
||||
}
|
||||
|
||||
extension DependencyValues {
|
||||
var derivationTool: WrappedDerivationTool {
|
||||
get { self[DerivationToolKey.self] }
|
||||
set { self[DerivationToolKey.self] = newValue }
|
||||
}
|
||||
}
|
|
@ -13,6 +13,12 @@ typealias SendFlowReducer = Reducer<SendFlowState, SendFlowAction, SendFlowEnvir
|
|||
typealias SendFlowStore = Store<SendFlowState, SendFlowAction>
|
||||
typealias SendFlowViewStore = ViewStore<SendFlowState, SendFlowAction>
|
||||
|
||||
typealias AnyTransactionAddressTextFieldReducer = AnyReducer<
|
||||
TransactionAddressTextFieldReducer.State,
|
||||
TransactionAddressTextFieldReducer.Action,
|
||||
SendFlowEnvironment
|
||||
>
|
||||
|
||||
// MARK: - State
|
||||
|
||||
struct SendFlowState: Equatable {
|
||||
|
@ -29,7 +35,7 @@ struct SendFlowState: Equatable {
|
|||
var memoState: MultiLineTextFieldState
|
||||
var route: Route?
|
||||
var shieldedBalance = WalletBalance.zero
|
||||
var transactionAddressInputState: TransactionAddressTextFieldState
|
||||
var transactionAddressInputState: TransactionAddressTextFieldReducer.State
|
||||
var transactionAmountInputState: TransactionAmountTextFieldState
|
||||
|
||||
var address: String {
|
||||
|
@ -83,7 +89,7 @@ enum SendFlowAction: Equatable {
|
|||
case sendConfirmationPressed
|
||||
case sendTransactionResult(Result<TransactionState, NSError>)
|
||||
case synchronizerStateChanged(WrappedSDKSynchronizerState)
|
||||
case transactionAddressInput(TransactionAddressTextFieldAction)
|
||||
case transactionAddressInput(TransactionAddressTextFieldReducer.Action)
|
||||
case transactionAmountInput(TransactionAmountTextFieldAction)
|
||||
case updateRoute(SendFlowState.Route?)
|
||||
}
|
||||
|
@ -222,16 +228,15 @@ extension SendFlowReducer {
|
|||
environment: { _ in Void() }
|
||||
)
|
||||
|
||||
private static let transactionAddressInputReducer: SendFlowReducer = TransactionAddressTextFieldReducer.default.pullback(
|
||||
private static let transactionAddressInputReducer: SendFlowReducer = AnyTransactionAddressTextFieldReducer { _ in
|
||||
TransactionAddressTextFieldReducer()
|
||||
}
|
||||
.pullback(
|
||||
state: \SendFlowState.transactionAddressInputState,
|
||||
action: /SendFlowAction.transactionAddressInput,
|
||||
environment: { environment in
|
||||
TransactionAddressTextFieldEnvironment(
|
||||
derivationTool: environment.derivationTool
|
||||
)
|
||||
}
|
||||
environment: { $0 }
|
||||
)
|
||||
|
||||
|
||||
private static let transactionAmountInputReducer: SendFlowReducer = TransactionAmountTextFieldReducer.default.pullback(
|
||||
state: \SendFlowState.transactionAmountInputState,
|
||||
action: /SendFlowAction.transactionAmountInput,
|
||||
|
|
|
@ -19,7 +19,7 @@ struct TransactionAddressTextField: View {
|
|||
title: "To",
|
||||
store: store.scope(
|
||||
state: \.textFieldState,
|
||||
action: TransactionAddressTextFieldAction.textField
|
||||
action: TransactionAddressTextFieldReducer.Action.textField
|
||||
),
|
||||
titleAccessoryView: {
|
||||
if !viewStore.textFieldState.text.isEmpty {
|
||||
|
@ -56,8 +56,7 @@ struct TransactionAddressTextField_Previews: PreviewProvider {
|
|||
text: ""
|
||||
)
|
||||
),
|
||||
reducer: .default,
|
||||
environment: .init(derivationTool: .live())
|
||||
reducer: TransactionAddressTextFieldReducer()
|
||||
)
|
||||
)
|
||||
.preferredColorScheme(.dark)
|
||||
|
|
|
@ -8,67 +8,49 @@
|
|||
import ComposableArchitecture
|
||||
import SwiftUI
|
||||
|
||||
typealias TransactionAddressTextFieldReducer = Reducer<
|
||||
TransactionAddressTextFieldState,
|
||||
TransactionAddressTextFieldAction,
|
||||
TransactionAddressTextFieldEnvironment
|
||||
>
|
||||
typealias TransactionAddressTextFieldStore = Store<TransactionAddressTextFieldReducer.State, TransactionAddressTextFieldReducer.Action>
|
||||
|
||||
typealias TransactionAddressTextFieldStore = Store<TransactionAddressTextFieldState, TransactionAddressTextFieldAction>
|
||||
struct TransactionAddressTextFieldReducer: ReducerProtocol {
|
||||
struct State: Equatable {
|
||||
var isValidAddress = false
|
||||
var textFieldState: TCATextFieldReducer.State
|
||||
}
|
||||
|
||||
typealias AnyTCATextFieldReducerAddress = AnyReducer<TCATextFieldReducer.State, TCATextFieldReducer.Action, TransactionAddressTextFieldEnvironment>
|
||||
|
||||
struct TransactionAddressTextFieldState: Equatable {
|
||||
var isValidAddress = false
|
||||
var textFieldState: TCATextFieldReducer.State
|
||||
}
|
||||
|
||||
enum TransactionAddressTextFieldAction: Equatable {
|
||||
case clearAddress
|
||||
case textField(TCATextFieldReducer.Action)
|
||||
}
|
||||
|
||||
struct TransactionAddressTextFieldEnvironment {
|
||||
let derivationTool: WrappedDerivationTool
|
||||
}
|
||||
|
||||
extension TransactionAddressTextFieldReducer {
|
||||
static let `default` = TransactionAddressTextFieldReducer.combine(
|
||||
[
|
||||
addressReducer,
|
||||
textFieldReducer
|
||||
]
|
||||
)
|
||||
enum Action: Equatable {
|
||||
case clearAddress
|
||||
case textField(TCATextFieldReducer.Action)
|
||||
}
|
||||
|
||||
private static let addressReducer = TransactionAddressTextFieldReducer { state, action, environment in
|
||||
switch action {
|
||||
case .clearAddress:
|
||||
state.textFieldState.text = ""
|
||||
return .none
|
||||
@Dependency(\.derivationTool) var derivationTool
|
||||
|
||||
var body: some ReducerProtocol<State, Action> {
|
||||
Reduce { state, action in
|
||||
switch action {
|
||||
case .clearAddress:
|
||||
state.textFieldState.text = ""
|
||||
return .none
|
||||
|
||||
case .textField(.set(let address)):
|
||||
do {
|
||||
state.isValidAddress = try environment.derivationTool.isValidZcashAddress(address)
|
||||
} catch {
|
||||
state.isValidAddress = false
|
||||
case .textField(.set(let address)):
|
||||
do {
|
||||
state.isValidAddress = try derivationTool.isValidZcashAddress(address)
|
||||
} catch {
|
||||
state.isValidAddress = false
|
||||
}
|
||||
|
||||
return .none
|
||||
}
|
||||
|
||||
return .none
|
||||
}
|
||||
|
||||
Scope(state: \.textFieldState, action: /Action.textField) {
|
||||
TCATextFieldReducer()
|
||||
}
|
||||
}
|
||||
|
||||
private static let textFieldReducer: TransactionAddressTextFieldReducer = AnyTCATextFieldReducerAddress { _ in
|
||||
TCATextFieldReducer()
|
||||
}
|
||||
.pullback(
|
||||
state: \TransactionAddressTextFieldState.textFieldState,
|
||||
action: /TransactionAddressTextFieldAction.textField,
|
||||
environment: { $0 }
|
||||
)
|
||||
}
|
||||
|
||||
extension TransactionAddressTextFieldState {
|
||||
static let placeholder = TransactionAddressTextFieldState(
|
||||
// MARK: - Placeholders
|
||||
|
||||
extension TransactionAddressTextFieldReducer.State {
|
||||
static let placeholder = TransactionAddressTextFieldReducer.State(
|
||||
textFieldState: .placeholder
|
||||
)
|
||||
}
|
||||
|
@ -76,9 +58,6 @@ extension TransactionAddressTextFieldState {
|
|||
extension TransactionAddressTextFieldStore {
|
||||
static let placeholder = TransactionAddressTextFieldStore(
|
||||
initialState: .placeholder,
|
||||
reducer: .default,
|
||||
environment: TransactionAddressTextFieldEnvironment(
|
||||
derivationTool: .live()
|
||||
)
|
||||
reducer: TransactionAddressTextFieldReducer()
|
||||
)
|
||||
}
|
||||
|
|
|
@ -621,7 +621,7 @@ class SendTests: XCTestCase {
|
|||
memoState: MultiLineTextFieldState(charLimit: 3),
|
||||
shieldedBalance: WalletBalance(verified: Zatoshi(1), total: Zatoshi(1)),
|
||||
transactionAddressInputState:
|
||||
TransactionAddressTextFieldState(
|
||||
TransactionAddressTextFieldReducer.State(
|
||||
isValidAddress: true,
|
||||
textFieldState:
|
||||
TCATextFieldReducer.State(
|
||||
|
|
|
@ -13,18 +13,14 @@ class TransactionAddressTextFieldTests: XCTestCase {
|
|||
func testClearValue() throws {
|
||||
let store = TestStore(
|
||||
initialState:
|
||||
TransactionAddressTextFieldState(
|
||||
TransactionAddressTextFieldReducer.State(
|
||||
textFieldState:
|
||||
TCATextFieldReducer.State(
|
||||
validationType: nil,
|
||||
text: "t1gXqfSSQt6WfpwyuCU3Wi7sSVZ66DYQ3Po"
|
||||
)
|
||||
),
|
||||
reducer: TransactionAddressTextFieldReducer.default,
|
||||
environment:
|
||||
TransactionAddressTextFieldEnvironment(
|
||||
derivationTool: .live()
|
||||
)
|
||||
reducer: TransactionAddressTextFieldReducer()
|
||||
)
|
||||
|
||||
store.send(.clearAddress) { state in
|
||||
|
|
|
@ -25,7 +25,7 @@ class TransactionConfirmationSnapshotTests: XCTestCase {
|
|||
|
||||
var state = SendFlowState.placeholder
|
||||
state.addMemoState = true
|
||||
state.transactionAddressInputState = TransactionAddressTextFieldState(
|
||||
state.transactionAddressInputState = TransactionAddressTextFieldReducer.State(
|
||||
textFieldState: TCATextFieldReducer.State(
|
||||
validationType: nil,
|
||||
text: "ztestmockeddestinationaddress"
|
||||
|
@ -62,7 +62,7 @@ class TransactionConfirmationSnapshotTests: XCTestCase {
|
|||
|
||||
var state = SendFlowState.placeholder
|
||||
state.addMemoState = true
|
||||
state.transactionAddressInputState = TransactionAddressTextFieldState(
|
||||
state.transactionAddressInputState = TransactionAddressTextFieldReducer.State(
|
||||
textFieldState: TCATextFieldReducer.State(
|
||||
validationType: nil,
|
||||
text: "ztestmockeddestinationaddress"
|
||||
|
|
|
@ -25,7 +25,7 @@ class TransactionSendingTests: XCTestCase {
|
|||
|
||||
var state = SendFlowState.placeholder
|
||||
state.addMemoState = true
|
||||
state.transactionAddressInputState = TransactionAddressTextFieldState(
|
||||
state.transactionAddressInputState = TransactionAddressTextFieldReducer.State(
|
||||
textFieldState: TCATextFieldReducer.State(
|
||||
validationType: nil,
|
||||
text: "ztestmockeddestinationaddress"
|
||||
|
|
Loading…
Reference in New Issue