secant-ios-wallet/modules/Sources/Features/CoordFlows/TransactionsCoordFlowCoordi...

70 lines
2.6 KiB
Swift

//
// TransactionsCoordFlowCoordinator.swift
// Zashi
//
// Created by Lukáš Korba on 2025-03-20.
//
import ComposableArchitecture
import Generated
// Path
import AddressBook
import TransactionDetails
import TransactionsManager
extension TransactionsCoordFlow {
public func coordinatorReduce() -> Reduce<TransactionsCoordFlow.State, TransactionsCoordFlow.Action> {
Reduce { state, action in
switch action {
// MARK: - Address Book Contact
case .path(.element(id: _, action: .addressBookContact(.dismissAddContactRequired))):
let _ = state.path.popLast()
return .none
// MARK: - Self: Transaction Details
case .transactionDetails(.saveAddressTapped):
var addressBookState = AddressBook.State.initial
addressBookState.address = state.transactionDetailsState.transaction.address
addressBookState.isValidZcashAddress = true
addressBookState.isNameFocused = true
state.path.append(.addressBookContact(addressBookState))
return .none
// MARK: - Self: Transaction Manager
case .transactionsManager(.transactionTapped(let txId)):
if let index = state.transactions.index(id: txId) {
var transactionDetailsState = TransactionDetails.State.initial
transactionDetailsState.transaction = state.transactions[index]
state.path.append(.transactionDetails(transactionDetailsState))
}
return .none
// MARK: - Transaction Details
case .path(.element(id: _, action: .transactionDetails(.saveAddressTapped))):
for element in state.path {
if case .transactionDetails(let transactionDetailsState) = element {
var addressBookState = AddressBook.State.initial
addressBookState.address = transactionDetailsState.transaction.address
addressBookState.isValidZcashAddress = true
addressBookState.isNameFocused = true
state.path.append(.addressBookContact(addressBookState))
}
}
return .none
case .path(.element(id: _, action: .transactionDetails(.closeDetailTapped))):
let _ = state.path.removeLast()
return .none
default: return .none
}
}
}
}