@@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.size
14
14
import androidx.compose.foundation.lazy.LazyColumn
15
15
import androidx.compose.material.icons.Icons
16
16
import androidx.compose.material.icons.filled.Add
17
+ import androidx.compose.material.icons.filled.Star
17
18
import androidx.compose.material3.FloatingActionButton
18
19
import androidx.compose.material3.Icon
19
20
import androidx.compose.material3.LargeTopAppBar
@@ -66,51 +67,56 @@ fun RoomsScreen(
66
67
) {
67
68
val rooms = uiState.roomStream.collectAsLazyPagingItems()
68
69
val loadState = rooms.loadState
69
- LazyColumn (modifier = Modifier .fillMaxSize()) {
70
- when (val refreshState = loadState.refresh) {
71
- is LoadState .Loading -> {
72
- items(count = 5 ) { RoomTileSkeleton () }
73
- }
74
70
75
- is LoadState .Error -> {
76
- item {
77
- Text (
78
- modifier = Modifier .fillParentMaxSize(),
79
- text = refreshState.error.localizedMessage ? : stringResource(
80
- R .string.feature_rooms_ui_failed_to_load,
81
- ),
82
- )
71
+ if (loadState.refresh is LoadState .NotLoading && rooms.itemCount == 0 ) {
72
+ EmptyRoomContent (modifier = Modifier .fillMaxSize())
73
+ } else {
74
+ LazyColumn (modifier = Modifier .fillMaxSize()) {
75
+ when (val refreshState = loadState.refresh) {
76
+ is LoadState .Loading -> {
77
+ items(count = 5 ) { RoomTileSkeleton () }
83
78
}
84
- }
85
79
86
- is LoadState .NotLoading -> {
87
- items(count = rooms.itemCount) { index ->
88
- val room = checkNotNull(rooms[index])
89
- RoomTile (
90
- modifier = Modifier .fillMaxWidth(),
91
- room = room,
92
- onClick = { onRoomClick(room.id) },
93
- )
80
+ is LoadState .Error -> {
81
+ item {
82
+ Text (
83
+ modifier = Modifier .fillParentMaxSize(),
84
+ text = refreshState.error.localizedMessage ? : stringResource(
85
+ R .string.feature_rooms_ui_failed_to_load,
86
+ ),
87
+ )
88
+ }
94
89
}
95
- }
96
- }
97
- when (val appendState = loadState.append) {
98
- is LoadState .Loading -> {
99
- item { RoomTileSkeleton () }
100
- }
101
90
102
- is LoadState .Error -> {
103
- item {
104
- Text (
105
- modifier = Modifier ,
106
- text = appendState.error.localizedMessage ? : stringResource(
107
- R .string.feature_rooms_ui_failed_to_load,
108
- ),
109
- )
91
+ is LoadState .NotLoading -> {
92
+ items(count = rooms.itemCount) { index ->
93
+ val room = checkNotNull(rooms[index])
94
+ RoomTile (
95
+ modifier = Modifier .fillMaxWidth(),
96
+ room = room,
97
+ onClick = { onRoomClick(room.id) },
98
+ )
99
+ }
110
100
}
111
101
}
102
+ when (val appendState = loadState.append) {
103
+ is LoadState .Loading -> {
104
+ item { RoomTileSkeleton () }
105
+ }
106
+
107
+ is LoadState .Error -> {
108
+ item {
109
+ Text (
110
+ modifier = Modifier ,
111
+ text = appendState.error.localizedMessage ? : stringResource(
112
+ R .string.feature_rooms_ui_failed_to_load,
113
+ ),
114
+ )
115
+ }
116
+ }
112
117
113
- is LoadState .NotLoading -> {}
118
+ is LoadState .NotLoading -> {}
119
+ }
114
120
}
115
121
}
116
122
FloatingActionButton (
@@ -125,6 +131,30 @@ fun RoomsScreen(
125
131
}
126
132
}
127
133
134
+ @Composable
135
+ private fun EmptyRoomContent (modifier : Modifier = Modifier ) {
136
+ val color = MaterialTheme .colorScheme.onBackground.copy(alpha = 0.3f )
137
+
138
+ Box (modifier = modifier) {
139
+ Column (modifier = Modifier .align(Alignment .Center )) {
140
+ Icon (
141
+ modifier = Modifier
142
+ .align(Alignment .CenterHorizontally )
143
+ .size(96 .dp),
144
+ imageVector = Icons .Default .Star ,
145
+ tint = color,
146
+ contentDescription = null ,
147
+ )
148
+ Spacer (modifier = Modifier .height(16 .dp))
149
+ Text (
150
+ modifier = Modifier .align(Alignment .CenterHorizontally ),
151
+ text = " Empty chat room" ,
152
+ style = MaterialTheme .typography.titleLarge.copy(color = color),
153
+ )
154
+ }
155
+ }
156
+ }
157
+
128
158
@Composable
129
159
internal fun RoomTopBar (
130
160
scrollBehavior : TopAppBarScrollBehavior = TopAppBarDefaults .exitUntilCollapsedScrollBehavior(),
0 commit comments