AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/ViewComponents/Button/IconWithLabelButtonViewModel.swift (66 lines of code) (raw):

// // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // import Foundation import Combine class IconWithLabelButtonViewModel<T: ButtonState>: ObservableObject { enum ButtonTypeColor { case colorThemedWhite case white } @Published var selectedButtonState: T @Published var localizationProvider: LocalizationProviderProtocol @Published var iconName: CompositeIcon @Published var buttonTypeColor: ButtonTypeColor @Published var buttonLabel: String? @Published var accessibilityLabel: String? @Published var accessibilityValue: String? @Published var accessibilityHint: String? @Published var isDisabled: Bool @Published var isVisible: Bool var action: (() -> Void) init(selectedButtonState: T, localizationProvider: LocalizationProviderProtocol, buttonTypeColor: ButtonTypeColor, isDisabled: Bool = false, isVisible: Bool = true, action: @escaping (() -> Void) = {}) { self.selectedButtonState = selectedButtonState self.localizationProvider = localizationProvider self.iconName = selectedButtonState.iconName self.buttonTypeColor = buttonTypeColor self.buttonLabel = localizationProvider.getLocalizedString(selectedButtonState.localizationKey) self.isDisabled = isDisabled self.isVisible = isVisible self.action = action } func update(selectedButtonState: T) { if self.selectedButtonState.localizationKey != selectedButtonState.localizationKey { self.selectedButtonState = selectedButtonState self.buttonLabel = localizationProvider.getLocalizedString(selectedButtonState.localizationKey) self.iconName = selectedButtonState.iconName } } func update(accessibilityLabel: String) { if self.accessibilityLabel != accessibilityLabel { self.accessibilityLabel = accessibilityLabel } } func update(accessibilityValue: String) { if self.accessibilityValue != accessibilityValue { self.accessibilityValue = accessibilityValue } } func update(accessibilityHint: String) { if self.accessibilityHint != accessibilityHint { self.accessibilityHint = accessibilityHint } } func update(isDisabled: Bool) { if self.isDisabled != isDisabled { self.isDisabled = isDisabled } } func update(buttonTypeColor: ButtonTypeColor) { if self.buttonTypeColor != buttonTypeColor { self.buttonTypeColor = buttonTypeColor } } }