AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Reducer/ButtonViewDataReducer.swift (252 lines of code) (raw):
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
extension Reducer where State == ButtonViewDataState,
Actions == ButtonViewDataAction {
static var buttonViewDataReducer: Self = Reducer { state, action in
var setupScreenCameraButtonState = state.setupScreenCameraButtonState
var setupScreenMicButtonState = state.setupScreenMicButtonState
var setupScreenAudioDeviceButtonState = state.setupScreenAudioDeviceButtonState
var callScreenCameraButtonState = state.callScreenCameraButtonState
var callScreenMicButtonState = state.callScreenMicButtonState
var callScreenAudioDeviceButtonState = state.callScreenAudioDeviceButtonState
var liveCaptionsButton = state.liveCaptionsButton
var liveCaptionsToggleButton = state.liveCaptionsToggleButton
var spokenLanguageButton = state.spokenLanguageButton
var captionsLanguageButton = state.captionsLanguageButton
var shareDiagnosticsButton = state.shareDiagnosticsButton
var reportIssueButton = state.reportIssueButton
var callScreenCustomButtonsState = state.callScreenCustomButtonsState
var callScreenHeaderCustomButtonsState = state.callScreenHeaderCustomButtonsState
switch action {
case .setupScreenAudioDeviceButtonIsEnabledUpdated(let enabled):
guard let fromState = setupScreenAudioDeviceButtonState else {
return state
}
setupScreenAudioDeviceButtonState = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .setupScreenAudioDeviceButtonIsVisibleUpdated(let visible):
guard let fromState = setupScreenAudioDeviceButtonState else {
return state
}
setupScreenAudioDeviceButtonState = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .setupScreenMicButtonIsEnabledUpdated(let enabled):
guard let fromState = setupScreenMicButtonState else {
return state
}
setupScreenMicButtonState = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .setupScreenMicButtonIsVisibleUpdated(let visible):
guard let fromState = setupScreenMicButtonState else {
return state
}
setupScreenMicButtonState = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .setupScreenCameraButtonIsEnabledUpdated(let enabled):
guard let fromState = setupScreenCameraButtonState else {
return state
}
setupScreenCameraButtonState = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .setupScreenCameraButtonIsVisibleUpdated(let visible):
guard let fromState = setupScreenCameraButtonState else {
return state
}
setupScreenCameraButtonState = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenAudioDeviceButtonIsEnabledUpdated(let enabled):
guard let fromState = callScreenAudioDeviceButtonState else {
return state
}
callScreenAudioDeviceButtonState = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .callScreenAudioDeviceButtonIsVisibleUpdated(let visible):
guard let fromState = callScreenAudioDeviceButtonState else {
return state
}
callScreenAudioDeviceButtonState = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenMicButtonIsEnabledUpdated(let enabled):
guard let fromState = callScreenMicButtonState else {
return state
}
callScreenMicButtonState = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .callScreenMicButtonIsVisibleUpdated(let visible):
guard let fromState = callScreenMicButtonState else {
return state
}
callScreenMicButtonState = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenCameraButtonIsEnabledUpdated(let enabled):
guard let fromState = callScreenCameraButtonState else {
return state
}
callScreenCameraButtonState = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .callScreenCameraButtonIsVisibleUpdated(let visible):
guard let fromState = callScreenCameraButtonState else {
return state
}
callScreenCameraButtonState = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenReportIssueButtonIsEnabledUpdated(let enabled):
guard let fromState = reportIssueButton else {
return state
}
reportIssueButton = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .callScreenReportIssueButtonIsVisibleUpdated(let visible):
guard let fromState = reportIssueButton else {
return state
}
reportIssueButton = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenShareDiagnosticsButtonIsEnabledUpdated(let enabled):
guard let fromState = shareDiagnosticsButton else {
return state
}
shareDiagnosticsButton = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .callScreenShareDiagnosticsButtonIsVisibleUpdated(let visible):
guard let fromState = shareDiagnosticsButton else {
return state
}
shareDiagnosticsButton = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenLiveCaptionsButtonIsEnabledUpdated(let enabled):
guard let fromState = liveCaptionsButton else {
return state
}
liveCaptionsButton = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .callScreenLiveCaptionsButtonIsVisibleUpdated(let visible):
guard let fromState = liveCaptionsButton else {
return state
}
liveCaptionsButton = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenLiveCaptionsToggleButtonIsEnabledUpdated(let enabled):
guard let fromState = liveCaptionsToggleButton else {
return state
}
liveCaptionsToggleButton = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .callScreenLiveCaptionsToggleButtonIsVisibleUpdated(let visible):
guard let fromState = liveCaptionsToggleButton else {
return state
}
liveCaptionsToggleButton = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenSpokenLanguageButtonIsEnabledUpdated(let enabled):
guard let fromState = spokenLanguageButton else {
return state
}
spokenLanguageButton = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .callScreenSpokenLanguageButtonIsVisibleUpdated(let visible):
guard let fromState = spokenLanguageButton else {
return state
}
spokenLanguageButton = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenCaptionsLanguageButtonIsEnabledUpdated(let enabled):
guard let fromState = captionsLanguageButton else {
return state
}
captionsLanguageButton = DefaultButtonState(enabled: enabled, visible: fromState.visible)
case .callScreenCaptionsLanguageButtonIsVisibleUpdated(let visible):
guard let fromState = captionsLanguageButton else {
return state
}
captionsLanguageButton = DefaultButtonState(enabled: fromState.enabled, visible: visible)
case .callScreenCustomButtonIsEnabledUpdated(let id, let enabled):
callScreenCustomButtonsState = callScreenCustomButtonsState.map { (customButton) in
if customButton.id == id {
return CustomButtonState(id: id,
enabled: enabled,
visible: customButton.visible,
image: customButton.image,
title: customButton.title)
} else {
return customButton
}
}
case .callScreenCustomButtonIsVisibleUpdated(let id, let visible):
callScreenCustomButtonsState = callScreenCustomButtonsState.map { (customButton) in
if customButton.id == id {
return CustomButtonState(id: id,
enabled: customButton.enabled,
visible: visible,
image: customButton.image,
title: customButton.title)
} else {
return customButton
}
}
case .callScreenCustomButtonTitleUpdated(let id, let title):
callScreenCustomButtonsState = callScreenCustomButtonsState.map { (customButton) in
if customButton.id == id {
return CustomButtonState(id: id,
enabled: customButton.enabled,
visible: customButton.visible,
image: customButton.image,
title: title)
} else {
return customButton
}
}
case .callScreenCustomButtonIconUpdated(let id, let image):
callScreenCustomButtonsState = callScreenCustomButtonsState.map { (customButton) in
if customButton.id == id {
return CustomButtonState(id: id,
enabled: customButton.enabled,
visible: customButton.visible,
image: image,
title: customButton.title)
} else {
return customButton
}
}
case .callScreenHeaderCustomButtonIsEnabledUpdated(let id, let enabled):
callScreenHeaderCustomButtonsState = callScreenHeaderCustomButtonsState.map { (customButton) in
if customButton.id == id {
return CustomButtonState(id: id,
enabled: enabled,
visible: customButton.visible,
image: customButton.image,
title: customButton.title)
} else {
return customButton
}
}
case .callScreenHeaderCustomButtonIsVisibleUpdated(let id, let visible):
callScreenHeaderCustomButtonsState = callScreenHeaderCustomButtonsState.map { (customButton) in
if customButton.id == id {
return CustomButtonState(id: id,
enabled: customButton.enabled,
visible: visible,
image: customButton.image,
title: customButton.title)
} else {
return customButton
}
}
case .callScreenHeaderCustomButtonTitleUpdated(let id, let title):
callScreenHeaderCustomButtonsState = callScreenHeaderCustomButtonsState.map { (customButton) in
if customButton.id == id {
return CustomButtonState(id: id,
enabled: customButton.enabled,
visible: customButton.visible,
image: customButton.image,
title: title)
} else {
return customButton
}
}
case .callScreenHeaderCustomButtonIconUpdated(let id, let image):
callScreenHeaderCustomButtonsState = callScreenHeaderCustomButtonsState.map { (customButton) in
if customButton.id == id {
return CustomButtonState(id: id,
enabled: customButton.enabled,
visible: customButton.visible,
image: image,
title: customButton.title)
} else {
return customButton
}
}
}
return ButtonViewDataState(setupScreenCameraButtonState: setupScreenCameraButtonState,
setupScreenMicButtonState: setupScreenMicButtonState,
setupScreenAudioDeviceButtonState: setupScreenAudioDeviceButtonState,
callScreenCameraButtonState: callScreenCameraButtonState,
callScreenMicButtonState: callScreenMicButtonState,
callScreenAudioDeviceButtonState: callScreenAudioDeviceButtonState,
shareDiagnosticsButton: shareDiagnosticsButton,
reportIssueButton: reportIssueButton,
liveCaptionsButton: liveCaptionsButton,
liveCaptionsToggleButton: liveCaptionsToggleButton,
spokenLanguageButton: spokenLanguageButton,
captionsLanguageButton: captionsLanguageButton,
callScreenCustomButtonsState: callScreenCustomButtonsState,
callScreenHeaderCustomButtonsState: callScreenHeaderCustomButtonsState
)
}
}