jsdw_ios/QuickLocation/Section/Schedule/ScheduleViewModel.swift

72 lines
2.0 KiB
Swift

//
// ScheduleViewModel.swift
// QuickLocation
//
// Created by on 2026/6/23.
//
import RxSwift
import RxCocoa
import RxDataSources
import MJRefresh
import ObjectMapper
typealias ViewedListSectionModel = SectionModel<String, ViewedModel>
typealias ScheduleListSectionModel = AnimatableSectionModel<String, ScheduleModel>
class ScheduleViewModel: ViewModelType {
struct Input {}
struct Output {
var sectionedItems: Observable<[ViewedListSectionModel]>
var scheduleSectionedItems: Observable<[ScheduleListSectionModel]>
var refreshResult: Observable<RefreshResult>
var pagination: Observable<PaginationModel?>
var error: Observable<Error>
}
let input: Input
let output: Output
private var listService: ListService<ScheduleListResponse>
private let sectionedItems = PublishSubject<[ViewedListSectionModel]>()
private let scheduleSectionedItems = PublishSubject<[ScheduleListSectionModel]>()
var refresh: MJRefreshComponentAction {
return {
self.listService.request.onNext(.refresh)
}
}
var loadMore: MJRefreshComponentAction {
return {
self.listService.request.onNext(.more)
}
}
func loadViewedData(_ list: [ViewedModel]) {
sectionedItems.onNext(list.mapSection())
}
lazy var cellAction: Action<ScheduleModel, Void> = { this in
return Action { model in
AppRouter.push(Route.scheduleDetail, userInfo: ["scheduleJson": model.toJSON()])
return .empty()
}
}(self)
// MARK: - init
init() {
listService = ItineraryService.query()
input = Input()
output = Output(
sectionedItems: sectionedItems.asObservable(),
scheduleSectionedItems: listService.animatableSectionedItems,
refreshResult: listService.refreshResult,
pagination: listService.pagination,
error: listService.error
)
}
}