AcknowledgementPendingView.swift 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import SwiftUI
  2. struct AcknowledgementPendingView: View {
  3. @Binding var navigationPath: NavigationPath
  4. let state: WatchState
  5. @Binding var shouldNavigateToRoot: Bool
  6. var trioBackgroundColor = LinearGradient(
  7. gradient: Gradient(colors: [Color.bgDarkBlue, Color.bgDarkerDarkBlue]),
  8. startPoint: .top,
  9. endPoint: .bottom
  10. )
  11. var statusIcon: some View {
  12. switch state.acknowledgementStatus {
  13. case .pending:
  14. return Image(systemName: "progress.indicator").foregroundStyle(Color.secondary)
  15. case .success:
  16. return Image(systemName: "checkmark.circle").foregroundStyle(Color.loopGreen)
  17. case .failure:
  18. return Image(systemName: "xmark").foregroundStyle(Color.loopRed)
  19. }
  20. }
  21. var body: some View {
  22. Group {
  23. VStack {
  24. if state.isMealBolusCombo {
  25. ProgressView()
  26. Text(state.mealBolusStep.rawValue).multilineTextAlignment(.center)
  27. } else if state.showCommsAnimation {
  28. ProgressView()
  29. Text("Processing…")
  30. } else if state.showAcknowledgmentBanner {
  31. statusIcon.padding()
  32. Text(state.acknowledgmentMessage).multilineTextAlignment(.center)
  33. .foregroundStyle(state.acknowledgementStatus == .failure ? Color.loopRed : Color.primary)
  34. }
  35. }
  36. .padding()
  37. .frame(maxWidth: .infinity, maxHeight: .infinity)
  38. }
  39. .navigationBarBackButtonHidden(true)
  40. .toolbar(.hidden)
  41. .background(trioBackgroundColor)
  42. .onChange(of: state.showCommsAnimation) { oldValue, newValue in
  43. if newValue && !oldValue {
  44. DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
  45. // If after 5 seconds there is still no acknowledgement banner, return to root
  46. if !state.showAcknowledgmentBanner {
  47. // Navigate back to the root
  48. navigationPath.removeLast(navigationPath.count)
  49. }
  50. }
  51. }
  52. }
  53. .onChange(of: state.showAcknowledgmentBanner) { _, newValue in
  54. if !newValue {
  55. // Navigate back to the root when acknowledgment banner disappears
  56. navigationPath.removeLast(navigationPath.count)
  57. }
  58. }
  59. .onDisappear {
  60. state.shouldNavigateToRoot = true
  61. }
  62. }
  63. }