CGMSetupView.swift 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import CGMBLEKit
  2. import CGMBLEKitUI
  3. import G7SensorKit
  4. import G7SensorKitUI
  5. import LoopKit
  6. import LoopKitUI
  7. import SwiftUI
  8. import UIKit
  9. extension CGM {
  10. struct CGMSetupView: UIViewControllerRepresentable {
  11. let CGMType: CGMType
  12. let bluetoothManager: BluetoothStateManager
  13. let unit: GlucoseUnits
  14. weak var completionDelegate: CompletionDelegate?
  15. weak var setupDelegate: CGMManagerOnboardingDelegate?
  16. func makeUIViewController(context _: UIViewControllerRepresentableContext<CGMSetupView>) -> UIViewController {
  17. var setupViewController: SetupUIResult<
  18. CGMManagerViewController,
  19. CGMManagerUI
  20. >?
  21. let displayGlucoseUnitObservable: DisplayGlucoseUnitObservable
  22. switch unit {
  23. case .mgdL:
  24. displayGlucoseUnitObservable = DisplayGlucoseUnitObservable(displayGlucoseUnit: .milligramsPerDeciliter)
  25. case .mmolL:
  26. displayGlucoseUnitObservable = DisplayGlucoseUnitObservable(displayGlucoseUnit: .millimolesPerLiter)
  27. }
  28. switch CGMType {
  29. case .dexcomG5:
  30. setupViewController = G5CGMManager.setupViewController(
  31. bluetoothProvider: bluetoothManager,
  32. displayGlucoseUnitObservable: displayGlucoseUnitObservable,
  33. colorPalette: .default,
  34. allowDebugFeatures: false
  35. )
  36. case .dexcomG6:
  37. setupViewController = G6CGMManager.setupViewController(
  38. bluetoothProvider: bluetoothManager,
  39. displayGlucoseUnitObservable: displayGlucoseUnitObservable,
  40. colorPalette: .default,
  41. allowDebugFeatures: false
  42. )
  43. case .dexcomG7:
  44. setupViewController =
  45. G7CGMManager.setupViewController(
  46. bluetoothProvider: bluetoothManager,
  47. displayGlucoseUnitObservable: displayGlucoseUnitObservable,
  48. colorPalette: .default,
  49. allowDebugFeatures: false
  50. )
  51. default:
  52. break
  53. }
  54. switch setupViewController {
  55. case var .userInteractionRequired(setupViewControllerUI):
  56. setupViewControllerUI.cgmManagerOnboardingDelegate = setupDelegate
  57. setupViewControllerUI.completionDelegate = completionDelegate
  58. return setupViewControllerUI
  59. case let .createdAndOnboarded(cgmManagerUI):
  60. debug(.default, "CGM manager created and onboarded")
  61. setupDelegate?.cgmManagerOnboarding(didCreateCGMManager: cgmManagerUI)
  62. return UIViewController()
  63. case .none:
  64. return UIViewController()
  65. }
  66. }
  67. func updateUIViewController(
  68. _ uiViewController: UIViewController,
  69. context _: UIViewControllerRepresentableContext<CGMSetupView>
  70. ) {
  71. uiViewController.isModalInPresentation = true
  72. }
  73. }
  74. }