|
|
|
@ -17,6 +17,7 @@
@@ -17,6 +17,7 @@
|
|
|
|
|
package io.element.android.features.roomdirectory.impl.root |
|
|
|
|
|
|
|
|
|
import androidx.compose.foundation.clickable |
|
|
|
|
import androidx.compose.foundation.layout.Box |
|
|
|
|
import androidx.compose.foundation.layout.Column |
|
|
|
|
import androidx.compose.foundation.layout.IntrinsicSize |
|
|
|
|
import androidx.compose.foundation.layout.Row |
|
|
|
@ -26,6 +27,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
@@ -26,6 +27,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|
|
|
|
import androidx.compose.foundation.layout.height |
|
|
|
|
import androidx.compose.foundation.layout.padding |
|
|
|
|
import androidx.compose.foundation.layout.width |
|
|
|
|
import androidx.compose.foundation.layout.wrapContentHeight |
|
|
|
|
import androidx.compose.foundation.lazy.LazyColumn |
|
|
|
|
import androidx.compose.foundation.lazy.items |
|
|
|
|
import androidx.compose.foundation.text.KeyboardActions |
|
|
|
@ -33,6 +35,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
@@ -33,6 +35,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
|
|
|
|
|
import androidx.compose.material3.TextFieldColors |
|
|
|
|
import androidx.compose.material3.TextFieldDefaults |
|
|
|
|
import androidx.compose.runtime.Composable |
|
|
|
|
import androidx.compose.runtime.LaunchedEffect |
|
|
|
|
import androidx.compose.ui.Alignment |
|
|
|
|
import androidx.compose.ui.Modifier |
|
|
|
|
import androidx.compose.ui.graphics.Color |
|
|
|
@ -49,6 +52,7 @@ import io.element.android.libraries.designsystem.components.button.BackButton
@@ -49,6 +52,7 @@ import io.element.android.libraries.designsystem.components.button.BackButton
|
|
|
|
|
import io.element.android.libraries.designsystem.preview.ElementPreview |
|
|
|
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight |
|
|
|
|
import io.element.android.libraries.designsystem.theme.aliasScreenTitle |
|
|
|
|
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator |
|
|
|
|
import io.element.android.libraries.designsystem.theme.components.Icon |
|
|
|
|
import io.element.android.libraries.designsystem.theme.components.IconButton |
|
|
|
|
import io.element.android.libraries.designsystem.theme.components.Scaffold |
|
|
|
@ -77,8 +81,8 @@ fun RoomDirectoryView(
@@ -77,8 +81,8 @@ fun RoomDirectoryView(
|
|
|
|
|
state.eventSink(RoomDirectoryEvents.JoinRoom(roomId)) |
|
|
|
|
}, |
|
|
|
|
modifier = Modifier |
|
|
|
|
.padding(padding) |
|
|
|
|
.consumeWindowInsets(padding) |
|
|
|
|
.padding(padding) |
|
|
|
|
.consumeWindowInsets(padding) |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
@ -119,7 +123,10 @@ private fun RoomDirectoryContent(
@@ -119,7 +123,10 @@ private fun RoomDirectoryContent(
|
|
|
|
|
) |
|
|
|
|
RoomDirectoryRoomList( |
|
|
|
|
roomDescriptions = state.roomDescriptions, |
|
|
|
|
displayLoadMoreIndicator = state.displayLoadMoreIndicator, |
|
|
|
|
displayEmptyState = state.displayEmptyState, |
|
|
|
|
onResultClicked = onResultClicked, |
|
|
|
|
onReachedLoadMore = { state.eventSink(RoomDirectoryEvents.LoadMore) }, |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -127,18 +134,52 @@ private fun RoomDirectoryContent(
@@ -127,18 +134,52 @@ private fun RoomDirectoryContent(
|
|
|
|
|
@Composable |
|
|
|
|
private fun RoomDirectoryRoomList( |
|
|
|
|
roomDescriptions: ImmutableList<RoomDescriptionUiModel>, |
|
|
|
|
displayLoadMoreIndicator: Boolean, |
|
|
|
|
displayEmptyState: Boolean, |
|
|
|
|
onResultClicked: (RoomId) -> Unit, |
|
|
|
|
onReachedLoadMore: () -> Unit, |
|
|
|
|
modifier: Modifier = Modifier, |
|
|
|
|
) { |
|
|
|
|
LazyColumn( |
|
|
|
|
modifier = modifier, |
|
|
|
|
) { |
|
|
|
|
LazyColumn(modifier = modifier) { |
|
|
|
|
items(roomDescriptions) { roomDescription -> |
|
|
|
|
RoomDirectoryRoomRow( |
|
|
|
|
roomDescription = roomDescription, |
|
|
|
|
onClick = onResultClicked, |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
if (displayEmptyState) { |
|
|
|
|
item { |
|
|
|
|
Text( |
|
|
|
|
text = stringResource(id = CommonStrings.common_no_results), |
|
|
|
|
style = ElementTheme.typography.fontBodyLgRegular, |
|
|
|
|
color = ElementTheme.colors.textPlaceholder, |
|
|
|
|
modifier = Modifier.padding(16.dp) |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (displayLoadMoreIndicator) { |
|
|
|
|
item { |
|
|
|
|
LoadMoreIndicator(modifier = Modifier.fillMaxWidth()) |
|
|
|
|
LaunchedEffect(Unit) { |
|
|
|
|
onReachedLoadMore() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Composable |
|
|
|
|
private fun LoadMoreIndicator(modifier: Modifier = Modifier) { |
|
|
|
|
Box( |
|
|
|
|
modifier |
|
|
|
|
.fillMaxWidth() |
|
|
|
|
.wrapContentHeight() |
|
|
|
|
.padding(8.dp), |
|
|
|
|
contentAlignment = Alignment.Center, |
|
|
|
|
) { |
|
|
|
|
CircularProgressIndicator( |
|
|
|
|
strokeWidth = 2.dp, |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -203,14 +244,14 @@ private fun RoomDirectoryRoomRow(
@@ -203,14 +244,14 @@ private fun RoomDirectoryRoomRow(
|
|
|
|
|
) { |
|
|
|
|
Row( |
|
|
|
|
modifier = modifier |
|
|
|
|
.fillMaxWidth() |
|
|
|
|
.clickable { onClick(roomDescription.roomId) } |
|
|
|
|
.padding( |
|
|
|
|
top = 12.dp, |
|
|
|
|
bottom = 12.dp, |
|
|
|
|
start = 16.dp, |
|
|
|
|
) |
|
|
|
|
.height(IntrinsicSize.Min), |
|
|
|
|
.fillMaxWidth() |
|
|
|
|
.clickable { onClick(roomDescription.roomId) } |
|
|
|
|
.padding( |
|
|
|
|
top = 12.dp, |
|
|
|
|
bottom = 12.dp, |
|
|
|
|
start = 16.dp, |
|
|
|
|
) |
|
|
|
|
.height(IntrinsicSize.Min), |
|
|
|
|
) { |
|
|
|
|
Avatar( |
|
|
|
|
avatarData = roomDescription.avatarData, |
|
|
|
@ -218,8 +259,8 @@ private fun RoomDirectoryRoomRow(
@@ -218,8 +259,8 @@ private fun RoomDirectoryRoomRow(
|
|
|
|
|
) |
|
|
|
|
Column( |
|
|
|
|
modifier = Modifier |
|
|
|
|
.weight(1f) |
|
|
|
|
.padding(start = 16.dp) |
|
|
|
|
.weight(1f) |
|
|
|
|
.padding(start = 16.dp) |
|
|
|
|
) { |
|
|
|
|
Text( |
|
|
|
|
text = roomDescription.name, |
|
|
|
@ -241,8 +282,8 @@ private fun RoomDirectoryRoomRow(
@@ -241,8 +282,8 @@ private fun RoomDirectoryRoomRow(
|
|
|
|
|
text = stringResource(id = CommonStrings.action_join), |
|
|
|
|
color = ElementTheme.colors.textSuccessPrimary, |
|
|
|
|
modifier = Modifier |
|
|
|
|
.align(Alignment.CenterVertically) |
|
|
|
|
.padding(start = 4.dp, end = 12.dp) |
|
|
|
|
.align(Alignment.CenterVertically) |
|
|
|
|
.padding(start = 4.dp, end = 12.dp) |
|
|
|
|
) |
|
|
|
|
} else { |
|
|
|
|
Spacer(modifier = Modifier.width(24.dp)) |
|
|
|
|