From d9834f76af9cdeebb7cc1e32f912844f4d81bbd7 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 23 May 2024 17:28:07 +0200 Subject: [PATCH] user creation form field validation --- PadelClub/Extensions/String+Extensions.swift | 7 +++++ PadelClub/Views/User/LoginView.swift | 2 +- PadelClub/Views/User/UserCreationView.swift | 33 +++++++++++++++++--- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/PadelClub/Extensions/String+Extensions.swift b/PadelClub/Extensions/String+Extensions.swift index 4e7c075..0398619 100644 --- a/PadelClub/Extensions/String+Extensions.swift +++ b/PadelClub/Extensions/String+Extensions.swift @@ -32,6 +32,13 @@ extension String { var removingFirstCharacter: String { String(dropFirst()) } + + func isValidEmail() -> Bool { + let emailRegEx = "^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}$" + let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailRegEx) + return emailPredicate.evaluate(with: self) + } + } // MARK: - Club Name diff --git a/PadelClub/Views/User/LoginView.swift b/PadelClub/Views/User/LoginView.swift index 2138ee1..97cf04b 100644 --- a/PadelClub/Views/User/LoginView.swift +++ b/PadelClub/Views/User/LoginView.swift @@ -77,7 +77,7 @@ struct LoginView: View { } } - .navigationTitle("Login") + .navigationTitle("Connexion") .onAppear { #if DEBUG if let username = PListReader.readString(plist: "local", key: "username") { diff --git a/PadelClub/Views/User/UserCreationView.swift b/PadelClub/Views/User/UserCreationView.swift index 48d3d56..7a5d3c0 100644 --- a/PadelClub/Views/User/UserCreationView.swift +++ b/PadelClub/Views/User/UserCreationView.swift @@ -21,7 +21,13 @@ struct UserCreationFormView: View { @State var lastName: String = "" @State var phone: String = "" - @State var showUnmatchingPasswordView = false + @State var showAlertView = false + @State var alertMessage: String = "" { + didSet { + self.showAlertView = true + } + } + @State var selectedCountryIndex = 0 @State var dataCollectAuthorized: Bool = false @@ -41,7 +47,6 @@ struct UserCreationFormView: View { TextField("Email", text: self.$email) .keyboardType(.emailAddress) .textInputAutocapitalization(.never) - } Section { @@ -87,7 +92,7 @@ struct UserCreationFormView: View { .onAppear { self._selectCountry() } - .alert("Les mots de passe ne correspondent pas", isPresented: self.$showUnmatchingPasswordView, actions: { + .alert(self.alertMessage, isPresented: self.$showAlertView, actions: { Button("Ok", action: {}) } ) } @@ -104,7 +109,27 @@ struct UserCreationFormView: View { fileprivate func _create() { guard self.password1 == self.password2 else { - self.showUnmatchingPasswordView = true + self.alertMessage = "Les mots de passe ne correspondent pas" + return + } + + guard username.count > 2 else { + self.alertMessage = "Veuillez renseigner au moins 3 caractères pour votre nom d'utilisateur" + return + } + + guard self.email.isValidEmail() else { + self.alertMessage = "L'adresse email n'est pas valide" + return + } + + guard firstName.count > 0 else { + self.alertMessage = "Votre prénom ne peut pas être vide" + return + } + + guard lastName.count > 0 else { + self.alertMessage = "Votre nom ne peut pas être vide" return }