diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index a9483c9..6833c2e 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -127,6 +127,7 @@ class AppState: ObservableObject { } func signIn(username: String, password: String) { + authError = nil signIn(username: username, password: password) .sink( receiveCompletion: { _ in }, diff --git a/Xcodes/Frontend/MainWindow.swift b/Xcodes/Frontend/MainWindow.swift index 4c5aa69..954b221 100644 --- a/Xcodes/Frontend/MainWindow.swift +++ b/Xcodes/Frontend/MainWindow.swift @@ -133,6 +133,7 @@ struct MainWindow: View { .padding() } else { SignInCredentialsView() + .frame(width: 400) } } } diff --git a/Xcodes/Frontend/SignIn/SignInCredentialsView.swift b/Xcodes/Frontend/SignIn/SignInCredentialsView.swift index 06c28ae..593f735 100644 --- a/Xcodes/Frontend/SignIn/SignInCredentialsView.swift +++ b/Xcodes/Frontend/SignIn/SignInCredentialsView.swift @@ -14,30 +14,42 @@ struct SignInCredentialsView: View { Text("Apple ID:") .frame(minWidth: 100, alignment: .trailing) TextField("example@icloud.com", text: $username) - .frame(width: 250) } HStack { Text("Password:") .frame(minWidth: 100, alignment: .trailing) SecureField("Required", text: $password) - .frame(width: 250) + } + if appState.authError != nil { + HStack { + Text("") + .frame(minWidth: 100) + Text(appState.authError?.legibleLocalizedDescription ?? "") + .fixedSize(horizontal: false, vertical: true) + .foregroundColor(.red) + } } HStack { Spacer() - Button("Cancel") { appState.presentedSheet = nil } - .keyboardShortcut(.cancelAction) - ProgressButton(isInProgress: appState.isProcessingAuthRequest, - action: { appState.signIn(username: username, password: password) }) { - Text("Next") + Button("Cancel") { + appState.authError = nil + appState.presentedSheet = nil } + .keyboardShortcut(.cancelAction) + ProgressButton( + isInProgress: appState.isProcessingAuthRequest, + action: { appState.signIn(username: username, password: password) }, + label: { + Text("Next") + } + ) .disabled(username.isEmpty || password.isEmpty) .keyboardShortcut(.defaultAction) } .frame(height: 25) } .padding() - .emittingError($appState.authError, recoveryHandler: { _ in }) } } @@ -45,5 +57,6 @@ struct SignInCredentialsView_Previews: PreviewProvider { static var previews: some View { SignInCredentialsView() .environmentObject(AppState()) + .previewLayout(.sizeThatFits) } }