fix: member list reactivity and online category size
Signed-off-by: Infi <wingit@geist.ga>
This commit is contained in:
parent
8fdf442747
commit
89c292778b
|
|
@ -31,6 +31,7 @@ import androidx.compose.runtime.mutableStateListOf
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
|
import androidx.compose.runtime.snapshotFlow
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Brush
|
import androidx.compose.ui.graphics.Brush
|
||||||
|
|
@ -55,6 +56,7 @@ import chat.revolt.components.generic.UserAvatar
|
||||||
import chat.revolt.components.generic.presenceFromStatus
|
import chat.revolt.components.generic.presenceFromStatus
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
@ -127,26 +129,29 @@ class MemberListSheetViewModel @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Online
|
// Online
|
||||||
fullItemList.add(
|
if (!categories[defaultCategoryName].isNullOrEmpty()) {
|
||||||
MemberListItem.CategoryItem(
|
fullItemList.add(
|
||||||
defaultCategoryName,
|
MemberListItem.CategoryItem(
|
||||||
categories[defaultCategoryName]?.size ?: 0
|
defaultCategoryName,
|
||||||
|
categories[defaultCategoryName]?.size ?: 0
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
categories[defaultCategoryName]?.forEach { member ->
|
||||||
categories[defaultCategoryName]?.forEach { member ->
|
fullItemList.add(MemberListItem.MemberItem(member))
|
||||||
fullItemList.add(MemberListItem.MemberItem(member))
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offline
|
// Offline
|
||||||
if (categories[offlineCategoryName].isNullOrEmpty()) return@launch
|
if (!categories[offlineCategoryName].isNullOrEmpty()) {
|
||||||
fullItemList.add(
|
fullItemList.add(
|
||||||
MemberListItem.CategoryItem(
|
MemberListItem.CategoryItem(
|
||||||
offlineCategoryName,
|
offlineCategoryName,
|
||||||
categories[offlineCategoryName]?.size ?: 0
|
categories[offlineCategoryName]?.size ?: 0
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
categories[offlineCategoryName]?.forEach { member ->
|
||||||
categories[offlineCategoryName]?.forEach { member ->
|
fullItemList.add(MemberListItem.MemberItem(member))
|
||||||
fullItemList.add(MemberListItem.MemberItem(member))
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -161,8 +166,11 @@ fun MemberListSheet(
|
||||||
var showUserContextSheet by remember { mutableStateOf(false) }
|
var showUserContextSheet by remember { mutableStateOf(false) }
|
||||||
var userContextSheetTarget by remember { mutableStateOf("") }
|
var userContextSheetTarget by remember { mutableStateOf("") }
|
||||||
|
|
||||||
LaunchedEffect(serverId) {
|
// We use LaunchedEffect to make sure that this is called every time any of the users status changes
|
||||||
viewModel.fetchMemberList(serverId)
|
LaunchedEffect(RevoltAPI.userCache) {
|
||||||
|
snapshotFlow { RevoltAPI.userCache }.distinctUntilChanged().collect {
|
||||||
|
viewModel.fetchMemberList(serverId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showUserContextSheet) {
|
if (showUserContextSheet) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue