// // DiscoveryCommunityViewModel.swift // Mastodon // // Created by MainasuK on 2022-4-29. // import UIKit import Combine import GameplayKit import CoreData import CoreDataStack import MastodonSDK import MastodonCore final class DiscoveryCommunityViewModel { var disposeBag = Set() // input let context: AppContext let authContext: AuthContext let viewDidAppeared = PassthroughSubject() let statusFetchedResultsController: StatusFetchedResultsController let listBatchFetchViewModel = ListBatchFetchViewModel() // output var diffableDataSource: UITableViewDiffableDataSource? private(set) lazy var stateMachine: GKStateMachine = { let stateMachine = GKStateMachine(states: [ State.Initial(viewModel: self), State.Reloading(viewModel: self), State.Fail(viewModel: self), State.Idle(viewModel: self), State.Loading(viewModel: self), State.NoMore(viewModel: self), ]) stateMachine.enter(State.Initial.self) return stateMachine }() let didLoadLatest = PassthroughSubject() init(context: AppContext, authContext: AuthContext) { self.context = context self.authContext = authContext self.statusFetchedResultsController = StatusFetchedResultsController( managedObjectContext: context.managedObjectContext, domain: authContext.mastodonAuthenticationBox.domain, additionalTweetPredicate: nil ) // end init } }