payment and list

This commit is contained in:
Daniel Arantes Loverde
2026-02-24 10:19:47 -03:00
parent 3a3dc7217b
commit ca83a275ac
51 changed files with 1645 additions and 256 deletions

View File

@@ -77,6 +77,8 @@ func userFacingAuthErrorMessage(_ error: Error) -> String {
return "Não foi possível se conectar ao servidor. Tente novamente."
case .invalidURL, .invalidResponse, .decodeError:
return "Ocorreu uma instabilidade ao processar sua solicitação. Tente novamente."
case .cancelled:
return "Cancelado"
}
}

View File

@@ -1,4 +1,7 @@
import SwiftUI
#if canImport(UIKit)
import UIKit
#endif
struct OtpView: View {
private let resendDelaySeconds = 45
@@ -66,6 +69,10 @@ struct OtpView: View {
.frame(height: 204)
.onTapGesture {
isOtpFocused = true
autoFillOtpFromClipboardIfAvailable()
}
.onLongPressGesture {
pasteOtpFromClipboard()
}
.padding(.horizontal, 24)
.padding(.top, 26)
@@ -83,6 +90,13 @@ struct OtpView: View {
}
.padding(.top, 22)
Button("Colar código") {
pasteOtpFromClipboard()
}
.font(AppTypography.heading3)
.foregroundStyle(AppColors.primary)
.padding(.top, 22)
PrimaryButton(title: "Verificar e Entrar") {
validateOtp()
}
@@ -166,6 +180,34 @@ struct OtpView: View {
return Array(otp)[index]
}
private func pasteOtpFromClipboard() {
#if canImport(UIKit)
let raw = UIPasteboard.general.string ?? ""
let digits = raw.filter(\.isNumber)
let trimmed = String(digits.prefix(8))
if trimmed.isEmpty == false {
otp = trimmed
}
#elseif canImport(AppKit)
let raw = NSPasteboard.general.string(forType: .string) ?? ""
let digits = raw.filter(\.isNumber)
let trimmed = String(digits.prefix(8))
if trimmed.isEmpty == false {
otp = trimmed
}
#endif
}
private func autoFillOtpFromClipboardIfAvailable() {
#if canImport(UIKit)
guard otp.isEmpty else { return }
let raw = UIPasteboard.general.string ?? ""
let digits = raw.filter(\.isNumber)
guard digits.count >= 8 else { return }
otp = String(digits.prefix(8))
#endif
}
private func validateOtp() {
let code = otp.filter(\.isNumber)
guard code.count == 8 else { return }