DynamicRootView.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. @Environment(\.colorScheme) var colorScheme
  14. var color: LinearGradient {
  15. colorScheme == .dark ? LinearGradient(
  16. gradient: Gradient(colors: [
  17. Color("Background_1"),
  18. Color("Background_1"),
  19. Color("Background_2")
  20. // Color("Background_1")
  21. ]),
  22. startPoint: .top,
  23. endPoint: .bottom
  24. )
  25. :
  26. LinearGradient(
  27. gradient: Gradient(colors: [Color.gray.opacity(0.1)]),
  28. startPoint: .top,
  29. endPoint: .bottom
  30. )
  31. }
  32. private var formatter: NumberFormatter {
  33. let formatter = NumberFormatter()
  34. formatter.numberStyle = .decimal
  35. return formatter
  36. }
  37. private var glucoseFormatter: NumberFormatter {
  38. let formatter = NumberFormatter()
  39. formatter.numberStyle = .decimal
  40. if state.unit == .mmolL {
  41. formatter.maximumFractionDigits = 1
  42. } else { formatter.maximumFractionDigits = 0 }
  43. formatter.roundingMode = .halfUp
  44. return formatter
  45. }
  46. var body: some View {
  47. Form {
  48. Section {
  49. HStack {
  50. Toggle("Activate Dynamic Sensitivity (ISF)", isOn: $state.useNewFormula)
  51. }
  52. if state.useNewFormula {
  53. HStack {
  54. Toggle("Activate Dynamic Carb Ratio (CR)", isOn: $state.enableDynamicCR)
  55. }
  56. }
  57. } header: { Text("Enable") }
  58. if state.useNewFormula {
  59. Section {
  60. HStack {
  61. Toggle("Use Sigmoid Formula", isOn: $state.sigmoid)
  62. }
  63. } header: { Text("Formula") }
  64. Section {
  65. HStack {
  66. Text("Adjustment Factor")
  67. Spacer()
  68. DecimalTextField("0", value: $state.adjustmentFactor, formatter: formatter)
  69. }
  70. HStack {
  71. Text("Weighted Average of TDD. Weight of past 24 hours:")
  72. Spacer()
  73. DecimalTextField("0", value: $state.weightPercentage, formatter: formatter)
  74. }
  75. HStack {
  76. Toggle("Adjust basal", isOn: $state.tddAdjBasal)
  77. }
  78. } header: { Text("Settings") }
  79. Section {
  80. HStack {
  81. Text("Threshold Setting")
  82. Spacer()
  83. DecimalTextField("0", value: $state.threshold_setting, formatter: glucoseFormatter)
  84. Text(state.unit.rawValue)
  85. }
  86. } header: { Text("Safety") }
  87. }
  88. }
  89. .scrollContentBackground(.hidden).background(color)
  90. .onAppear(perform: configureView)
  91. .navigationBarTitle("Dynamic ISF")
  92. .navigationBarTitleDisplayMode(.automatic)
  93. .onDisappear {
  94. state.saveIfChanged()
  95. }
  96. }
  97. }
  98. }