diff --git a/AirCasting/SessionViews/SessionHeaderView.swift b/AirCasting/SessionViews/SessionHeaderView.swift index 4f84b539..a0e894b9 100644 --- a/AirCasting/SessionViews/SessionHeaderView.swift +++ b/AirCasting/SessionViews/SessionHeaderView.swift @@ -23,7 +23,6 @@ struct SessionHeaderView: View { @Environment(\.colorScheme) var colorScheme @ObservedObject var session: SessionEntity @State private var showingNoConnectionAlert = false - @State private var alert: AlertInfo? @InjectedObject private var featureFlagsViewModel: FeatureFlagsViewModel @State var showDeleteModal = false @State var showAddNoteModal = false @@ -31,6 +30,8 @@ struct SessionHeaderView: View { @State var showEditView = false @State var detectEmailSent = false @State var showThresholdAlertModal = false + @State private var isShowingFinishSessionAlert = false + @State private var isShowingEmailSentAlert = false var body: some View { if #available(iOS 15, *) { @@ -50,7 +51,7 @@ struct SessionHeaderView: View { } })).onDisappear(perform: { if detectEmailSent { - alert = InAppAlerts.shareFileRequestSent() + isShowingEmailSentAlert = true } }) } @@ -81,7 +82,7 @@ struct SessionHeaderView: View { ShareSessionView(viewModel: DefaultShareSessionViewModel(session: session, apiClient: ShareSessionApi(), exitRoute: { result in showShareModal.toggle() if result == .fileShared { - alert = InAppAlerts.shareFileRequestSent() + isShowingEmailSentAlert = true } })) } @@ -132,7 +133,14 @@ private extension SessionHeaderView { } nameLabelAndExpandButton } - .alert(item: $alert, content: { $0.makeAlert() }) + .alert( + InAppAlerts.finishSessionAlert( + sessionName: session.name, + action: { self.finishSessionAlertAction() } + ), + $isShowingFinishSessionAlert + ) + .alert(InAppAlerts.shareFileRequestSent(), $isShowingEmailSentAlert) .foregroundColor(.aircastingGray) } @@ -193,9 +201,7 @@ private extension SessionHeaderView { var actionsMenuStopButton: some View { Button { - alert = InAppAlerts.finishSessionAlert(sessionName: session.name, action: { - self.finishSessionAlertAction() - }) + isShowingFinishSessionAlert = true } label: { Label(Strings.SessionHeaderView.stopRecordingButton, systemImage: "stop.circle") } diff --git a/AirCasting/Utils/InAppAlerts.swift b/AirCasting/Utils/InAppAlerts.swift index 2961cb03..9869a5c1 100644 --- a/AirCasting/Utils/InAppAlerts.swift +++ b/AirCasting/Utils/InAppAlerts.swift @@ -474,3 +474,19 @@ extension AlertInfo { } } } + +extension View { + nonisolated func alert(_ alertInfo: AlertInfo, _ isPresented: Binding) -> some View { + self.alert(alertInfo.title, isPresented: isPresented) { + ForEach(Array(alertInfo.buttons.enumerated()), id: \.offset) { index, type in + switch type { + case .cancel(let title): Button(title, role: .cancel, action: { isPresented.wrappedValue = false }) + case .default(let title, nil): Button(title, action: { isPresented.wrappedValue = false }) + case .default(let title, let action): Button(title, action: action!) + } + } + } message: { + Text(alertInfo.message) + } + } +}