CGMSetupView.swift 3.6 KB

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