From 9a517380a0447223c88346e28dffc23983b5c48b Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 21 Jul 2023 11:02:16 -0400 Subject: [PATCH] Refactors ChatroomHeader compose --- ...oomCompose.kt => ChatroomHeaderCompose.kt} | 9 ++++--- .../ui/screen/ChatroomListFeedView.kt | 4 +-- .../ui/screen/loggedIn/ChatroomScreen.kt | 27 ++++++------------- 3 files changed, 16 insertions(+), 24 deletions(-) rename app/src/main/java/com/vitorpamplona/amethyst/ui/note/{ChatroomCompose.kt => ChatroomHeaderCompose.kt} (98%) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomHeaderCompose.kt similarity index 98% rename from app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt rename to app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomHeaderCompose.kt index 5575ba76e..366339f64 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomHeaderCompose.kt @@ -68,7 +68,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @Composable -fun ChatroomCompose( +fun ChatroomHeaderCompose( baseNote: Note, accountViewModel: AccountViewModel, nav: (String) -> Unit @@ -305,13 +305,16 @@ private fun WatchNotificationChanges( @Composable fun LoadUser(baseUserHex: String, content: @Composable (User?) -> Unit) { var user by remember(baseUserHex) { - mutableStateOf(LocalCache.getUserIfExists(baseUserHex)) + mutableStateOf(LocalCache.getUserIfExists(baseUserHex)) } if (user == null) { LaunchedEffect(key1 = baseUserHex) { launch(Dispatchers.IO) { - user = LocalCache.checkGetOrCreateUser(baseUserHex) + val newUser = LocalCache.checkGetOrCreateUser(baseUserHex) + if (user != newUser) { + user = newUser + } } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ChatroomListFeedView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ChatroomListFeedView.kt index 8012f4b8e..42f95a6dd 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ChatroomListFeedView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ChatroomListFeedView.kt @@ -17,7 +17,7 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.service.model.PrivateDmEvent -import com.vitorpamplona.amethyst.ui.note.ChatroomCompose +import com.vitorpamplona.amethyst.ui.note.ChatroomHeaderCompose import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import kotlin.time.ExperimentalTime import kotlin.time.measureTimedValue @@ -113,7 +113,7 @@ private fun FeedLoaded( ) { _, item -> Row(Modifier.fillMaxWidth()) { val (value, elapsed) = measureTimedValue { - ChatroomCompose( + ChatroomHeaderCompose( item, accountViewModel = accountViewModel, nav = nav diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt index caa8690ba..a368ff82d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt @@ -26,13 +26,13 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.viewmodel.compose.viewModel -import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.NostrChatroomDataSource import com.vitorpamplona.amethyst.ui.actions.NewPostViewModel import com.vitorpamplona.amethyst.ui.components.ObserveDisplayNip05Status import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture +import com.vitorpamplona.amethyst.ui.note.LoadUser import com.vitorpamplona.amethyst.ui.note.UsernameDisplay import com.vitorpamplona.amethyst.ui.screen.NostrChatroomFeedViewModel import com.vitorpamplona.amethyst.ui.screen.RefreshingChatroomFeedView @@ -49,26 +49,15 @@ fun ChatroomScreen( ) { if (userId == null) return - var userRoom by remember(userId) { mutableStateOf(null) } - - if (userRoom == null) { - LaunchedEffect(userId) { - launch(Dispatchers.IO) { - val newUser = LocalCache.checkGetOrCreateUser(userId) - if (newUser != userRoom) { - userRoom = newUser - } - } + LoadUser(userId) { + it?.let { + PrepareChatroomViewModels( + baseUser = it, + accountViewModel = accountViewModel, + nav = nav + ) } } - - userRoom?.let { - PrepareChatroomViewModels( - baseUser = it, - accountViewModel = accountViewModel, - nav = nav - ) - } } @Composable