// // RegistrationView.swift // VolnahubApp // // Created by cheykrym on 09/06/2025. // import SwiftUI struct RegistrationView: View { @Environment(\.presentationMode) private var presentationMode @State private var fullName: String = "" @State private var username: String = "" @State private var password: String = "" @State private var confirmPassword: String = "" @State private var inviteCode: String = "" @AppStorage("isDarkMode") private var isDarkMode: Bool = true private var isUsernameValid: Bool { let pattern = "^[A-Za-z0-9_]{3,32}$" return username.range(of: pattern, options: .regularExpression) != nil } private var isPasswordValid: Bool { password.count >= 6 && password.count <= 32 } private var isConfirmPasswordValid: Bool { confirmPassword == password && !confirmPassword.isEmpty } private var isFormValid: Bool { !fullName.isEmpty && isUsernameValid && isPasswordValid && isConfirmPasswordValid } var body: some View { NavigationView { VStack { Text(NSLocalizedString("RegistrationView_title", comment: "Регистрация")) .font(.largeTitle) .bold() // Spacer() // Полное имя TextField(NSLocalizedString("RegistrationView_fullname", comment: "Полное имя"), text: $fullName) .padding() .background(Color(.secondarySystemBackground)) .cornerRadius(8) .autocapitalization(.words) .disableAutocorrection(true) // Логин TextField(NSLocalizedString("RegistrationView_login", comment: "Логин"), text: $username) .padding() .background(Color(.secondarySystemBackground)) .cornerRadius(8) .autocapitalization(.none) .disableAutocorrection(true) if !isUsernameValid && !username.isEmpty { Text(NSLocalizedString("RegistrationView_error_username_invalid", comment: "Неверный логин")) .foregroundColor(.red) .font(.caption) } // Пароль SecureField(NSLocalizedString("RegistrationView_password", comment: "Пароль"), text: $password) .padding() .background(Color(.secondarySystemBackground)) .cornerRadius(8) .autocapitalization(.none) if !isPasswordValid && !password.isEmpty { Text(NSLocalizedString("RegistrationView_error_password_invalid", comment: "Пароль должен быть от 6 до 32 символов")) .foregroundColor(.red) .font(.caption) } // Подтверждение пароля SecureField(NSLocalizedString("RegistrationView_confirm_password", comment: "Подтверждение пароля"), text: $confirmPassword) .padding() .background(Color(.secondarySystemBackground)) .cornerRadius(8) .autocapitalization(.none) if !isConfirmPasswordValid && !confirmPassword.isEmpty { Text(NSLocalizedString("RegistrationView_error_confirm_password_invalid", comment: "Пароли не совпадают")) .foregroundColor(.red) .font(.caption) } // Инвайт-код TextField(NSLocalizedString("RegistrationView_invite", comment: "Инвайт-код"), text: $inviteCode) .padding() .background(Color(.secondarySystemBackground)) .cornerRadius(8) .autocapitalization(.none) .disableAutocorrection(true) // Кнопка регистрации Button(action: { print("Регистрация отправлена") }) { Text(NSLocalizedString("RegistrationView_button_register", comment: "Зарегистрироваться")) .foregroundColor(.white) .padding() .frame(maxWidth: .infinity) .background(isFormValid ? Color.blue : Color.gray.opacity(0.6)) .cornerRadius(8) } .disabled(!isFormValid) } .padding() .navigationBarItems(trailing: Button(action: { presentationMode.wrappedValue.dismiss() }) { Text(NSLocalizedString("RegistrationView_close", comment: "Закрыть")) } ) } } } struct RegistrationView_Previews: PreviewProvider { static var previews: some View { RegistrationView() } }