This commit is contained in:
Daniel Arantes Loverde
2026-03-19 08:44:31 -03:00
parent 5fa98ce358
commit c49725a5f7
16 changed files with 1496 additions and 147 deletions

View File

@@ -62,7 +62,7 @@ struct LoginEmailView: View {
.disabled(isLoading || email.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || normalizePhoneNumberForAPI(phone).isEmpty)
.opacity((isLoading || email.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || normalizePhoneNumberForAPI(phone).isEmpty) ? 0.6 : 1.0)
Text("Enviaremos um código de verificação por SMS \nou E-mail para confirmar seu acesso.")
Text("Enviaremos um código de verificação por SMS \ne E-mail para confirmar seu acesso.")
.font(.caption)
.foregroundStyle(Color.gray)
.multilineTextAlignment(.center)

View File

@@ -41,7 +41,7 @@ struct OtpView: View {
.foregroundStyle(AppColors.textMuted)
.padding(.top, 14)
Text("para \(email)")
Text(otpDeliveryMessage)
.font(AppTypography.body)
.foregroundStyle(AppColors.textMuted)
.lineLimit(1)
@@ -208,6 +208,29 @@ struct OtpView: View {
#endif
}
private var otpDeliveryMessage: String {
"para o seu telefone \(maskedPhoneForDisplay) e seu email \(maskedEmailForDisplay)"
}
private var maskedPhoneForDisplay: String {
let digits = phoneNumber.filter(\.isNumber)
guard digits.isEmpty == false else { return "XXXX" }
let visibleSuffix = String(digits.suffix(min(4, digits.count)))
return "XXXX\(visibleSuffix)"
}
private var maskedEmailForDisplay: String {
let trimmed = email.trimmingCharacters(in: .whitespacesAndNewlines)
guard trimmed.isEmpty == false else { return "XXXX" }
let parts = trimmed.split(separator: "@", omittingEmptySubsequences: false)
guard parts.count == 2 else { return "XXXX" }
let domain = String(parts[1])
return "XXXX@\(domain)"
}
private func validateOtp() {
let code = otp.filter(\.isNumber)
guard code.count == 8 else { return }