This commit is contained in:
cheykrym 2025-12-03 09:01:01 +03:00
parent 8712c7ea22
commit bbe6a8a3e4
3 changed files with 24 additions and 12 deletions

View File

@ -282,9 +282,6 @@
}, },
"Введите логин и мы отправим шестизначный код подтверждения." : { "Введите логин и мы отправим шестизначный код подтверждения." : {
},
"Введите логин." : {
}, },
"Введите пароль" : { "Введите пароль" : {
"comment" : "Пароль\nПоле ввода пароля на приложение" "comment" : "Пароль\nПоле ввода пароля на приложение"

View File

@ -155,14 +155,14 @@ class LoginViewModel: ObservableObject {
} }
func requestPasswordlessCode() { func requestPasswordlessCode() {
let trimmedLogin = passwordlessLogin.trimmingCharacters(in: .whitespacesAndNewlines) guard LoginViewModel.isLoginValid(passwordlessLogin) else {
errorMessage = NSLocalizedString("Неверный логин", comment: "")
guard !trimmedLogin.isEmpty else {
errorMessage = NSLocalizedString("Введите логин.", comment: "")
showError = true showError = true
return return
} }
let trimmedLogin = passwordlessLogin.trimmingCharacters(in: .whitespacesAndNewlines)
isSendingCode = true isSendingCode = true
showError = false showError = false
@ -369,12 +369,19 @@ extension LoginViewModel {
} }
var canRequestPasswordlessCode: Bool { var canRequestPasswordlessCode: Bool {
!passwordlessLogin.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty && !isSendingCode LoginViewModel.isLoginValid(passwordlessLogin) && !isSendingCode
} }
var canVerifyPasswordlessCode: Bool { var canVerifyPasswordlessCode: Bool {
isVerificationCodeComplete && !isVerifyingCode isVerificationCodeComplete && !isVerifyingCode
} }
static func isLoginValid(_ login: String) -> Bool {
let trimmed = login.trimmingCharacters(in: .whitespacesAndNewlines)
guard trimmed == login else { return false }
let pattern = "^[A-Za-z0-9_]{3,32}$"
return trimmed.range(of: pattern, options: .regularExpression) != nil
}
} }
private extension LoginViewModel { private extension LoginViewModel {

View File

@ -109,8 +109,7 @@ struct PasswordLoginView: View {
} }
private var isUsernameValid: Bool { private var isUsernameValid: Bool {
let pattern = "^[A-Za-z0-9_]{3,32}$" LoginViewModel.isLoginValid(viewModel.username)
return viewModel.username.range(of: pattern, options: .regularExpression) != nil
} }
private var isPasswordValid: Bool { private var isPasswordValid: Bool {
@ -391,6 +390,10 @@ private struct PasswordlessRequestView: View {
let onShowModePrompt: () -> Void let onShowModePrompt: () -> Void
@FocusState private var isFieldFocused: Bool @FocusState private var isFieldFocused: Bool
private var isLoginValid: Bool {
LoginViewModel.isLoginValid(viewModel.passwordlessLogin)
}
var body: some View { var body: some View {
ScrollView(showsIndicators: false) { ScrollView(showsIndicators: false) {
VStack(alignment: .leading, spacing: 24) { VStack(alignment: .leading, spacing: 24) {
@ -419,10 +422,15 @@ private struct PasswordlessRequestView: View {
.cornerRadius(12) .cornerRadius(12)
.focused($isFieldFocused) .focused($isFieldFocused)
.onChange(of: viewModel.passwordlessLogin) { newValue in .onChange(of: viewModel.passwordlessLogin) { newValue in
if newValue.count > 64 { if newValue.count > 32 {
viewModel.passwordlessLogin = String(newValue.prefix(64)) viewModel.passwordlessLogin = String(newValue.prefix(32))
} }
} }
if !isLoginValid && !viewModel.passwordlessLogin.isEmpty {
Text(NSLocalizedString("Неверный логин", comment: ""))
.foregroundColor(.red)
.font(.caption)
}
} }
Button { Button {