8
8
9
9
import SwiftUI
10
10
import LoopKit
11
+ import LoopKitUI
11
12
import MockKit
12
13
13
14
class MockPumpManagerSettingsViewModel : ObservableObject {
@@ -75,6 +76,24 @@ class MockPumpManagerSettingsViewModel: ObservableObject {
75
76
}
76
77
77
78
@Published private( set) var basalDeliveryRate : Double ?
79
+
80
+ @Published private( set) var basalDeliveryRateDate : Date ?
81
+ var basalDeliveryRateDateString : String ? {
82
+ guard let basalDeliveryRateDate else { return nil }
83
+ return Self . shortTimeFormatter. string ( from: basalDeliveryRateDate)
84
+ }
85
+
86
+ @Published private( set) var basalDisplayState : BasalDisplayState
87
+ var basalDisplayStateString : String {
88
+ switch basalDisplayState {
89
+ case . basalScheduled:
90
+ return LocalizedString ( " Scheduled \n basal " , comment: " Label for scheduled basal " )
91
+ case . basalTempAutoAbove:
92
+ return LocalizedString ( " More than \n scheduled " , comment: " Label for when temp basal is above the scheduled basal " )
93
+ default :
94
+ return LocalizedString ( " Less than \n scheduled " , comment: " Label for when temp basal is below the scheduled basal " )
95
+ }
96
+ }
78
97
79
98
@Published private( set) var presentDeliveryWarning : Bool ?
80
99
@@ -99,9 +118,12 @@ class MockPumpManagerSettingsViewModel: ObservableObject {
99
118
init ( pumpManager: MockPumpManager ) {
100
119
self . pumpManager = pumpManager
101
120
121
+ let now = Date ( )
102
122
isDeliverySuspended = pumpManager. status. basalDeliveryState? . isSuspended == true
103
123
basalDeliveryState = pumpManager. status. basalDeliveryState
104
- basalDeliveryRate = pumpManager. state. basalDeliveryRate ( at: Date ( ) )
124
+ basalDeliveryRate = pumpManager. state. basalDeliveryRate ( at: now)
125
+ basalDeliveryRateDate = now
126
+ basalDisplayState = pumpManager. state. basalDisplayState ( at: now) ?? . basalScheduled
105
127
setSuspenededAtString ( )
106
128
107
129
pumpManager. addStateObserver ( self , queue: . main)
@@ -148,8 +170,11 @@ class MockPumpManagerSettingsViewModel: ObservableObject {
148
170
extension MockPumpManagerSettingsViewModel : MockPumpManagerStateObserver {
149
171
func mockPumpManager( _ manager: MockKit . MockPumpManager , didUpdate state: MockKit . MockPumpManagerState ) {
150
172
guard !transitioningSuspendResumeInsulinDelivery else { return }
151
- basalDeliveryRate = state. basalDeliveryRate ( at: Date ( ) )
173
+ let now = Date ( )
174
+ basalDeliveryRateDate = now
175
+ basalDeliveryRate = state. basalDeliveryRate ( at: now)
152
176
basalDeliveryState = manager. status. basalDeliveryState
177
+ basalDisplayState = state. basalDisplayState ( at: now) ?? basalDisplayState
153
178
}
154
179
155
180
func mockPumpManager( _ manager: MockKit . MockPumpManager , didUpdate status: LoopKit . PumpManagerStatus , oldStatus: LoopKit . PumpManagerStatus ) {
@@ -172,4 +197,35 @@ extension MockPumpManagerState {
172
197
return nil
173
198
}
174
199
}
200
+
201
+ func basalDisplayState( at now: Date ) -> BasalDisplayState ? {
202
+ guard let scheduledBasalRate = basalRateSchedule? . value ( at: now) ,
203
+ let currentBasalRate = basalDeliveryRate ( at: now)
204
+ else {
205
+ return nil
206
+ }
207
+
208
+ if currentBasalRate == scheduledBasalRate {
209
+ return . basalScheduled
210
+ } else if currentBasalRate == 0 {
211
+ return . basalTempAutoNoDelivery
212
+ } else if currentBasalRate < scheduledBasalRate {
213
+ return . basalTempAutoBelow
214
+ } else {
215
+ return . basalTempAutoAbove
216
+ }
217
+ }
218
+
219
+ func basalDeliveryStartDate( at now: Date ) -> Date ? {
220
+ switch suspendState {
221
+ case . resumed:
222
+ if let tempBasal = unfinalizedTempBasal, !tempBasal. isFinished ( at: now) {
223
+ return tempBasal. startTime
224
+ } else {
225
+ return basalRateSchedule? . startDate ( at: now)
226
+ }
227
+ case . suspended:
228
+ return nil
229
+ }
230
+ }
175
231
}
0 commit comments