CGMSetupView.swift 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import LoopKit
  2. import LoopKitUI
  3. import SwiftUI
  4. import UIKit
  5. extension CGM {
  6. struct CGMSetupView: UIViewControllerRepresentable {
  7. let CGMType: cgmName
  8. let bluetoothManager: BluetoothStateManager
  9. let unit: GlucoseUnits
  10. weak var completionDelegate: CompletionDelegate?
  11. weak var setupDelegate: CGMManagerOnboardingDelegate?
  12. let pluginCGMManager: PluginManager
  13. func makeUIViewController(context _: UIViewControllerRepresentableContext<CGMSetupView>) -> UIViewController {
  14. var setupViewController: SetupUIResult<
  15. CGMManagerViewController,
  16. CGMManagerUI
  17. >?
  18. let displayGlucosePreference: DisplayGlucosePreference
  19. switch unit {
  20. case .mgdL:
  21. displayGlucosePreference = DisplayGlucosePreference(displayGlucoseUnit: .milligramsPerDeciliter)
  22. case .mmolL:
  23. displayGlucosePreference = DisplayGlucosePreference(displayGlucoseUnit: .millimolesPerLiter)
  24. }
  25. switch CGMType.type {
  26. case .plugin:
  27. if let cgmManagerUIType = pluginCGMManager.getCGMManagerTypeByIdentifier(CGMType.id) {
  28. setupViewController = cgmManagerUIType.setupViewController(
  29. bluetoothProvider: bluetoothManager,
  30. displayGlucosePreference: displayGlucosePreference,
  31. colorPalette: .default,
  32. allowDebugFeatures: false,
  33. prefersToSkipUserInteraction: false
  34. )
  35. } else {
  36. break
  37. }
  38. default:
  39. break
  40. }
  41. switch setupViewController {
  42. case var .userInteractionRequired(setupViewControllerUI):
  43. setupViewControllerUI.cgmManagerOnboardingDelegate = setupDelegate
  44. setupViewControllerUI.completionDelegate = completionDelegate
  45. return setupViewControllerUI
  46. case let .createdAndOnboarded(cgmManagerUI):
  47. debug(.default, "CGM manager created and onboarded")
  48. setupDelegate?.cgmManagerOnboarding(didCreateCGMManager: cgmManagerUI)
  49. return UIViewController()
  50. case .none:
  51. return UIViewController()
  52. }
  53. }
  54. func updateUIViewController(
  55. _ uiViewController: UIViewController,
  56. context _: UIViewControllerRepresentableContext<CGMSetupView>
  57. ) {
  58. uiViewController.isModalInPresentation = true
  59. }
  60. }
  61. }