| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import SwiftUI
- extension DataTable {
- class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: DataTableProvider {
- @Injected() var broadcaster: Broadcaster!
- @Injected() var settingsManager: SettingsManager!
- @Published var items: [Item] = []
- override func subscribe() {
- setupItems()
- broadcaster.register(SettingsObserver.self, observer: self)
- broadcaster.register(PumpHistoryObserver.self, observer: self)
- broadcaster.register(TempTargetsObserver.self, observer: self)
- broadcaster.register(CarbsObserver.self, observer: self)
- }
- private func setupItems() {
- DispatchQueue.main.async {
- let units = self.settingsManager.settings.units
- let carbs = self.provider.carbs().map {
- Item(units: units, type: .carbs, date: $0.createdAt, amount: $0.carbs)
- }
- let boluses = self.provider.pumpHistory()
- .filter { $0.type == .bolus }
- .map {
- Item(units: units, type: .bolus, date: $0.timestamp, amount: $0.amount ?? 0)
- }
- let tempBasals = self.provider.pumpHistory()
- .filter { $0.type == .tempBasal || $0.type == .tempBasalDuration }
- .chunks(ofCount: 2)
- .compactMap { chunk -> Item? in
- let chunk = Array(chunk)
- guard chunk.count == 2, chunk[0].type == .tempBasal,
- chunk[1].type == .tempBasalDuration else { return nil }
- return Item(
- units: units,
- type: .tempBasal,
- date: chunk[0].timestamp,
- amount: chunk[0].rate ?? 0,
- secondAmount: nil,
- duration: Decimal(chunk[1].durationMin ?? 0)
- )
- }
- let tempTargets = self.provider.tempTargets()
- .map {
- Item(
- units: units,
- type: .tempTarget,
- date: $0.createdAt,
- amount: $0.targetBottom ?? 0,
- secondAmount: $0.targetTop,
- duration: $0.duration
- )
- }
- self.items = [carbs, boluses, tempBasals, tempTargets]
- .flatMap { $0 }
- .sorted { $0.date > $1.date }
- }
- }
- func deleteCarbs(at date: Date) {
- provider.deleteCarbs(at: date)
- }
- }
- }
- extension DataTable.ViewModel:
- SettingsObserver,
- PumpHistoryObserver,
- TempTargetsObserver,
- CarbsObserver
- {
- func settingsDidChange(_: FreeAPSSettings) {
- setupItems()
- }
- func pumpHistoryDidUpdate(_: [PumpHistoryEvent]) {
- setupItems()
- }
- func tempTargetsDidUpdate(_: [TempTarget]) {
- setupItems()
- }
- func carbsDidUpdate(_: [CarbsEntry]) {
- setupItems()
- }
- }
|