PumpSetupView.swift 4.2 KB

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