Добавлено отслеживание количества участников группы в ChatDetailScreen

This commit is contained in:
2026-03-07 20:42:21 +05:00
parent 56ba0bd42a
commit 364b166581

View File

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