in AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/ViewComponents/ParticipantsList/ParticipantsListViewModel.swift [43:131]
func update(localUserState: LocalUserState,
remoteParticipantsState: RemoteParticipantsState,
isDisplayed: Bool) {
self.isDisplayed = isDisplayed
// If timestamp or lastRoleChanged
if lastUpdateTimeStamp != remoteParticipantsState.lastUpdateTimeStamp
|| self.lastParticipantRole != localUserState.participantRole {
lastUpdateTimeStamp = remoteParticipantsState.lastUpdateTimeStamp
self.lastParticipantRole = localUserState.participantRole
let shouldFilterOutLobbyUsers = shouldFilterOutLobbyUsers(
participantRole: localUserState.participantRole)
// Build the Local Participant "List"
let localParticipantVM = [ParticipantsListCellViewModel(
localUserState: localUserState,
localizationProvider: localizationProvider)]
// Grab the Remote Participants
let remoteParticipantVMs = remoteParticipantsState.participantInfoList
.filter { participant in
participant.status == .connected || participant.status == .hold
}.map {
let participant = $0
return ParticipantsListCellViewModel(participantInfoModel: participant,
localizationProvider: localizationProvider,
confirmTitle: nil,
confirmAccept: nil,
confirmDeny: nil,
onAccept: {
self.onUserClicked(participant)
}, onDeny: {})
}
let lobbyParticipantVMs = remoteParticipantsState.participantInfoList
.filter { participant in
participant.status == .inLobby && !shouldFilterOutLobbyUsers
}.map {
let participant = $0
return ParticipantsListCellViewModel(participantInfoModel: participant,
localizationProvider: localizationProvider,
confirmTitle: String(
format: getConfirmTitleAdmitParticipant(),
$0.displayName),
confirmAccept: getConfirmAdmit(),
confirmDeny: getConfirmDecline(),
onAccept: {
self.admitParticipant(participant.userIdentifier)
}, onDeny: {
self.declineParticipant(participant.userIdentifier)
})
}
meetingParticipants = sortParticipants(
participants: localParticipantVM + remoteParticipantVMs,
avatarManager: avatarManager)
meetingParticipantsTitle = BodyTextDrawerListItemViewModel(
title: String(format: getInTheCall(), meetingParticipants.count),
accessibilityIdentifier: "??")
lobbyParticipants = sortParticipants(
participants: lobbyParticipantVMs,
avatarManager: avatarManager)
lobbyParticipantsTitle = BodyTextWithActionDrawerListItemViewModel(
title: String(format: getWaitingInLobby(), lobbyParticipants.count),
accessibilityIdentifier: "??",
actionText: getAdmitAllButtonText(),
confirmTitle: getConfirmTitleAdmitAll(),
confirmAccept: getConfirmAdmit(),
confirmDeny: getConfirmDecline(),
accept: { self.admitAll() },
deny: { self.declineAll() }
)
// Append + More item
let plusMoreCount =
remoteParticipantsState.totalParticipantCount - remoteParticipantsState.participantInfoList.count
if plusMoreCount > 0 {
meetingParticipants.append(BodyTextDrawerListItemViewModel(
title: String(format: getPlusMoreText(), "\(plusMoreCount)"),
accessibilityIdentifier: "PlusMore"
))
}
}
}