Files
bookibra/ios/Bookibra/App/AppRouter.swift

62 lines
1.6 KiB
Swift

import Foundation
import SwiftUI
@MainActor
final class AppRouter: ObservableObject {
enum Tab: Hashable {
case library
case discover
case stats
case profile
}
enum Route: Hashable {
case category(name: String)
case detail(BookRemote)
}
@Published var isAuthenticated = false
@Published var selectedTab: Tab = .library
@Published var path: [Route] = []
func resetToHome() {
path.removeAll()
selectedTab = .library
}
}
struct AppDependencies {
let apiClient: APIClientProtocol
let authService: AuthServiceProtocol
let booksService: BooksServiceProtocol
let keychain: KeychainStoreProtocol
let imageCache: ImageCacheProtocol
static func live() -> AppDependencies {
let config = URLSessionConfiguration.default
config.waitsForConnectivity = false
config.timeoutIntervalForRequest = 8
config.timeoutIntervalForResource = 15
let session = URLSession(configuration: config)
let client = APIClient(baseURL: Bundle.main.apiBaseURL, session: session)
return AppDependencies(
apiClient: client,
authService: AuthService(client: client),
booksService: BooksService(client: client),
keychain: KeychainStore(),
imageCache: ImageCache.shared
)
}
}
private struct DependenciesKey: EnvironmentKey {
static let defaultValue = AppDependencies.live()
}
extension EnvironmentValues {
var dependencies: AppDependencies {
get { self[DependenciesKey.self] }
set { self[DependenciesKey.self] = newValue }
}
}