jsdw_ios/QuickLocation/Section/Schedule/ScheduleDetail/ScheduleDetailVM.swift

66 lines
1.8 KiB
Swift

//
// ScheduleDetailVM.swift
// QuickLocation
//
// Created by on 2026/6/25.
//
import RxSwift
import RxCocoa
import RxDataSources
enum SchedulePointDetailItem {
case point(model: SchedulePointModel)
case event(model: SchedulePointEventModel)
}
typealias SchedulePointDetailSectionModel = SectionModel<String, SchedulePointDetailItem>
struct ScheduleDetailViewModel {
struct Output {
var sectionedItems: Observable<[ViewedListSectionModel]>
var pointSectionedItems: Observable<[SchedulePointDetailSectionModel]>
}
let output: Output
private let sectionedItems = PublishSubject<[ViewedListSectionModel]>()
private let pointSectionedItems = PublishSubject<[SchedulePointDetailSectionModel]>()
let routeId: String
let scheduModel: ScheduleModel?
func loadViewedData(_ list: [ViewedModel]) {
sectionedItems.onNext(list.mapSection())
}
func loadPointData() {
guard let model = scheduModel else { return }
var sectionModels: [SchedulePointDetailSectionModel] = []
var items: [SchedulePointDetailItem] = []
for point in model.points {
items.append(.point(model: point))
for event in point.events {
items.append(.event(model: event))
}
sectionModels.append(SchedulePointDetailSectionModel(model: point.id, items: items))
items = []
}
pointSectionedItems.onNext(sectionModels)
}
// MARK: - init
init(routeId: String, model: ScheduleModel?) {
self.routeId = routeId
self.scheduModel = model
output = Output(
sectionedItems: sectionedItems.asObservable(),
pointSectionedItems: pointSectionedItems.asObservable()
)
}
}