Добавлено отслеживание количества участников группы в ChatDetailScreen
This commit is contained in:
@@ -425,6 +425,9 @@ fun ChatDetailScreen(
|
||||
var groupAdminKeys by remember(user.publicKey, currentUserPublicKey) {
|
||||
mutableStateOf<Set<String>>(emptySet())
|
||||
}
|
||||
var groupMembersCount by remember(user.publicKey, currentUserPublicKey) {
|
||||
mutableStateOf<Int?>(null)
|
||||
}
|
||||
var mentionCandidates by remember(user.publicKey, currentUserPublicKey) {
|
||||
mutableStateOf<List<MentionCandidate>>(emptyList())
|
||||
}
|
||||
@@ -439,6 +442,7 @@ fun ChatDetailScreen(
|
||||
LaunchedEffect(isGroupChat, user.publicKey, currentUserPublicKey) {
|
||||
if (!isGroupChat || user.publicKey.isBlank() || currentUserPublicKey.isBlank()) {
|
||||
groupAdminKeys = emptySet()
|
||||
groupMembersCount = null
|
||||
mentionCandidates = emptyList()
|
||||
return@LaunchedEffect
|
||||
}
|
||||
@@ -446,15 +450,20 @@ fun ChatDetailScreen(
|
||||
val members = withContext(Dispatchers.IO) {
|
||||
groupRepository.requestGroupMembers(user.publicKey).orEmpty()
|
||||
}
|
||||
val adminKey = members.firstOrNull().orEmpty()
|
||||
val normalizedMembers =
|
||||
members.map { it.trim() }
|
||||
.filter { it.isNotBlank() }
|
||||
.distinct()
|
||||
groupMembersCount = normalizedMembers.size
|
||||
|
||||
val adminKey = normalizedMembers.firstOrNull().orEmpty()
|
||||
groupAdminKeys =
|
||||
if (adminKey.isBlank()) emptySet() else setOf(adminKey)
|
||||
|
||||
mentionCandidates =
|
||||
withContext(Dispatchers.IO) {
|
||||
members.map { it.trim() }
|
||||
.filter { it.isNotBlank() && !it.equals(currentUserPublicKey.trim(), ignoreCase = true) }
|
||||
.distinct()
|
||||
normalizedMembers
|
||||
.filter { !it.equals(currentUserPublicKey.trim(), ignoreCase = true) }
|
||||
.mapNotNull { memberKey ->
|
||||
val resolvedUser = viewModel.resolveUserForProfile(memberKey) ?: return@mapNotNull null
|
||||
val normalizedUsername = resolvedUser.username.trim().trimStart('@')
|
||||
@@ -636,10 +645,13 @@ fun ChatDetailScreen(
|
||||
val isRosettaOfficial = user.title.equals("Rosetta", ignoreCase = true) ||
|
||||
user.username.equals("rosetta", ignoreCase = true) ||
|
||||
isSystemAccount
|
||||
val groupMembersSubtitleCount = groupMembersCount ?: 0
|
||||
val groupMembersSubtitle =
|
||||
"$groupMembersSubtitleCount member${if (groupMembersSubtitleCount == 1) "" else "s"}"
|
||||
val chatSubtitle =
|
||||
when {
|
||||
isSavedMessages -> "Notes"
|
||||
isGroupChat -> "group"
|
||||
isGroupChat -> groupMembersSubtitle
|
||||
isTyping -> "" // Пустая строка, используем компонент TypingIndicator
|
||||
isOnline -> "online"
|
||||
isSystemAccount -> "official account"
|
||||
|
||||
Reference in New Issue
Block a user