ios_app/Shared/Views/RegistrationView.swift
2025-06-10 05:23:59 +03:00

135 lines
5.1 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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()
}
}