FrontPageViewModel.swift 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. private(set) var redditReloadTrigger = 0
  12. static let settingsItem = SidebarNavItem(
  13. title: "Settings",
  14. subtitle: "Manage app preferences",
  15. iconKind: .settings
  16. )
  17. func openReddit(at url: URL? = nil) {
  18. selectedNavItem = nil
  19. isRedditActive = true
  20. isSettingsActive = false
  21. redditLoadURL = url ?? Self.redditHomeURL
  22. redditReloadTrigger += 1
  23. }
  24. func openSettings() {
  25. selectedNavItem = nil
  26. isRedditActive = false
  27. isSettingsActive = true
  28. }
  29. func selectNavItem(_ item: SidebarNavItem) {
  30. selectedNavItem = item
  31. isRedditActive = false
  32. isSettingsActive = false
  33. }
  34. func showPaywall() {
  35. isPaywallPresented = true
  36. }
  37. func dismissPaywall() {
  38. isPaywallPresented = false
  39. }
  40. let createItems: [SidebarNavItem] = [
  41. SidebarNavItem(title: "Post Generator", subtitle: "Generate engaging posts", iconKind: .postGenerator),
  42. SidebarNavItem(title: "Title Optimizer", subtitle: "Create viral titles", iconKind: .titleOptimizer),
  43. SidebarNavItem(title: "Comment Writer", subtitle: "Write smart replies", iconKind: .commentWriter),
  44. ]
  45. }