CarbsView.swift 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import SwiftUI
  2. struct CarbsView: View {
  3. @EnvironmentObject var state: WatchStateModel
  4. @State var amount = 0.0
  5. var numberFormatter: NumberFormatter {
  6. let formatter = NumberFormatter()
  7. formatter.numberStyle = .decimal
  8. formatter.minimum = 0
  9. formatter.maximum = (state.maxCOB ?? 120) as NSNumber
  10. formatter.maximumFractionDigits = 0
  11. formatter.allowsFloats = false
  12. return formatter
  13. }
  14. var body: some View {
  15. GeometryReader { geo in
  16. VStack(spacing: 16) {
  17. HStack {
  18. <<<<<<< HEAD
  19. Image("carbs", bundle: nil)
  20. .renderingMode(.template)
  21. .resizable()
  22. .frame(width: 24, height: 24)
  23. .foregroundColor(.loopGreen)
  24. Text("Add Carbs ")
  25. =======
  26. Button {
  27. WKInterfaceDevice.current().play(.click)
  28. let newValue = amount - 5
  29. amount = max(newValue, 0)
  30. } label: {
  31. Image(systemName: "minus")
  32. }
  33. .frame(width: geo.size.width / 4)
  34. Spacer()
  35. Text(numberFormatter.string(from: amount as NSNumber)! + " g")
  36. .font(.title2)
  37. .focusable(true)
  38. .digitalCrownRotation(
  39. $amount,
  40. from: 0,
  41. through: Double(state.maxCOB ?? 120),
  42. by: 1,
  43. sensitivity: .medium,
  44. isContinuous: false,
  45. isHapticFeedbackEnabled: true
  46. )
  47. Spacer()
  48. Button {
  49. WKInterfaceDevice.current().play(.click)
  50. let newValue = amount + 5
  51. amount = min(newValue, Double(state.maxCOB ?? 120))
  52. } label: { Image(systemName: "plus") }
  53. .frame(width: geo.size.width / 4)
  54. }
  55. Button {
  56. WKInterfaceDevice.current().play(.click)
  57. state.addCarbs(Int(amount))
  58. }
  59. label: {
  60. HStack {
  61. Image("carbs", bundle: nil)
  62. .renderingMode(.template)
  63. .resizable()
  64. .frame(width: 24, height: 24)
  65. .foregroundColor(.loopGreen)
  66. Text("Add Carbs ")
  67. }
  68. >>>>>>> 1e5c754... 38mm watch support and fixed bolus rounding
  69. }
  70. .disabled(amount <= 0)
  71. }.frame(maxHeight: .infinity)
  72. }
  73. .navigationTitle("Add Carbs ")
  74. .onAppear {
  75. amount = Double(state.carbsRequired ?? 0)
  76. }
  77. }
  78. }
  79. struct CarbsView_Previews: PreviewProvider {
  80. static var previews: some View {
  81. let state = WatchStateModel()
  82. state.carbsRequired = 120
  83. return Group {
  84. CarbsView()
  85. CarbsView().previewDevice("Apple Watch Series 5 - 40mm")
  86. CarbsView().previewDevice("Apple Watch Series 3 - 38mm")
  87. }
  88. .environmentObject(state)
  89. }
  90. }