|
@@ -3,38 +3,44 @@ import SwiftUI
|
|
|
extension DataTable {
|
|
extension DataTable {
|
|
|
final class StateModel: BaseStateModel<Provider> {
|
|
final class StateModel: BaseStateModel<Provider> {
|
|
|
@Injected() var broadcaster: Broadcaster!
|
|
@Injected() var broadcaster: Broadcaster!
|
|
|
- @Published var items: [Item] = []
|
|
|
|
|
|
|
+ @Published var mode: Mode = .treatments
|
|
|
|
|
+ @Published var treatments: [Treatment] = []
|
|
|
|
|
+ @Published var glucose: [Glucose] = []
|
|
|
|
|
+ var units: GlucoseUnits = .mmolL
|
|
|
|
|
|
|
|
override func subscribe() {
|
|
override func subscribe() {
|
|
|
- setupItems()
|
|
|
|
|
|
|
+ units = settingsManager.settings.units
|
|
|
|
|
+ setupTreatments()
|
|
|
|
|
+ setupGlucose()
|
|
|
broadcaster.register(SettingsObserver.self, observer: self)
|
|
broadcaster.register(SettingsObserver.self, observer: self)
|
|
|
broadcaster.register(PumpHistoryObserver.self, observer: self)
|
|
broadcaster.register(PumpHistoryObserver.self, observer: self)
|
|
|
broadcaster.register(TempTargetsObserver.self, observer: self)
|
|
broadcaster.register(TempTargetsObserver.self, observer: self)
|
|
|
broadcaster.register(CarbsObserver.self, observer: self)
|
|
broadcaster.register(CarbsObserver.self, observer: self)
|
|
|
|
|
+ broadcaster.register(GlucoseObserver.self, observer: self)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private func setupItems() {
|
|
|
|
|
|
|
+ private func setupTreatments() {
|
|
|
DispatchQueue.global().async {
|
|
DispatchQueue.global().async {
|
|
|
let units = self.settingsManager.settings.units
|
|
let units = self.settingsManager.settings.units
|
|
|
|
|
|
|
|
let carbs = self.provider.carbs().map {
|
|
let carbs = self.provider.carbs().map {
|
|
|
- Item(units: units, type: .carbs, date: $0.createdAt, amount: $0.carbs)
|
|
|
|
|
|
|
+ Treatment(units: units, type: .carbs, date: $0.createdAt, amount: $0.carbs)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let boluses = self.provider.pumpHistory()
|
|
let boluses = self.provider.pumpHistory()
|
|
|
.filter { $0.type == .bolus }
|
|
.filter { $0.type == .bolus }
|
|
|
.map {
|
|
.map {
|
|
|
- Item(units: units, type: .bolus, date: $0.timestamp, amount: $0.amount)
|
|
|
|
|
|
|
+ Treatment(units: units, type: .bolus, date: $0.timestamp, amount: $0.amount)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let tempBasals = self.provider.pumpHistory()
|
|
let tempBasals = self.provider.pumpHistory()
|
|
|
.filter { $0.type == .tempBasal || $0.type == .tempBasalDuration }
|
|
.filter { $0.type == .tempBasal || $0.type == .tempBasalDuration }
|
|
|
.chunks(ofCount: 2)
|
|
.chunks(ofCount: 2)
|
|
|
- .compactMap { chunk -> Item? in
|
|
|
|
|
|
|
+ .compactMap { chunk -> Treatment? in
|
|
|
let chunk = Array(chunk)
|
|
let chunk = Array(chunk)
|
|
|
guard chunk.count == 2, chunk[0].type == .tempBasal,
|
|
guard chunk.count == 2, chunk[0].type == .tempBasal,
|
|
|
chunk[1].type == .tempBasalDuration else { return nil }
|
|
chunk[1].type == .tempBasalDuration else { return nil }
|
|
|
- return Item(
|
|
|
|
|
|
|
+ return Treatment(
|
|
|
units: units,
|
|
units: units,
|
|
|
type: .tempBasal,
|
|
type: .tempBasal,
|
|
|
date: chunk[0].timestamp,
|
|
date: chunk[0].timestamp,
|
|
@@ -46,7 +52,7 @@ extension DataTable {
|
|
|
|
|
|
|
|
let tempTargets = self.provider.tempTargets()
|
|
let tempTargets = self.provider.tempTargets()
|
|
|
.map {
|
|
.map {
|
|
|
- Item(
|
|
|
|
|
|
|
+ Treatment(
|
|
|
units: units,
|
|
units: units,
|
|
|
type: .tempTarget,
|
|
type: .tempTarget,
|
|
|
date: $0.createdAt,
|
|
date: $0.createdAt,
|
|
@@ -59,26 +65,37 @@ extension DataTable {
|
|
|
let suspend = self.provider.pumpHistory()
|
|
let suspend = self.provider.pumpHistory()
|
|
|
.filter { $0.type == .pumpSuspend }
|
|
.filter { $0.type == .pumpSuspend }
|
|
|
.map {
|
|
.map {
|
|
|
- Item(units: units, type: .suspend, date: $0.timestamp)
|
|
|
|
|
|
|
+ Treatment(units: units, type: .suspend, date: $0.timestamp)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let resume = self.provider.pumpHistory()
|
|
let resume = self.provider.pumpHistory()
|
|
|
.filter { $0.type == .pumpResume }
|
|
.filter { $0.type == .pumpResume }
|
|
|
.map {
|
|
.map {
|
|
|
- Item(units: units, type: .resume, date: $0.timestamp)
|
|
|
|
|
|
|
+ Treatment(units: units, type: .resume, date: $0.timestamp)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
DispatchQueue.main.async {
|
|
DispatchQueue.main.async {
|
|
|
- self.items = [carbs, boluses, tempBasals, tempTargets, suspend, resume]
|
|
|
|
|
|
|
+ self.treatments = [carbs, boluses, tempBasals, tempTargets, suspend, resume]
|
|
|
.flatMap { $0 }
|
|
.flatMap { $0 }
|
|
|
.sorted { $0.date > $1.date }
|
|
.sorted { $0.date > $1.date }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ func setupGlucose() {
|
|
|
|
|
+ DispatchQueue.main.async {
|
|
|
|
|
+ self.glucose = self.provider.glucose().map(Glucose.init)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
func deleteCarbs(at date: Date) {
|
|
func deleteCarbs(at date: Date) {
|
|
|
provider.deleteCarbs(at: date)
|
|
provider.deleteCarbs(at: date)
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ func deleteGlucose(at index: Int) {
|
|
|
|
|
+ let id = glucose[index].id
|
|
|
|
|
+ provider.deleteGlucose(id: id)
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -86,21 +103,26 @@ extension DataTable.StateModel:
|
|
|
SettingsObserver,
|
|
SettingsObserver,
|
|
|
PumpHistoryObserver,
|
|
PumpHistoryObserver,
|
|
|
TempTargetsObserver,
|
|
TempTargetsObserver,
|
|
|
- CarbsObserver
|
|
|
|
|
|
|
+ CarbsObserver,
|
|
|
|
|
+ GlucoseObserver
|
|
|
{
|
|
{
|
|
|
func settingsDidChange(_: FreeAPSSettings) {
|
|
func settingsDidChange(_: FreeAPSSettings) {
|
|
|
- setupItems()
|
|
|
|
|
|
|
+ setupTreatments()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func pumpHistoryDidUpdate(_: [PumpHistoryEvent]) {
|
|
func pumpHistoryDidUpdate(_: [PumpHistoryEvent]) {
|
|
|
- setupItems()
|
|
|
|
|
|
|
+ setupTreatments()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func tempTargetsDidUpdate(_: [TempTarget]) {
|
|
func tempTargetsDidUpdate(_: [TempTarget]) {
|
|
|
- setupItems()
|
|
|
|
|
|
|
+ setupTreatments()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func carbsDidUpdate(_: [CarbsEntry]) {
|
|
func carbsDidUpdate(_: [CarbsEntry]) {
|
|
|
- setupItems()
|
|
|
|
|
|
|
+ setupTreatments()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ func glucoseDidUpdate(_: [BloodGlucose]) {
|
|
|
|
|
+ setupGlucose()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|