CGMSetupView.swift 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 displayGlucosePreference: DisplayGlucosePreference
  22. switch unit {
  23. case .mgdL:
  24. displayGlucosePreference = DisplayGlucosePreference(displayGlucoseUnit: .milligramsPerDeciliter)
  25. case .mmolL:
  26. displayGlucosePreference = DisplayGlucosePreference(displayGlucoseUnit: .millimolesPerLiter)
  27. }
  28. switch CGMType {
  29. case .dexcomG5:
  30. setupViewController = G5CGMManager.setupViewController(
  31. bluetoothProvider: bluetoothManager,
  32. displayGlucosePreference: displayGlucosePreference,
  33. colorPalette: .default,
  34. allowDebugFeatures: false
  35. )
  36. case .dexcomG6:
  37. setupViewController = G6CGMManager.setupViewController(
  38. bluetoothProvider: bluetoothManager,
  39. displayGlucosePreference: displayGlucosePreference,
  40. colorPalette: .default,
  41. allowDebugFeatures: false
  42. )
  43. case .dexcomG7:
  44. setupViewController =
  45. G7CGMManager.setupViewController(
  46. bluetoothProvider: bluetoothManager,
  47. displayGlucosePreference: displayGlucosePreference,
  48. colorPalette: .default,
  49. allowDebugFeatures: false,
  50. prefersToSkipUserInteraction: false
  51. )
  52. default:
  53. break
  54. }
  55. switch setupViewController {
  56. case var .userInteractionRequired(setupViewControllerUI):
  57. setupViewControllerUI.cgmManagerOnboardingDelegate = setupDelegate
  58. setupViewControllerUI.completionDelegate = completionDelegate
  59. return setupViewControllerUI
  60. case let .createdAndOnboarded(cgmManagerUI):
  61. debug(.default, "CGM manager created and onboarded")
  62. setupDelegate?.cgmManagerOnboarding(didCreateCGMManager: cgmManagerUI)
  63. return UIViewController()
  64. case .none:
  65. return UIViewController()
  66. }
  67. }
  68. func updateUIViewController(
  69. _ uiViewController: UIViewController,
  70. context _: UIViewControllerRepresentableContext<CGMSetupView>
  71. ) {
  72. uiViewController.isModalInPresentation = true
  73. }
  74. }
  75. }