35 lines
1.3 KiB
Swift
35 lines
1.3 KiB
Swift
import SwiftUI
|
|
|
|
/// Shown for `AppState.phase == .signedOut` (see `App/RootView.swift`, which
|
|
/// depends on this exact type name and its zero-argument initializer). Owns
|
|
/// simple in-feature navigation between "Anmelden", "Registrieren", and the
|
|
/// post-signup "bitte bestätige deine E-Mail" screen — none of that belongs
|
|
/// in `AppState` since none of it affects whether the user is actually
|
|
/// signed in; `AppState.phase` only changes once a real session exists.
|
|
struct AuthFlowView: View {
|
|
private enum Screen: Equatable {
|
|
case login
|
|
case signup
|
|
case verificationPending(email: String)
|
|
}
|
|
|
|
@State private var screen: Screen = .login
|
|
|
|
var body: some View {
|
|
Group {
|
|
switch screen {
|
|
case .login:
|
|
LoginView(onSwitchToSignup: { screen = .signup })
|
|
case .signup:
|
|
SignupView(
|
|
onSignupSucceeded: { email in screen = .verificationPending(email: email) },
|
|
onSwitchToLogin: { screen = .login }
|
|
)
|
|
case .verificationPending(let email):
|
|
VerificationPendingView(email: email, onGoToLogin: { screen = .login })
|
|
}
|
|
}
|
|
.animation(.default, value: screen)
|
|
}
|
|
}
|