AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Reducer/AppStateReducer.swift (88 lines of code) (raw):

// // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // import Combine extension Reducer { static func appStateReducer( permissionsReducer: Reducer<PermissionState, PermissionAction> = .livePermissionsReducer, localUserReducer: Reducer<LocalUserState, LocalUserAction> = .liveLocalUserReducer, lifeCycleReducer: Reducer<LifeCycleState, LifecycleAction> = .liveLifecycleReducer, audioSessionReducer: Reducer<AudioSessionState, AudioSessionAction> = .liveAudioSessionReducer, callingReducer: Reducer<CallingState, Action> = .liveCallingReducer, navigationReducer: Reducer<NavigationState, Action> = .liveNavigationReducer, remoteParticipantsReducer: Reducer<RemoteParticipantsState, Action> = .liveRemoteParticipantsReducer, errorReducer: Reducer<ErrorState, Action> = .liveErrorReducer, visibilityReducer: Reducer<VisibilityState, VisibilityAction> = .visibilityReducer, diagnosticsReducer: Reducer<CallDiagnosticsState, Action> = .liveDiagnosticsReducer, captionsReducer: Reducer<CaptionsState, CaptionsAction> = .captionsReducer, toastNotificationReducer: Reducer<ToastNotificationState, ToastNotificationAction> = .toastNotificationReducer, callScreenInfoHeaderReducer: Reducer<CallScreenInfoHeaderState, CallScreenInfoHeaderAction> = .callScreenInfoHeaderReducer, buttonViewDataReducer: Reducer<ButtonViewDataState, ButtonViewDataAction> = .buttonViewDataReducer, rttReducer: Reducer<RttState, RttAction> = .rttReducer ) -> Reducer<AppState, Action> { return Reducer<AppState, Action> { state, action in var permissionState = state.permissionState var localUserState = state.localUserState var lifeCycleState = state.lifeCycleState var callingState = state.callingState var remoteParticipantState = state.remoteParticipantsState var navigationState = state.navigationState var errorState = state.errorState var audioSessionState = state.audioSessionState var diagnosticsState = state.diagnosticsState let defaultUserState = state.defaultUserState var visibilityState = state.visibilityState var captionsState = state.captionsState var toastNotificationState = state.toastNotificationState var callScreenInfoHeaderState = state.callScreenInfoHeaderState var buttonViewDataState = state.buttonViewDataState var rttState = state.rttState switch action { case let .permissionAction(permAction): permissionState = permissionsReducer.reduce(state.permissionState, permAction) case let .localUserAction(localUserAction): localUserState = localUserReducer.reduce(state.localUserState, localUserAction) case let .lifecycleAction(lifecycleAction): lifeCycleState = lifeCycleReducer.reduce(state.lifeCycleState, lifecycleAction) case let .visibilityAction(visibilityAction): visibilityState = visibilityReducer.reduce(state.visibilityState, visibilityAction) case let .captionsAction(captionsAction): captionsState = captionsReducer.reduce(state.captionsState, captionsAction) case let .toastNotificationAction(action): toastNotificationState = toastNotificationReducer.reduce(state.toastNotificationState, action) case let .callScreenInfoHeaderAction(action): callScreenInfoHeaderState = callScreenInfoHeaderReducer.reduce(state.callScreenInfoHeaderState, action) case let .buttonViewDataAction(action): buttonViewDataState = buttonViewDataReducer.reduce(state.buttonViewDataState, action) case let .rttAction(action): rttState = rttReducer.reduce(state.rttState, action) default: break } callingState = callingReducer.reduce(state.callingState, action) navigationState = navigationReducer.reduce(state.navigationState, action) errorState = errorReducer.reduce(state.errorState, action) remoteParticipantState = remoteParticipantsReducer.reduce(state.remoteParticipantsState, action) diagnosticsState = diagnosticsReducer.reduce(state.diagnosticsState, action) if case let .audioSessionAction(audioAction) = action { audioSessionState = audioSessionReducer.reduce(state.audioSessionState, audioAction) } return AppState(callingState: callingState, permissionState: permissionState, localUserState: localUserState, lifeCycleState: lifeCycleState, audioSessionState: audioSessionState, navigationState: navigationState, remoteParticipantsState: remoteParticipantState, errorState: errorState, defaultUserState: defaultUserState, visibilityState: visibilityState, diagnosticsState: diagnosticsState, captionsState: captionsState, toastNotificationState: toastNotificationState, callScreenInfoHeaderState: callScreenInfoHeaderState, buttonViewDataState: buttonViewDataState, rttState: rttState ) } } }