DynamicRootView.swift 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import SwiftUI
  2. import Swinject
  3. extension Dynamic {
  4. struct RootView: BaseView {
  5. let resolver: Resolver
  6. @StateObject var state = StateModel()
  7. private var conversionFormatter: NumberFormatter {
  8. let formatter = NumberFormatter()
  9. formatter.numberStyle = .decimal
  10. formatter.maximumFractionDigits = 1
  11. return formatter
  12. }
  13. private var formatter: NumberFormatter {
  14. let formatter = NumberFormatter()
  15. formatter.numberStyle = .decimal
  16. return formatter
  17. }
  18. private var glucoseFormatter: NumberFormatter {
  19. let formatter = NumberFormatter()
  20. formatter.numberStyle = .decimal
  21. if state.unit == .mmolL {
  22. formatter.maximumFractionDigits = 1
  23. } else { formatter.maximumFractionDigits = 0 }
  24. formatter.roundingMode = .halfUp
  25. return formatter
  26. }
  27. var body: some View {
  28. Form {
  29. Section {
  30. HStack {
  31. Toggle("Activate Dynamic Sensitivity (ISF)", isOn: $state.useNewFormula)
  32. }
  33. if state.useNewFormula {
  34. HStack {
  35. Toggle("Activate Dynamic Carb Ratio (CR)", isOn: $state.enableDynamicCR)
  36. }
  37. }
  38. } header: { Text("Enable") }
  39. if state.useNewFormula {
  40. Section {
  41. HStack {
  42. Toggle("Use Sigmoid Formula", isOn: $state.sigmoid)
  43. }
  44. } header: { Text("Formula") }
  45. Section {
  46. HStack {
  47. Text("Adjustment Factor")
  48. Spacer()
  49. DecimalTextField("0", value: $state.adjustmentFactor, formatter: formatter)
  50. }
  51. HStack {
  52. Text("Weighted Average of TDD. Weight of past 24 hours:")
  53. Spacer()
  54. DecimalTextField("0", value: $state.weightPercentage, formatter: formatter)
  55. }
  56. HStack {
  57. Toggle("Adjust basal", isOn: $state.tddAdjBasal)
  58. }
  59. } header: { Text("Settings") }
  60. Section {
  61. HStack {
  62. Text("Threshold Setting")
  63. Spacer()
  64. DecimalTextField("0", value: $state.threshold_setting, formatter: glucoseFormatter)
  65. Text(state.unit.rawValue)
  66. }
  67. } header: { Text("Safety") }
  68. }
  69. }
  70. .onAppear(perform: configureView)
  71. .navigationBarTitle("Dynamic ISF")
  72. .navigationBarTitleDisplayMode(.automatic)
  73. .onDisappear {
  74. state.saveIfChanged()
  75. }
  76. }
  77. }
  78. }