diff --git a/geteduroam/GeteduroamPackage/Sources/Backport/CredentialAlert/CredentialAlert.swift b/geteduroam/GeteduroamPackage/Sources/Backport/CredentialAlert/CredentialAlert.swift index b633fc2..5be72f9 100644 --- a/geteduroam/GeteduroamPackage/Sources/Backport/CredentialAlert/CredentialAlert.swift +++ b/geteduroam/GeteduroamPackage/Sources/Backport/CredentialAlert/CredentialAlert.swift @@ -3,11 +3,12 @@ import SwiftUI public struct CredentialAlert { - public init(title: String, isPresented: Binding, usernamePrompt: String, username: Binding, passwordPrompt: String, password: Binding, cancelButtonTitle: String, cancelAction: @escaping () -> (), doneButtonTitle: String, doneAction: @escaping () -> (), message: String) { + public init(title: String, isPresented: Binding, usernamePrompt: String, username: Binding, onUsernameSubmit: @escaping () -> (), passwordPrompt: String, password: Binding, cancelButtonTitle: String, cancelAction: @escaping () -> (), doneButtonTitle: String, doneAction: @escaping () -> (), message: String) { self.title = title self.isPresented = isPresented self.usernamePrompt = usernamePrompt self.username = username + self.onUsernameSubmit = onUsernameSubmit self.passwordPrompt = passwordPrompt self.password = password self.cancelButtonTitle = cancelButtonTitle @@ -21,6 +22,7 @@ public struct CredentialAlert { let isPresented: Binding let usernamePrompt: String let username: Binding + let onUsernameSubmit: () -> () let passwordPrompt: String let password: Binding let cancelButtonTitle: String @@ -77,6 +79,7 @@ public extension Backport where Content: View { actions: { TextField(alert.usernamePrompt, text: alert.username) .textContentType(.username) + .onSubmit(alert.onUsernameSubmit) SecureField(alert.passwordPrompt, text: alert.password) .textContentType(.password) Button(alert.cancelButtonTitle, role: .cancel, action: alert.cancelAction) diff --git a/geteduroam/GeteduroamPackage/Sources/Connect/ConnectFeature.swift b/geteduroam/GeteduroamPackage/Sources/Connect/ConnectFeature.swift index 2f2105b..e9a45bc 100644 --- a/geteduroam/GeteduroamPackage/Sources/Connect/ConnectFeature.swift +++ b/geteduroam/GeteduroamPackage/Sources/Connect/ConnectFeature.swift @@ -45,6 +45,13 @@ public struct Connect: Reducer { } } + public mutating func appendRequiredUserNameSuffix() { + guard let requiredUserNameSuffix, let username = credentials?.username, !username.isEmpty, !username.contains("@") else { + return + } + credentials?.username = username + "@" + requiredUserNameSuffix + } + public var password: String { credentials?.password ?? "" } @@ -172,6 +179,7 @@ public struct Connect: Reducer { case foundSSID(String) case logInButtonTapped case onAppear + case onUsernameSubmit case select(Profile.ID) case startAgainTapped case updatePassword(String) @@ -450,7 +458,12 @@ public struct Connect: Reducer { } return .none + case .onUsernameSubmit: + state.appendRequiredUserNameSuffix() + return .none + case let .updatePassword(password): + state.appendRequiredUserNameSuffix() let trimmedPassword = password.trimmingCharacters(in: .whitespacesAndNewlines) if let _ = state.credentials { state.credentials?.password = trimmedPassword diff --git a/geteduroam/GeteduroamPackage/Sources/Connect/ConnectView-iOS.swift b/geteduroam/GeteduroamPackage/Sources/Connect/ConnectView-iOS.swift index acd13e5..b8aeb0c 100644 --- a/geteduroam/GeteduroamPackage/Sources/Connect/ConnectView-iOS.swift +++ b/geteduroam/GeteduroamPackage/Sources/Connect/ConnectView-iOS.swift @@ -134,6 +134,9 @@ public struct ConnectView_iOS: View { .binding( get: \.username, send: Connect.Action.updateUsername), + onUsernameSubmit: { + viewStore.send(.onUsernameSubmit) + }, passwordPrompt: NSLocalizedString("Password", bundle: .module, comment: ""), password: viewStore .binding(