forked from LoopKit/LoopKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCorrectionRangeOverridesEditorViewModel.swift
More file actions
75 lines (59 loc) · 2.66 KB
/
CorrectionRangeOverridesEditorViewModel.swift
File metadata and controls
75 lines (59 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//
// CorrectionRangeOverridesEditorViewModel.swift
// LoopKitUI
//
// Created by Nathaniel Hamming on 2021-03-15.
// Copyright © 2021 LoopKit Authors. All rights reserved.
//
import Foundation
import LoopAlgorithm
import LoopKit
struct CorrectionRangeOverridesEditorViewModel {
let correctionRangeOverrides: CorrectionRangeOverrides
let suspendThreshold: GlucoseThreshold?
let correctionRangeScheduleRange: ClosedRange<LoopQuantity>
let preset: CorrectionRangeOverrides.Preset
let guardrail: Guardrail<LoopQuantity>
var saveCorrectionRangeOverride: (_ correctionRangeOverrides: CorrectionRangeOverrides) -> Void
private var duration: TimeInterval? = TimeInterval(hours: 1)
var overallInsulinPercentage: Double = 1 // This should always be 1
var durationString: String? {
guard let duration else {
return nil
}
return unitFormatter.string(from: duration)
}
var insulinPercentageString: String {
return "\(String(format: "%.0f", 100 * overallInsulinPercentage))% \(LocalizedString("of scheduled", comment: ""))"
}
var correctionRangeString: String? {
correctionRangeOverrides.workout?.localizedDescription(unit: .milligramsPerDeciliter)
}
private let unitFormatter: DateComponentsFormatter = {
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.hour, .minute, .second]
formatter.unitsStyle = .short
return formatter
}()
public init(therapySettingsViewModel: TherapySettingsViewModel,
preset: CorrectionRangeOverrides.Preset,
didSave: (() -> Void)? = nil)
{
self.correctionRangeOverrides = therapySettingsViewModel.correctionRangeOverrides
self.suspendThreshold = therapySettingsViewModel.suspendThreshold
self.correctionRangeScheduleRange = therapySettingsViewModel.correctionRangeScheduleRange
self.guardrail = Guardrail.correctionRangeOverride(
for: preset,
correctionRangeScheduleRange: therapySettingsViewModel.correctionRangeScheduleRange,
suspendThreshold: therapySettingsViewModel.suspendThreshold)
self.preset = preset
self.saveCorrectionRangeOverride = { [weak therapySettingsViewModel] correctionRangeOverrides in
guard let therapySettingsViewModel = therapySettingsViewModel else {
return
}
therapySettingsViewModel.saveCorrectionRangeOverride(preset: preset,
correctionRangeOverrides: correctionRangeOverrides)
didSave?()
}
}
}