Implement bank transfer app flows

This commit is contained in:
2026-06-08 00:03:57 +05:00
parent ef877217ad
commit 9b281d48a7
127 changed files with 8008 additions and 90 deletions
@@ -0,0 +1,59 @@
import Foundation
import Observation
@Observable
final class AppViewModel {
enum Route: Equatable {
case onboarding
case login
case lock
case home
}
private(set) var route: Route
init() {
route = AppViewModel.initialRoute()
}
// MARK: - Route transitions (called by child views)
func completeOnboarding() {
UserDefaults.standard.set(true, forKey: "onboarding_done")
route = .login
}
func loginSucceeded() {
route = AppViewModel.requiresLock() ? .lock : .home
}
func unlock() {
route = .home
}
func lock() {
route = .lock
}
func logout() {
route = .login
}
// MARK: - Private
private static func initialRoute() -> Route {
guard UserDefaults.standard.bool(forKey: "onboarding_done") else {
return .onboarding
}
guard CredentialStore.shared.hasAnyCredentials() else {
return .login
}
return requiresLock() ? .lock : .home
}
private static func requiresLock() -> Bool {
let method = UserDefaults.standard.string(forKey: "security_method") ?? ""
return !method.isEmpty && method != "none"
}
}