Tuba Kesten
02/09/2021, 3:11 PMColton Idle
02/09/2021, 3:24 PMTuba Kesten
02/09/2021, 3:38 PMclass MessagesInboxComposableComponent(
private val messagesViewModel: MessagesInboxPaginatedViewModel,
) : ComposableViewComponent {
override fun createComposableViews(): ComposableView = {
val paginatedMessages = messagesViewModel.getMessageInbox(AmbientSessionUser.current.userName!!)
.collectAsLazyPagingItems()
MessagesInboxScreen(
paginatedMessages = paginatedMessages)
}
}
@Composable
fun MessagesInboxScreen(
paginatedMessages: LazyPagingItems<Conversation>, messageSendDelete: () -> Unit,
) {
...
Image(
vectorResource(id = R.drawable.icons_delete),
contentDescription = "trashIcon",
modifier = Modifier.clickable(onClick = { messageSendDelete() }) //refresh after this action
)
...
Messages(paginatedMessages = paginatedMessages)
}
@Composable
private fun Messages(paginatedMessages: LazyPagingItems<Conversation>) {
LazyColumn {
if (paginatedMessages.loadState.refresh == LoadState.Loading) {
item {
CircularProgressIndicator()
}
}
itemsIndexed(paginatedMessages) { _, item ->
if (item != null) {
UserListItem(item = item)
}
}
if (paginatedMessages.loadState.append == LoadState.Loading) {
item {
CircularProgressIndicator()
}
}
}
}
Shakil Karim
02/09/2021, 4:01 PMitemsIndexed(paginatedMessages) { _, item ->
if (item != null) {
UserListItem(item = item)
}
}
I think it should have following checks
when (val refreshState = items.loadState.refresh) {
is LoadState.Loading -> {
CircularProgressIndicator(modifier = Modifier.align(Alignment.Center))
}
is LoadState.Error -> {
ErrorItem(
refreshState.error.localizedMessage!!,
modifier = Modifier.fillMaxSize(),
onClickRetry = { items.refresh() }
)
}
is LoadState.NotLoading -> {
Column(modifier = Modifier.fillMaxSize()) {
LazyColumn(modifier = Modifier.fillMaxSize()) {
if (items.itemCount > 0) {
itemsIndexed(items) { _, item ->
item?.let {
itemContent(it)
}
}
} else {
item {
Box(modifier = Modifier.fillParentMaxSize()) {
ErrorItem(
stringResource(R.string.empty_data),
modifier = Modifier.fillMaxSize(),
onClickRetry = { items.retry() }
)
}
}
}
}
}
}
}
when (val appendState = items.loadState.append) {
is LoadState.Loading -> {
CircularProgressIndicator(
modifier = Modifier
.fillMaxWidth()
.wrapContentWidth(Alignment.CenterHorizontally)
.align(Alignment.BottomCenter)
)
}
is LoadState.Error -> {
ErrorItem("appendState.error.localizedMessage!!",
modifier = Modifier.align(Alignment.BottomCenter)) {
items.retry()
}
}
}