Добавлено отслеживание количества участников группы в 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) {
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"