Добавлено отслеживание количества участников группы в ChatDetailScreen
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user