FrontPageViewModel.swift 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import SwiftUI
  2. @MainActor
  3. @Observable
  4. final class FrontPageViewModel {
  5. private static let redditHomeURL = URL(string: "https://www.reddit.com")!
  6. private(set) var redditLoadURL = redditHomeURL
  7. var selectedNavItem: SidebarNavItem?
  8. var isRedditActive = true
  9. var isSettingsActive = false
  10. var isPaywallPresented = false
  11. var authErrorMessage: String?
  12. private(set) var redditReloadTrigger = 0
  13. static let settingsItem = SidebarNavItem(
  14. title: "Settings",
  15. subtitle: "Manage app preferences",
  16. iconKind: .settings
  17. )
  18. func openReddit(at url: URL? = nil) {
  19. selectedNavItem = nil
  20. isRedditActive = true
  21. isSettingsActive = false
  22. redditLoadURL = url ?? Self.redditHomeURL
  23. redditReloadTrigger += 1
  24. }
  25. func showAuthError(_ message: String) {
  26. authErrorMessage = message
  27. }
  28. func clearAuthError() {
  29. authErrorMessage = nil
  30. }
  31. func openSettings() {
  32. selectedNavItem = nil
  33. isRedditActive = false
  34. isSettingsActive = true
  35. }
  36. func selectNavItem(_ item: SidebarNavItem) {
  37. selectedNavItem = item
  38. isRedditActive = false
  39. isSettingsActive = false
  40. }
  41. func showPaywall() {
  42. isPaywallPresented = true
  43. }
  44. func dismissPaywall() {
  45. isPaywallPresented = false
  46. }
  47. let createItems: [SidebarNavItem] = [
  48. SidebarNavItem(title: "Post Generator", subtitle: "Generate engaging posts", iconKind: .postGenerator),
  49. SidebarNavItem(title: "Title Optimizer", subtitle: "Create viral titles", iconKind: .titleOptimizer),
  50. SidebarNavItem(title: "Comment Writer", subtitle: "Write smart replies", iconKind: .commentWriter),
  51. ]
  52. }