11package org.wordpress.android.support.common.ui
22
3+ import androidx.compose.foundation.layout.Box
34import androidx.compose.foundation.layout.fillMaxSize
45import androidx.compose.foundation.layout.padding
56import androidx.compose.foundation.lazy.LazyColumn
67import androidx.compose.foundation.lazy.items
78import androidx.compose.material.icons.Icons
89import androidx.compose.material.icons.filled.Add
10+ import androidx.compose.material3.CircularProgressIndicator
911import androidx.compose.material3.ExperimentalMaterial3Api
1012import androidx.compose.material3.HorizontalDivider
1113import androidx.compose.material3.Icon
@@ -15,7 +17,10 @@ import androidx.compose.material3.Scaffold
1517import androidx.compose.material3.SnackbarHost
1618import androidx.compose.material3.SnackbarHostState
1719import androidx.compose.material3.pulltorefresh.PullToRefreshBox
20+ import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults
21+ import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
1822import androidx.compose.runtime.Composable
23+ import androidx.compose.ui.Alignment
1924import androidx.compose.ui.Modifier
2025import org.wordpress.android.support.common.model.Conversation
2126import org.wordpress.android.ui.compose.components.MainTopAppBar
@@ -53,13 +58,26 @@ fun <T : Conversation> ConversationsListScreen(
5358 )
5459 }
5560 ) { contentPadding ->
61+ val isRefreshing = conversationsState is ConversationsSupportViewModel .ConversationsState .Refreshing
62+ val pullToRefreshState = rememberPullToRefreshState()
63+
5664 PullToRefreshBox (
57- isRefreshing = conversationsState is ConversationsSupportViewModel .ConversationsState .Loading ,
65+ state = pullToRefreshState,
66+ isRefreshing = isRefreshing,
5867 onRefresh = onRefresh,
59- modifier = modifier.fillMaxSize()
68+ modifier = modifier
69+ .fillMaxSize()
70+ .padding(contentPadding),
71+ indicator = {
72+ PullToRefreshDefaults .Indicator (
73+ state = pullToRefreshState,
74+ isRefreshing = isRefreshing,
75+ modifier = Modifier .align(Alignment .TopCenter )
76+ )
77+ }
6078 ) {
6179 ConversationsList (
62- modifier = Modifier .padding(contentPadding) ,
80+ modifier = Modifier ,
6381 conversations = conversations,
6482 conversationsState = conversationsState,
6583 onCreateNewConversationClick = onCreateNewConversationClick,
@@ -78,27 +96,40 @@ private fun <T : Conversation> ConversationsList(
7896 onCreateNewConversationClick : () -> Unit ,
7997 conversationListItem : @Composable (T ) -> Unit
8098) {
81- if (conversations.isEmpty() && conversationsState is ConversationsSupportViewModel .ConversationsState .Loaded ) {
82- EmptyConversationsView (
83- modifier = modifier,
84- onCreateNewConversationClick = onCreateNewConversationClick
85- )
86- } else if (conversationsState is ConversationsSupportViewModel .ConversationsState .NoNetwork ) {
87- OfflineConversationsView ()
88- } else if (conversationsState is ConversationsSupportViewModel .ConversationsState .Error ) {
89- ErrorConversationsView ()
90- } else {
91- LazyColumn (
92- modifier = modifier.fillMaxSize()
93- ) {
94- items(
95- items = conversations,
96- key = { it.getConversationId() }
97- ) { conversation ->
98- conversationListItem(conversation)
99- HorizontalDivider (
100- color = MaterialTheme .colorScheme.outlineVariant.copy(alpha = 0.5f )
101- )
99+ when {
100+ conversationsState is ConversationsSupportViewModel .ConversationsState .Loading -> {
101+ Box (
102+ modifier = modifier.fillMaxSize(),
103+ contentAlignment = Alignment .Center
104+ ) {
105+ CircularProgressIndicator ()
106+ }
107+ }
108+ conversations.isEmpty() && conversationsState is ConversationsSupportViewModel .ConversationsState .Loaded -> {
109+ EmptyConversationsView (
110+ modifier = modifier,
111+ onCreateNewConversationClick = onCreateNewConversationClick
112+ )
113+ }
114+ conversationsState is ConversationsSupportViewModel .ConversationsState .NoNetwork -> {
115+ OfflineConversationsView ()
116+ }
117+ conversationsState is ConversationsSupportViewModel .ConversationsState .Error -> {
118+ ErrorConversationsView ()
119+ }
120+ else -> {
121+ LazyColumn (
122+ modifier = modifier.fillMaxSize()
123+ ) {
124+ items(
125+ items = conversations,
126+ key = { it.getConversationId() }
127+ ) { conversation ->
128+ conversationListItem(conversation)
129+ HorizontalDivider (
130+ color = MaterialTheme .colorScheme.outlineVariant.copy(alpha = 0.5f )
131+ )
132+ }
102133 }
103134 }
104135 }
0 commit comments