AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/ViewComponents/ParticipantActions/ParticipantMenuViewModel.swift (52 lines of code) (raw):
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
import Foundation
internal class ParticipantMenuViewModel: ObservableObject {
private let compositeViewModelFactory: CompositeViewModelFactoryProtocol
private let localizationProvider: LocalizationProviderProtocol
private let onRemoveUser: (ParticipantInfoModel) -> Void
private let capabilitiesManager: CapabilitiesManager
private var participantInfoModel: ParticipantInfoModel?
private var canRemove: Bool
var isDisplayed: Bool
@Published var items: [DrawerGenericItemViewModel] = []
init(compositeViewModelFactory: CompositeViewModelFactoryProtocol,
localUserState: LocalUserState,
localizationProvider: LocalizationProviderProtocol,
capabilitiesManager: CapabilitiesManager,
onRemoveUser: @escaping (ParticipantInfoModel) -> Void,
isDisplayed: Bool) {
self.compositeViewModelFactory = compositeViewModelFactory
self.localizationProvider = localizationProvider
self.capabilitiesManager = capabilitiesManager
self.canRemove = capabilitiesManager.hasCapability(
capabilities: localUserState.capabilities,
capability: ParticipantCapabilityType.removeParticipant)
self.isDisplayed = false
self.onRemoveUser = onRemoveUser
items = [DrawerGenericItemViewModel(title: "Remove",
accessibilityIdentifier: "Remove",
action: rowTapped,
startCompositeIcon: .personDelete,
isEnabled: canRemove)]
}
private func rowTapped() {
guard let pim = participantInfoModel else {
return
}
self.onRemoveUser(pim)
}
func update(localUserState: LocalUserState, isDisplayed: Bool, participantInfoModel: ParticipantInfoModel?) {
self.participantInfoModel = participantInfoModel
self.canRemove = capabilitiesManager.hasCapability(
capabilities: localUserState.capabilities,
capability: ParticipantCapabilityType.removeParticipant)
self.isDisplayed = isDisplayed
items = [DrawerGenericItemViewModel(title: "Remove",
accessibilityIdentifier: "Remove",
action: rowTapped,
startCompositeIcon: .personDelete,
isEnabled: canRemove)]
}
func getParticipantName() -> String {
return participantInfoModel?.displayName ?? ""
}
}