Use produceState and fetch profile only if necessary.
This commit is contained in:
parent
57072c3e6a
commit
291983f6bc
1 changed files with 17 additions and 9 deletions
|
|
@ -21,6 +21,7 @@ import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
|
|
@ -74,9 +75,10 @@ class RoomMemberDetailsPresenter @AssistedInject constructor(
|
||||||
// Update room member info when opening this screen
|
// Update room member info when opening this screen
|
||||||
// We don't need to assign the result as it will be automatically propagated by `room.getRoomMemberAsState`
|
// We don't need to assign the result as it will be automatically propagated by `room.getRoomMemberAsState`
|
||||||
room.getUpdatedMember(roomMemberId)
|
room.getUpdatedMember(roomMemberId)
|
||||||
}
|
.onFailure {
|
||||||
LaunchedEffect(Unit) {
|
// Not a member of the room, try to get the user profile
|
||||||
userProfile = client.getProfile(roomMemberId).getOrNull()
|
userProfile = client.getProfile(roomMemberId).getOrNull()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleEvents(event: RoomMemberDetailsEvents) {
|
fun handleEvents(event: RoomMemberDetailsEvents) {
|
||||||
|
|
@ -112,9 +114,12 @@ class RoomMemberDetailsPresenter @AssistedInject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var userName: String? by remember { mutableStateOf(roomMember?.displayName ?: userProfile?.displayName) }
|
val userName: String? by produceState(
|
||||||
LaunchedEffect(roomMember, userProfile) {
|
initialValue = roomMember?.displayName ?: userProfile?.displayName,
|
||||||
userName = room.userDisplayName(roomMemberId)
|
key1 = roomMember,
|
||||||
|
key2 = userProfile,
|
||||||
|
) {
|
||||||
|
value = room.userDisplayName(roomMemberId)
|
||||||
.fold(
|
.fold(
|
||||||
onSuccess = { it },
|
onSuccess = { it },
|
||||||
onFailure = {
|
onFailure = {
|
||||||
|
|
@ -124,9 +129,12 @@ class RoomMemberDetailsPresenter @AssistedInject constructor(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
var userAvatar: String? by remember { mutableStateOf(roomMember?.avatarUrl ?: userProfile?.avatarUrl) }
|
val userAvatar: String? by produceState(
|
||||||
LaunchedEffect(roomMember, userProfile) {
|
initialValue = roomMember?.avatarUrl ?: userProfile?.avatarUrl,
|
||||||
userAvatar = room.userAvatarUrl(roomMemberId)
|
key1 = roomMember,
|
||||||
|
key2 = userProfile,
|
||||||
|
) {
|
||||||
|
value = room.userAvatarUrl(roomMemberId)
|
||||||
.fold(
|
.fold(
|
||||||
onSuccess = { it },
|
onSuccess = { it },
|
||||||
onFailure = {
|
onFailure = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue