// // 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 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() ) } }