secant-ios-wallet/modules/Sources/Features/SendFlow/SendFlowConfirmationView.swift

172 lines
6.6 KiB
Swift

//
// SendFlowConfirmationView.swift
//
//
// Created by Lukáš Korba on 28.11.2023.
//
import SwiftUI
import ComposableArchitecture
import ZcashLightClientKit
import Generated
import UIComponents
import Utils
public struct SendFlowConfirmationView: View {
let store: SendFlowStore
let tokenName: String
public init(store: SendFlowStore, tokenName: String) {
self.store = store
self.tokenName = tokenName
}
public var body: some View {
ZStack {
WithViewStore(self.store, observe: { $0 }) { viewStore in
ScrollView {
HStack {
VStack(alignment: .leading, spacing: 0) {
Text(L10n.Send.amountSummary)
.font(.custom(FontFamily.Inter.regular.name, size: 14))
BalanceWithIconView(balance: viewStore.amount)
}
Spacer()
}
.padding(.horizontal, 35)
.padding(.top, 40)
.padding(.bottom, 20)
HStack {
VStack(alignment: .leading, spacing: 6) {
Text(L10n.Send.toSummary)
.font(.custom(FontFamily.Inter.regular.name, size: 14))
Text(viewStore.address)
.font(.custom(FontFamily.Inter.regular.name, size: 14))
}
Spacer()
}
.padding(.horizontal, 35)
.padding(.bottom, 20)
HStack {
VStack(alignment: .leading, spacing: 6) {
Text(L10n.Send.feeSummary)
.font(.custom(FontFamily.Inter.regular.name, size: 14))
ZatoshiRepresentationView(
balance: Zatoshi(10_000),
fontName: FontFamily.Archivo.semiBold.name,
mostSignificantFontSize: 16,
leastSignificantFontSize: 8,
format: .expanded
)
}
Spacer()
}
.padding(.horizontal, 35)
.padding(.bottom, 20)
if !viewStore.message.isEmpty {
HStack {
VStack(alignment: .leading, spacing: 10) {
Text(L10n.Send.message)
.font(.custom(FontFamily.Inter.regular.name, size: 14))
VStack(alignment: .leading, spacing: 0) {
Color.clear.frame(height: 0)
Text(viewStore.message)
.font(.custom(FontFamily.Inter.regular.name, size: 13))
.foregroundColor(Asset.Colors.primary.color)
.padding()
}
.messageShape()
}
Spacer()
}
.padding(.horizontal, 35)
.padding(.bottom, 40)
}
HStack(spacing: 30) {
Button {
viewStore.send(.sendPressed)
} label: {
if viewStore.isSending {
HStack(spacing: 10) {
Text(L10n.Send.sending.uppercased())
ProgressView()
.progressViewStyle(
CircularProgressViewStyle(
tint: Asset.Colors.secondary.color
)
)
}
} else {
Text(L10n.General.send.uppercased())
}
}
.zcashStyle(
minWidth: nil,
height: 38,
shadowOffset: 6
)
Button {
viewStore.send(.goBackPressed)
} label: {
Text(L10n.Send.goBack.uppercased())
}
.zcashStyle(
minWidth: nil,
height: 38,
shadowOffset: 6
)
}
.padding(.horizontal, 35)
}
}
.zashiTitle {
Text(L10n.Send.confirmationTitle.uppercased())
.font(.custom(FontFamily.Archivo.bold.name, size: 14))
}
}
.navigationBarBackButtonHidden()
.padding(.vertical, 1)
.applyScreenBackground()
}
}
#Preview {
NavigationView {
SendFlowConfirmationView(
store: .init(
initialState: .init(
addMemoState: true,
destination: nil,
memoState: MessageEditorReducer.State(
charLimit: 512,
text: "This is some message I want to see in the preview and long enough to have at least two lines".redacted
),
scanState: .initial,
shieldedBalance: Zatoshi(4412323012_345),
transactionAddressInputState:
TransactionAddressTextFieldReducer.State(
textFieldState:
TCATextFieldReducer.State(
validationType: nil,
text: "utest1zkkkjfxkamagznjr6ayemffj2d2gacdwpzcyw669pvg06xevzqslpmm27zjsctlkstl2vsw62xrjktmzqcu4yu9zdhdxqz3kafa4j2q85y6mv74rzjcgjg8c0ytrg7dwyzwtgnuc76h".redacted
)
),
transactionAmountInputState: .initial
)
) {
SendFlowReducer()
},
tokenName: "ZEC"
)
}
}