AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/ViewComponents/Drawer/DrawerViewModels.swift (90 lines of code) (raw):

// // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // import Foundation import SwiftUI // This class contains all the View Models for List based Drawers (Participants, Audio Devices, Leave Call Confirm) // Each ViewModel represents a line-item supported on one of these lits protocol BaseDrawerItemViewModel {} struct DrawerGenericItemViewModel: BaseDrawerItemViewModel { let title: String let subtitle: String? let startCompositeIcon: CompositeIcon? let startIcon: UIImage? let endIcon: CompositeIcon? let accessibilityIdentifier: String let action: (() -> Void)? let isEnabled: Bool let isToggleOn: Binding<Bool>? let showsToggle: Bool let accessibilityTraits: AccessibilityTraits? init(title: String, subtitle: String? = "", accessibilityIdentifier: String, accessibilityTraits: AccessibilityTraits? = nil, action: (() -> Void)? = nil, startCompositeIcon: CompositeIcon? = nil, startIcon: UIImage? = nil, endIcon: CompositeIcon? = nil, showToggle: Bool = false, isToggleOn: Binding<Bool>? = nil, isEnabled: Bool = true) { self.startCompositeIcon = startCompositeIcon self.startIcon = startIcon self.accessibilityIdentifier = accessibilityIdentifier self.action = action self.isEnabled = isEnabled self.title = title self.isToggleOn = isToggleOn self.showsToggle = showToggle self.subtitle = subtitle self.endIcon = endIcon self.accessibilityTraits = accessibilityTraits } } struct DrawerSelectableItemViewModel: BaseDrawerItemViewModel { let title: String let isSelected: Bool let accessibilityIdentifier: String let accessibilityLabel: String? let icon: CompositeIcon? let action: () -> Void init(icon: CompositeIcon?, title: String, accessibilityIdentifier: String, accessibilityLabel: String, isSelected: Bool, action: @escaping () -> Void) { self.isSelected = isSelected self.action = action self.accessibilityIdentifier = accessibilityIdentifier self.accessibilityLabel = accessibilityLabel self.icon = icon self.title = title } } struct TitleDrawerListItemViewModel: BaseDrawerItemViewModel { let title: String let accessibilityIdentifier: String } struct BodyTextDrawerListItemViewModel: BaseDrawerItemViewModel { let title: String let accessibilityIdentifier: String } struct BodyTextWithActionDrawerListItemViewModel: BaseDrawerItemViewModel { let title: String let accessibilityIdentifier: String let actionText: String let confirmTitle: String let confirmAccept: String let confirmDeny: String let accept: (() -> Void) let deny: (() -> Void) } struct IconTextActionListItemViewModel: BaseDrawerItemViewModel { let title: String let isEnabled: Bool let startCompositeIcon: CompositeIcon let accessibilityIdentifier: String let confirmTitle: String let confirmMessage: String let confirmAccept: String let confirmDeny: String let accept: (() -> Void) let deny: (() -> Void) }