| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import SwiftUI
- @MainActor
- @Observable
- final class FrontPageViewModel {
- private static let redditHomeURL = URL(string: "https://www.reddit.com")!
- private(set) var redditLoadURL = redditHomeURL
- var selectedNavItem: SidebarNavItem?
- var isRedditActive = true
- var isSettingsActive = false
- var isPaywallPresented = false
- var authErrorMessage: String?
- private(set) var redditReloadTrigger = 0
- private(set) var redditGoBackTrigger = 0
- var redditCanGoBack = false
- static let settingsItem = SidebarNavItem(
- title: "Settings",
- subtitle: "Manage app preferences",
- iconKind: .settings
- )
- func openReddit(at url: URL? = nil) {
- selectedNavItem = nil
- isRedditActive = true
- isSettingsActive = false
- let targetURL = url ?? Self.redditHomeURL
- redditLoadURL = targetURL
- if RedditWebAuthHelper.isRedditHomeURL(targetURL) {
- redditCanGoBack = false
- }
- redditReloadTrigger += 1
- }
- func showAuthError(_ message: String) {
- authErrorMessage = message
- }
- func clearAuthError() {
- authErrorMessage = nil
- }
- func goBackInReddit() {
- guard redditCanGoBack else { return }
- redditGoBackTrigger += 1
- }
- func updateRedditCanGoBack(_ canGoBack: Bool) {
- redditCanGoBack = canGoBack
- }
- func openSettings() {
- selectedNavItem = nil
- isRedditActive = false
- isSettingsActive = true
- }
- func selectNavItem(_ item: SidebarNavItem) {
- selectedNavItem = item
- isRedditActive = false
- isSettingsActive = false
- }
- func showPaywall() {
- isPaywallPresented = true
- }
- func dismissPaywall() {
- isPaywallPresented = false
- }
- let createItems: [SidebarNavItem] = [
- SidebarNavItem(title: "Post Generator", subtitle: "Generate engaging posts", iconKind: .postGenerator),
- SidebarNavItem(title: "Title Optimizer", subtitle: "Create viral titles", iconKind: .titleOptimizer),
- SidebarNavItem(title: "Comment Writer", subtitle: "Write smart replies", iconKind: .commentWriter),
- ]
- }
|