PumpSetupView.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import DanaKit
  2. import LoopKit
  3. import LoopKitUI
  4. import MedtrumKit
  5. import MinimedKit
  6. import MinimedKitUI
  7. import MockKit
  8. import MockKitUI
  9. import OmniBLE
  10. import OmniKit
  11. import OmniKitUI
  12. import OmnipodKit
  13. import SwiftUI
  14. import UIKit
  15. extension PumpConfig {
  16. struct PumpSetupView: UIViewControllerRepresentable {
  17. let pumpType: PumpType
  18. let pumpInitialSettings: PumpInitialSettings
  19. let bluetoothManager: BluetoothStateManager
  20. weak var completionDelegate: CompletionDelegate?
  21. weak var setupDelegate: PumpManagerOnboardingDelegate?
  22. func makeUIViewController(context _: UIViewControllerRepresentableContext<PumpSetupView>) -> UIViewController {
  23. // var setupViewController: PumpManagerSetupViewController & UIViewController & CompletionNotifying
  24. var setupViewController: SetupUIResult<
  25. PumpManagerViewController,
  26. PumpManagerUI
  27. >
  28. let initialSettings = PumpManagerSetupSettings(
  29. maxBasalRateUnitsPerHour: pumpInitialSettings.maxBasalRateUnitsPerHour,
  30. maxBolusUnits: pumpInitialSettings.maxBolusUnits,
  31. basalSchedule: pumpInitialSettings.basalSchedule
  32. )
  33. switch pumpType {
  34. case .minimed:
  35. setupViewController = MinimedPumpManager.setupViewController(
  36. initialSettings: initialSettings,
  37. bluetoothProvider: bluetoothManager,
  38. colorPalette: .default,
  39. allowDebugFeatures: true,
  40. prefersToSkipUserInteraction: false,
  41. allowedInsulinTypes: [.apidra, .humalog, .novolog, .fiasp, .lyumjev]
  42. )
  43. case .omnipod:
  44. setupViewController = OmnipodPumpManager.setupViewController(
  45. initialSettings: initialSettings,
  46. bluetoothProvider: bluetoothManager,
  47. colorPalette: .default,
  48. allowDebugFeatures: true,
  49. prefersToSkipUserInteraction: false,
  50. allowedInsulinTypes: [.apidra, .humalog, .novolog, .fiasp, .lyumjev]
  51. )
  52. case .omnipodBLE:
  53. setupViewController = OmniBLEPumpManager.setupViewController(
  54. initialSettings: initialSettings,
  55. bluetoothProvider: bluetoothManager,
  56. colorPalette: .default,
  57. allowDebugFeatures: true,
  58. allowedInsulinTypes: [.apidra, .humalog, .novolog, .fiasp, .lyumjev]
  59. )
  60. case .omni:
  61. setupViewController = OmniPumpManager.setupViewController(
  62. initialSettings: initialSettings,
  63. bluetoothProvider: bluetoothManager,
  64. colorPalette: .default,
  65. allowDebugFeatures: true,
  66. prefersToSkipUserInteraction: false,
  67. allowedInsulinTypes: [.apidra, .humalog, .novolog, .fiasp, .lyumjev]
  68. )
  69. case .dana:
  70. setupViewController = DanaKitPumpManager.setupViewController(
  71. initialSettings: initialSettings,
  72. bluetoothProvider: bluetoothManager,
  73. colorPalette: .default,
  74. allowDebugFeatures: true,
  75. prefersToSkipUserInteraction: false,
  76. allowedInsulinTypes: [.apidra, .humalog, .novolog, .fiasp, .lyumjev]
  77. )
  78. case .medtrum:
  79. setupViewController = MedtrumPumpManager.setupViewController(
  80. initialSettings: initialSettings,
  81. bluetoothProvider: bluetoothManager,
  82. colorPalette: .default,
  83. allowDebugFeatures: true,
  84. prefersToSkipUserInteraction: false,
  85. allowedInsulinTypes: [.apidra, .humalog, .novolog, .fiasp, .lyumjev]
  86. )
  87. case .simulator:
  88. setupViewController = MockPumpManager.setupViewController(
  89. initialSettings: initialSettings,
  90. bluetoothProvider: bluetoothManager,
  91. colorPalette: .default,
  92. allowDebugFeatures: true,
  93. prefersToSkipUserInteraction: false,
  94. allowedInsulinTypes: [.apidra, .humalog, .novolog, .fiasp, .lyumjev]
  95. )
  96. }
  97. switch setupViewController {
  98. case var .userInteractionRequired(setupViewControllerUI):
  99. setupViewControllerUI.pumpManagerOnboardingDelegate = setupDelegate
  100. setupViewControllerUI.completionDelegate = completionDelegate
  101. return setupViewControllerUI
  102. case let .createdAndOnboarded(pumpManagerUI):
  103. debug(.default, "Pump manager created and onboarded")
  104. setupDelegate?.pumpManagerOnboarding(didCreatePumpManager: pumpManagerUI)
  105. var vc = pumpManagerUI.settingsViewController(
  106. bluetoothProvider: bluetoothManager,
  107. pumpManagerOnboardingDelegate: setupDelegate
  108. )
  109. vc.completionDelegate = completionDelegate
  110. return vc
  111. }
  112. }
  113. func updateUIViewController(_: UIViewController, context _: UIViewControllerRepresentableContext<PumpSetupView>) {}
  114. }
  115. }