AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Reducer/CallingReducer.swift (94 lines of code) (raw):
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
import Combine
import Foundation
extension Reducer where State == CallingState,
Actions == Action {
static var liveCallingReducer: Self = Reducer { callingState, action in
var callingStatus = callingState.status
var operationStatus = callingState.operationStatus
var callIdValue = callingState.callId
var isRecordingActive = callingState.isRecordingActive
var isTranscriptionActive = callingState.isTranscriptionActive
var recordingStatus = callingState.recordingStatus
var transcriptionStatus = callingState.transcriptionStatus
var isRecorcingTranscriptionBannedDismissed = callingState.isRecorcingTranscriptionBannedDismissed
var callStartDate = callingState.callStartDate
var callEndReasonCode: Int?
var callEndReasonSubCode: Int?
/* <CALL_START_TIME>
var callStartTime: Date?
</CALL_START_TIME> */
switch action {
case .callingAction(.stateUpdated(let status, let code, let subCode)):
callingStatus = status
callEndReasonCode = code
callEndReasonSubCode = subCode
case .callingAction(.callIdUpdated(let callId)):
callIdValue = callId
case .callingAction(.recordingStateUpdated(let newValue)):
isRecordingActive = newValue
isRecorcingTranscriptionBannedDismissed = false
case .callingAction(.transcriptionStateUpdated(let newValue)):
isTranscriptionActive = newValue
isRecorcingTranscriptionBannedDismissed = false
case .callingAction(.callEndRequested):
operationStatus = .callEndRequested
case .callingAction(.callEnded):
operationStatus = .callEnded
case .callingAction(.requestFailed):
operationStatus = .none
case .errorAction(.statusErrorAndCallReset):
callingStatus = .none
operationStatus = operationStatus == .skipSetupRequested ? .skipSetupRequested : .none
isRecordingActive = false
isTranscriptionActive = false
case .callingAction(.callStartRequested):
callStartDate = Date()
case .callingAction(.recordingUpdated(let status)):
recordingStatus = status
case .callingAction(.transcriptionUpdated(let status)):
transcriptionStatus = status
case .callingAction(.dismissRecordingTranscriptionBannedUpdated(let isDismissed)):
isRecorcingTranscriptionBannedDismissed = isDismissed
/* <CALL_START_TIME>
case .callingAction(.callStartTimeUpdated(let startTime)):
callStartTime = startTime
</CALL_START_TIME> */
// Exhaustive un-implemented actions
case .audioSessionAction,
.callingAction(.setupCall),
.callingAction(.resumeRequested),
.callingAction(.holdRequested),
.errorAction(.fatalErrorUpdated),
.lifecycleAction,
.localUserAction,
.permissionAction,
.remoteParticipantsAction,
.callDiagnosticAction,
.compositeExitAction,
.callingViewLaunched,
.showSupportForm,
.showCaptionsRttListView,
.showSpokenLanguageView,
.showCaptionsLanguageView,
.captionsAction,
.rttAction,
.showEndCallConfirmation,
.showMoreOptions,
.showAudioSelection,
.showSupportShare,
.visibilityAction,
.showParticipants,
.showParticipantActions,
.hideDrawer,
.toastNotificationAction,
.callScreenInfoHeaderAction,
.setTotalParticipantCount,
.buttonViewDataAction:
return callingState
}
return CallingState(status: callingStatus,
operationStatus: operationStatus,
callId: callIdValue,
isRecordingActive: isRecordingActive,
isTranscriptionActive: isTranscriptionActive,
callStartDate: callStartDate,
callEndReasonCode: callEndReasonCode,
callEndReasonSubCode: callEndReasonSubCode,
recordingStatus: recordingStatus,
transcriptionStatus: transcriptionStatus,
isRecorcingTranscriptionBannedDismissed: isRecorcingTranscriptionBannedDismissed
/* <CALL_START_TIME>
,
callStartTime: callStartTime
</CALL_START_TIME> */
)
}
}