Refactors ChatroomHeader compose

This commit is contained in:
Vitor Pamplona
2023-07-21 11:02:16 -04:00
parent 6fbb59ddac
commit 9a517380a0
3 changed files with 16 additions and 24 deletions

View File

@@ -68,7 +68,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@Composable @Composable
fun ChatroomCompose( fun ChatroomHeaderCompose(
baseNote: Note, baseNote: Note,
accountViewModel: AccountViewModel, accountViewModel: AccountViewModel,
nav: (String) -> Unit nav: (String) -> Unit
@@ -305,13 +305,16 @@ private fun WatchNotificationChanges(
@Composable @Composable
fun LoadUser(baseUserHex: String, content: @Composable (User?) -> Unit) { fun LoadUser(baseUserHex: String, content: @Composable (User?) -> Unit) {
var user by remember(baseUserHex) { var user by remember(baseUserHex) {
mutableStateOf<User?>(LocalCache.getUserIfExists(baseUserHex)) mutableStateOf(LocalCache.getUserIfExists(baseUserHex))
} }
if (user == null) { if (user == null) {
LaunchedEffect(key1 = baseUserHex) { LaunchedEffect(key1 = baseUserHex) {
launch(Dispatchers.IO) { launch(Dispatchers.IO) {
user = LocalCache.checkGetOrCreateUser(baseUserHex) val newUser = LocalCache.checkGetOrCreateUser(baseUserHex)
if (user != newUser) {
user = newUser
}
} }
} }
} }

View File

@@ -17,7 +17,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.service.model.PrivateDmEvent 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 com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import kotlin.time.ExperimentalTime import kotlin.time.ExperimentalTime
import kotlin.time.measureTimedValue import kotlin.time.measureTimedValue
@@ -113,7 +113,7 @@ private fun FeedLoaded(
) { _, item -> ) { _, item ->
Row(Modifier.fillMaxWidth()) { Row(Modifier.fillMaxWidth()) {
val (value, elapsed) = measureTimedValue { val (value, elapsed) = measureTimedValue {
ChatroomCompose( ChatroomHeaderCompose(
item, item,
accountViewModel = accountViewModel, accountViewModel = accountViewModel,
nav = nav nav = nav

View File

@@ -26,13 +26,13 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.NostrChatroomDataSource import com.vitorpamplona.amethyst.service.NostrChatroomDataSource
import com.vitorpamplona.amethyst.ui.actions.NewPostViewModel import com.vitorpamplona.amethyst.ui.actions.NewPostViewModel
import com.vitorpamplona.amethyst.ui.components.ObserveDisplayNip05Status import com.vitorpamplona.amethyst.ui.components.ObserveDisplayNip05Status
import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture 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.note.UsernameDisplay
import com.vitorpamplona.amethyst.ui.screen.NostrChatroomFeedViewModel import com.vitorpamplona.amethyst.ui.screen.NostrChatroomFeedViewModel
import com.vitorpamplona.amethyst.ui.screen.RefreshingChatroomFeedView import com.vitorpamplona.amethyst.ui.screen.RefreshingChatroomFeedView
@@ -49,26 +49,15 @@ fun ChatroomScreen(
) { ) {
if (userId == null) return if (userId == null) return
var userRoom by remember(userId) { mutableStateOf<User?>(null) } LoadUser(userId) {
it?.let {
if (userRoom == null) { PrepareChatroomViewModels(
LaunchedEffect(userId) { baseUser = it,
launch(Dispatchers.IO) { accountViewModel = accountViewModel,
val newUser = LocalCache.checkGetOrCreateUser(userId) nav = nav
if (newUser != userRoom) { )
userRoom = newUser
}
}
} }
} }
userRoom?.let {
PrepareChatroomViewModels(
baseUser = it,
accountViewModel = accountViewModel,
nav = nav
)
}
} }
@Composable @Composable