- Fixed App Store icon display with ios-marketing idiom - Added iPad orientation support for multitasking - Added UILaunchScreen for iPad requirements - Removed unused BLE permissions and files from build Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
49 lines
1.5 KiB
Swift
49 lines
1.5 KiB
Swift
import SwiftUI
|
|
|
|
@MainActor
|
|
final class AppState: ObservableObject {
|
|
@Published var userId: Int?
|
|
@Published var userName: String?
|
|
@Published var userPhotoUrl: String?
|
|
@Published var userToken: String?
|
|
@Published var businessId: Int = 0
|
|
@Published var businessName: String = ""
|
|
@Published var isAuthenticated = false
|
|
|
|
func setAuth(userId: Int, token: String, userName: String? = nil, photoUrl: String? = nil) {
|
|
self.userId = userId
|
|
self.userToken = token
|
|
self.userName = userName
|
|
self.userPhotoUrl = photoUrl
|
|
self.isAuthenticated = true
|
|
}
|
|
|
|
func setBusiness(id: Int, name: String) {
|
|
self.businessId = id
|
|
self.businessName = name
|
|
}
|
|
|
|
func clearAuth() {
|
|
userId = nil
|
|
userToken = nil
|
|
userName = nil
|
|
userPhotoUrl = nil
|
|
isAuthenticated = false
|
|
businessId = 0
|
|
businessName = ""
|
|
}
|
|
|
|
/// Handle 401 unauthorized — clear everything and force re-login
|
|
func handleUnauthorized() async {
|
|
await AuthStorage.shared.clearAuth()
|
|
await APIService.shared.logout()
|
|
clearAuth()
|
|
}
|
|
|
|
func loadSavedAuth() async {
|
|
let creds = await AuthStorage.shared.loadAuth()
|
|
guard let creds = creds else { return }
|
|
await APIService.shared.setAuth(token: creds.token, userId: creds.userId)
|
|
setAuth(userId: creds.userId, token: creds.token, userName: creds.userName, photoUrl: creds.photoUrl)
|
|
}
|
|
}
|