mirror of
https://github.com/XcodesOrg/XcodesApp.git
synced 2026-03-25 08:55:46 +00:00
Fix sign in sheet cancel behavior
This commit is contained in:
parent
1baf1f8515
commit
a70069ce87
3 changed files with 46 additions and 20 deletions
|
|
@ -43,7 +43,6 @@ class AppState: ObservableObject {
|
|||
var isUpdating: Bool { updatePublisher != nil }
|
||||
@Published var presentedSheet: XcodesSheet? = nil
|
||||
@Published var isProcessingAuthRequest = false
|
||||
@Published var secondFactorData: SecondFactorData?
|
||||
@Published var xcodeBeingConfirmedForUninstallation: Xcode?
|
||||
@Published var presentedAlert: XcodesAlert?
|
||||
@Published var helperInstallState: HelperInstallState = .notInstalled
|
||||
|
|
@ -197,12 +196,11 @@ class AppState: ObservableObject {
|
|||
}
|
||||
|
||||
func handleTwoFactorOption(_ option: TwoFactorOption, authOptions: AuthOptionsResponse, serviceKey: String, sessionID: String, scnt: String) {
|
||||
self.secondFactorData = SecondFactorData(
|
||||
self.presentedSheet = .twoFactor(.init(
|
||||
option: option,
|
||||
authOptions: authOptions,
|
||||
sessionData: AppleSessionData(serviceKey: serviceKey, sessionID: sessionID, scnt: scnt)
|
||||
)
|
||||
self.presentedSheet = .twoFactor
|
||||
))
|
||||
}
|
||||
|
||||
func requestSMS(to trustedPhoneNumber: AuthOptionsResponse.TrustedPhoneNumber, authOptions: AuthOptionsResponse, sessionData: AppleSessionData) {
|
||||
|
|
@ -225,7 +223,11 @@ class AppState: ObservableObject {
|
|||
}
|
||||
|
||||
func choosePhoneNumberForSMS(authOptions: AuthOptionsResponse, sessionData: AppleSessionData) {
|
||||
secondFactorData = SecondFactorData(option: .smsPendingChoice, authOptions: authOptions, sessionData: sessionData)
|
||||
self.presentedSheet = .twoFactor(.init(
|
||||
option: .smsPendingChoice,
|
||||
authOptions: authOptions,
|
||||
sessionData: sessionData
|
||||
))
|
||||
}
|
||||
|
||||
func submitSecurityCode(_ code: SecurityCode, sessionData: AppleSessionData) {
|
||||
|
|
@ -255,7 +257,6 @@ class AppState: ObservableObject {
|
|||
switch self.authenticationState {
|
||||
case .authenticated, .unauthenticated, .notAppleDeveloper:
|
||||
self.presentedSheet = nil
|
||||
self.secondFactorData = nil
|
||||
case let .waitingForSecondFactor(option, authOptions, sessionData):
|
||||
self.handleTwoFactorOption(option, authOptions: authOptions, serviceKey: sessionData.serviceKey, sessionID: sessionData.sessionID, scnt: sessionData.scnt)
|
||||
}
|
||||
|
|
@ -698,12 +699,6 @@ class AppState: ObservableObject {
|
|||
var message: String
|
||||
var id: String { title + message }
|
||||
}
|
||||
|
||||
struct SecondFactorData {
|
||||
let option: TwoFactorOption
|
||||
let authOptions: AuthOptionsResponse
|
||||
let sessionData: AppleSessionData
|
||||
}
|
||||
}
|
||||
|
||||
extension OperatingSystemVersion {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,39 @@
|
|||
import Foundation
|
||||
import AppleAPI
|
||||
|
||||
enum XcodesSheet: Identifiable {
|
||||
case signIn
|
||||
case twoFactor
|
||||
case twoFactor(SecondFactorData)
|
||||
|
||||
var id: Int { hashValue }
|
||||
var id: Int { Kind(self).hashValue }
|
||||
|
||||
struct SecondFactorData {
|
||||
let option: TwoFactorOption
|
||||
let authOptions: AuthOptionsResponse
|
||||
let sessionData: AppleSessionData
|
||||
}
|
||||
}
|
||||
|
||||
extension XcodesSheet {
|
||||
private enum Kind: Hashable {
|
||||
case signIn, twoFactor(TwoFactorOption)
|
||||
|
||||
enum TwoFactorOption {
|
||||
case smsSent
|
||||
case codeSent
|
||||
case smsPendingChoice
|
||||
}
|
||||
|
||||
init(_ sheet: XcodesSheet) {
|
||||
switch sheet {
|
||||
case .signIn: self = .signIn
|
||||
case .twoFactor(let data):
|
||||
switch data.option {
|
||||
case .smsSent: self = .twoFactor(.smsSent)
|
||||
case .smsPendingChoice: self = .twoFactor(.smsPendingChoice)
|
||||
case .codeSent: self = .twoFactor(.codeSent)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,8 +47,8 @@ struct MainWindow: View {
|
|||
case .signIn:
|
||||
signInView()
|
||||
.environmentObject(appState)
|
||||
case .twoFactor:
|
||||
secondFactorView(appState.secondFactorData!)
|
||||
case .twoFactor(let secondFactorData):
|
||||
secondFactorView(secondFactorData)
|
||||
.environmentObject(appState)
|
||||
}
|
||||
}
|
||||
|
|
@ -69,14 +69,14 @@ struct MainWindow: View {
|
|||
}
|
||||
|
||||
@ViewBuilder
|
||||
private func secondFactorView(_ secondFactorData: AppState.SecondFactorData) -> some View {
|
||||
private func secondFactorView(_ secondFactorData: XcodesSheet.SecondFactorData) -> some View {
|
||||
switch secondFactorData.option {
|
||||
case .codeSent:
|
||||
SignIn2FAView(isPresented: $appState.secondFactorData.isNotNil, authOptions: secondFactorData.authOptions, sessionData: secondFactorData.sessionData)
|
||||
SignIn2FAView(isPresented: $appState.presentedSheet.isNotNil, authOptions: secondFactorData.authOptions, sessionData: secondFactorData.sessionData)
|
||||
case .smsSent(let trustedPhoneNumber):
|
||||
SignInSMSView(isPresented: $appState.secondFactorData.isNotNil, trustedPhoneNumber: trustedPhoneNumber, authOptions: secondFactorData.authOptions, sessionData: secondFactorData.sessionData)
|
||||
SignInSMSView(isPresented: $appState.presentedSheet.isNotNil, trustedPhoneNumber: trustedPhoneNumber, authOptions: secondFactorData.authOptions, sessionData: secondFactorData.sessionData)
|
||||
case .smsPendingChoice:
|
||||
SignInPhoneListView(isPresented: $appState.secondFactorData.isNotNil, authOptions: secondFactorData.authOptions, sessionData: secondFactorData.sessionData)
|
||||
SignInPhoneListView(isPresented: $appState.presentedSheet.isNotNil, authOptions: secondFactorData.authOptions, sessionData: secondFactorData.sessionData)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue