80 lines
2.7 KiB
Swift
80 lines
2.7 KiB
Swift
//
|
|
// RootTransactions.swift
|
|
// Zashi
|
|
//
|
|
// Created by Lukáš Korba on 29.01.2025.
|
|
//
|
|
|
|
import Combine
|
|
import ComposableArchitecture
|
|
import Foundation
|
|
import MessageUI
|
|
|
|
import ZcashLightClientKit
|
|
import Generated
|
|
import Models
|
|
import SupportDataGenerator
|
|
|
|
extension Root {
|
|
public func shieldingProcessorReduce() -> Reduce<Root.State, Root.Action> {
|
|
Reduce { state, action in
|
|
switch action {
|
|
case .observeShieldingProcessor:
|
|
return .publisher {
|
|
shieldingProcessor.observe()
|
|
.map(Action.shieldingProcessorStateChanged)
|
|
}
|
|
.cancellable(id: state.shieldingProcessorCancelId, cancelInFlight: true)
|
|
|
|
case .shieldingProcessorStateChanged(let shieldingProcessorState):
|
|
switch shieldingProcessorState {
|
|
case .failed(let error):
|
|
state.messageToBeShared = error.detailedMessage
|
|
state.alert = AlertState.shieldFundsFailure(error)
|
|
case .grpc:
|
|
state.alert = AlertState.shieldFundsGrpc()
|
|
case .proposal(let proposal):
|
|
state.signWithKeystoneCoordFlowState = .initial
|
|
state.signWithKeystoneCoordFlowState.sendConfirmationState.proposal = proposal
|
|
state.signWithKeystoneCoordFlowState.sendConfirmationState.isShielding = true
|
|
//state.homeState.balancesBinding = false
|
|
return .run { send in
|
|
try? await mainQueue.sleep(for: .seconds(0.8))
|
|
await send(.signWithKeystoneRequested)
|
|
}
|
|
case .requested:
|
|
break
|
|
case .succeeded:
|
|
break
|
|
case .unknown:
|
|
break
|
|
}
|
|
return .none
|
|
|
|
case .reportShieldingFailure:
|
|
var supportData = SupportDataGenerator.generate()
|
|
supportData.message =
|
|
"""
|
|
code: -3000
|
|
\(state.messageToBeShared)
|
|
|
|
\(supportData.message)
|
|
"""
|
|
if MFMailComposeViewController.canSendMail() {
|
|
state.supportData = supportData
|
|
} else {
|
|
state.messageShareBinding = supportData.message
|
|
}
|
|
return .none
|
|
|
|
case .shareFinished:
|
|
state.messageShareBinding = nil
|
|
state.messageToBeShared = ""
|
|
return .none
|
|
|
|
default: return .none
|
|
}
|
|
}
|
|
}
|
|
}
|