PumpSetupView.swift 4.9 KB

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