66 lines
1.8 KiB
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()
|
|
)
|
|
}
|
|
}
|