| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import SwiftUI
- @MainActor
- @Observable
- final class FrontPageViewModel {
- private static let redditHomeURL = URL(string: "https://www.reddit.com")!
- private(set) var redditLoadURL = redditHomeURL
- static let postGeneratorItem = SidebarNavItem(
- title: "Post Generator",
- subtitle: "Generate engaging posts",
- iconKind: .postGenerator
- )
- var selectedNavItem: SidebarNavItem? = postGeneratorItem
- var isRedditActive = false
- var isSettingsActive = false
- var isHistoryActive = false
- var isPaywallPresented = false
- var authErrorMessage: String?
- private(set) var redditReloadTrigger = 0
- private(set) var redditGoBackTrigger = 0
- var redditCanGoBack = false
- static let historyItem = SidebarNavItem(
- title: "History",
- subtitle: "Saved AI responses",
- iconKind: .history
- )
- static let settingsItem = SidebarNavItem(
- title: "Settings",
- subtitle: "Manage app preferences",
- iconKind: .settings
- )
- func openReddit(at url: URL? = nil) {
- selectedNavItem = nil
- isRedditActive = true
- isSettingsActive = false
- isHistoryActive = 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
- isHistoryActive = false
- }
- func openHistory() {
- selectedNavItem = nil
- isRedditActive = false
- isSettingsActive = false
- isHistoryActive = true
- }
- func selectNavItem(_ item: SidebarNavItem) {
- selectedNavItem = item
- isRedditActive = false
- isSettingsActive = false
- isHistoryActive = false
- }
- func showPaywall() {
- isPaywallPresented = true
- }
- func dismissPaywall() {
- isPaywallPresented = false
- }
- let createItems: [SidebarNavItem] = [
- postGeneratorItem,
- SidebarNavItem(title: "Title Optimizer", subtitle: "Create viral titles", iconKind: .titleOptimizer),
- SidebarNavItem(title: "Comment Writer", subtitle: "Write smart replies", iconKind: .commentWriter),
- ]
- }
|