From 723e575b4b4d5db332ee9dbfd2ea24ee399aaf89 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 7 Jun 2024 19:28:20 -0400 Subject: [PATCH] Fixes the LazyColumn for Hashtags on Profile --- .../ui/screen/loggedIn/ProfileScreen.kt | 43 ++++++++++--------- .../quartz/events/ContactListEvent.kt | 2 + 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt index 90559e15b..62bfe7fda 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt @@ -43,6 +43,8 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState @@ -621,17 +623,11 @@ private fun ReportsTabHeader(baseUser: User) { @Composable private fun FollowedTagsTabHeader(baseUser: User) { - var usertags by remember { mutableIntStateOf(0) } + val userState by baseUser.live().follows.observeAsState() - LaunchedEffect(key1 = baseUser) { - launch(Dispatchers.IO) { - val contactList = baseUser.latestContactList - - val newTags = (contactList?.verifiedFollowTagSet?.count() ?: 0) - - if (newTags != usertags) { - usertags = newTags - } + val usertags by remember(baseUser) { + derivedStateOf { + userState?.user?.latestContactList?.countFollowTags() ?: 0 } } @@ -1540,17 +1536,24 @@ fun TabFollowedTags( account: AccountViewModel, nav: (String) -> Unit, ) { + val items = + remember(baseUser) { + baseUser.latestContactList?.unverifiedFollowTagSet() + } + Column(Modifier.fillMaxHeight().padding(vertical = 0.dp)) { - baseUser.latestContactList?.let { - it.unverifiedFollowTagSet().forEach { hashtag -> - HashtagHeader( - tag = hashtag, - account = account, - onClick = { nav("Hashtag/$hashtag") }, - ) - HorizontalDivider( - thickness = DividerThickness, - ) + items?.let { + LazyColumn { + itemsIndexed(items) { index, hashtag -> + HashtagHeader( + tag = hashtag, + account = account, + onClick = { nav("Hashtag/$hashtag") }, + ) + HorizontalDivider( + thickness = DividerThickness, + ) + } } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt index d8d45df69..b782e376e 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt @@ -82,6 +82,8 @@ class ContactListEvent( fun unverifiedFollowTagSet() = tags.filter { it.size > 1 && it[0] == "t" }.mapNotNull { it.getOrNull(1) } + fun countFollowTags() = tags.count { it.size > 1 && it[0] == "t" } + fun unverifiedFollowGeohashSet() = tags.filter { it.size > 1 && it[0] == "g" }.mapNotNull { it.getOrNull(1) } fun unverifiedFollowAddressSet() = tags.filter { it.size > 1 && it[0] == "a" }.mapNotNull { it.getOrNull(1) }