Add more previews
This commit is contained in:
parent
31f1953317
commit
46e7a46531
5 changed files with 35 additions and 12 deletions
|
|
@ -23,4 +23,5 @@ sealed interface CreateRoomRootEvents {
|
||||||
data class StartDM(val matrixUser: MatrixUser) : CreateRoomRootEvents
|
data class StartDM(val matrixUser: MatrixUser) : CreateRoomRootEvents
|
||||||
object CreateRoom : CreateRoomRootEvents
|
object CreateRoom : CreateRoomRootEvents
|
||||||
object InvitePeople : CreateRoomRootEvents
|
object InvitePeople : CreateRoomRootEvents
|
||||||
|
data class OnSearchActiveChanged(val active: Boolean) : CreateRoomRootEvents
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ class CreateRoomRootPresenter @Inject constructor() : Presenter<CreateRoomRootSt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): CreateRoomRootState {
|
override fun present(): CreateRoomRootState {
|
||||||
|
var isSearchActive by rememberSaveable { mutableStateOf(false) }
|
||||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||||
val searchResults: MutableState<ImmutableList<MatrixUser>> = remember {
|
val searchResults: MutableState<ImmutableList<MatrixUser>> = remember {
|
||||||
mutableStateOf(persistentListOf())
|
mutableStateOf(persistentListOf())
|
||||||
|
|
@ -45,6 +46,7 @@ class CreateRoomRootPresenter @Inject constructor() : Presenter<CreateRoomRootSt
|
||||||
|
|
||||||
fun handleEvents(event: CreateRoomRootEvents) {
|
fun handleEvents(event: CreateRoomRootEvents) {
|
||||||
when (event) {
|
when (event) {
|
||||||
|
is CreateRoomRootEvents.OnSearchActiveChanged -> isSearchActive = event.active
|
||||||
is CreateRoomRootEvents.UpdateSearchQuery -> searchQuery = event.query
|
is CreateRoomRootEvents.UpdateSearchQuery -> searchQuery = event.query
|
||||||
is CreateRoomRootEvents.StartDM -> handleStartDM(event.matrixUser)
|
is CreateRoomRootEvents.StartDM -> handleStartDM(event.matrixUser)
|
||||||
CreateRoomRootEvents.CreateRoom -> Unit // Todo Handle create room action
|
CreateRoomRootEvents.CreateRoom -> Unit // Todo Handle create room action
|
||||||
|
|
@ -65,6 +67,7 @@ class CreateRoomRootPresenter @Inject constructor() : Presenter<CreateRoomRootSt
|
||||||
|
|
||||||
return CreateRoomRootState(
|
return CreateRoomRootState(
|
||||||
eventSink = ::handleEvents,
|
eventSink = ::handleEvents,
|
||||||
|
isSearchActive = isSearchActive,
|
||||||
searchQuery = searchQuery,
|
searchQuery = searchQuery,
|
||||||
searchResults = searchResults.value,
|
searchResults = searchResults.value,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import kotlinx.collections.immutable.ImmutableList
|
||||||
// Do not use default value, so no member get forgotten in the presenters.
|
// Do not use default value, so no member get forgotten in the presenters.
|
||||||
data class CreateRoomRootState(
|
data class CreateRoomRootState(
|
||||||
val eventSink: (CreateRoomRootEvents) -> Unit,
|
val eventSink: (CreateRoomRootEvents) -> Unit,
|
||||||
|
val isSearchActive: Boolean,
|
||||||
val searchQuery: String,
|
val searchQuery: String,
|
||||||
val searchResults: ImmutableList<MatrixUser>,
|
val searchResults: ImmutableList<MatrixUser>,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -25,12 +25,35 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRoot
|
||||||
override val values: Sequence<CreateRoomRootState>
|
override val values: Sequence<CreateRoomRootState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aCreateRoomRootState(),
|
aCreateRoomRootState(),
|
||||||
// Add other state here
|
aCreateRoomRootState().copy(isSearchActive = true),
|
||||||
|
aCreateRoomRootState().copy(isSearchActive = true, searchQuery = "someone"),
|
||||||
|
aCreateRoomRootState().copy(
|
||||||
|
isSearchActive = true,
|
||||||
|
searchQuery = "@someone:matrix.org",
|
||||||
|
searchResults = persistentListOf(
|
||||||
|
MatrixUser(id = UserId("@someone:matrix.org")),
|
||||||
|
MatrixUser(id = UserId("@someone:matrix.org"), username = "someone"),
|
||||||
|
MatrixUser(
|
||||||
|
id = UserId("@someone_with_a_very_long_matrix_identifier:a_very_long_domain.org"),
|
||||||
|
username = "hey, I am someone with a very long display name"
|
||||||
|
),
|
||||||
|
MatrixUser(id = UserId("@someone_2:matrix.org"), username = "someone 2"),
|
||||||
|
MatrixUser(id = UserId("@someone_3:matrix.org"), username = "someone 3"),
|
||||||
|
MatrixUser(id = UserId("@someone_4:matrix.org"), username = "someone 4"),
|
||||||
|
MatrixUser(id = UserId("@someone_5:matrix.org"), username = "someone 5"),
|
||||||
|
MatrixUser(id = UserId("@someone_6:matrix.org"), username = "someone 6"),
|
||||||
|
MatrixUser(id = UserId("@someone_7:matrix.org"), username = "someone 7"),
|
||||||
|
MatrixUser(id = UserId("@someone_8:matrix.org"), username = "someone 8"),
|
||||||
|
MatrixUser(id = UserId("@someone_9:matrix.org"), username = "someone 9"),
|
||||||
|
MatrixUser(id = UserId("@someone_10:matrix.org"), username = "someone 10"),
|
||||||
|
)
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun aCreateRoomRootState() = CreateRoomRootState(
|
fun aCreateRoomRootState() = CreateRoomRootState(
|
||||||
eventSink = {},
|
eventSink = {},
|
||||||
searchQuery = "@someone:example.org",
|
isSearchActive = false,
|
||||||
searchResults = persistentListOf(MatrixUser(UserId("@someone:example.org"))),
|
searchQuery = "",
|
||||||
|
searchResults = persistentListOf(),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,6 @@ import androidx.compose.material.icons.filled.Search
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.SearchBarDefaults
|
import androidx.compose.material3.SearchBarDefaults
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.alpha
|
import androidx.compose.ui.draw.alpha
|
||||||
|
|
@ -70,11 +66,10 @@ fun CreateRoomRootView(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onClosePressed: () -> Unit = {},
|
onClosePressed: () -> Unit = {},
|
||||||
) {
|
) {
|
||||||
var isSearchActive by rememberSaveable { mutableStateOf(false) }
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = modifier.fillMaxWidth(),
|
modifier = modifier.fillMaxWidth(),
|
||||||
topBar = {
|
topBar = {
|
||||||
if (!isSearchActive) {
|
if (!state.isSearchActive) {
|
||||||
CreateRoomRootViewTopBar(onClosePressed = onClosePressed)
|
CreateRoomRootViewTopBar(onClosePressed = onClosePressed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -88,13 +83,13 @@ fun CreateRoomRootView(
|
||||||
query = state.searchQuery,
|
query = state.searchQuery,
|
||||||
placeHolderTitle = stringResource(StringR.string.search_for_someone),
|
placeHolderTitle = stringResource(StringR.string.search_for_someone),
|
||||||
results = state.searchResults,
|
results = state.searchResults,
|
||||||
active = isSearchActive,
|
active = state.isSearchActive,
|
||||||
onActiveChanged = { isSearchActive = it },
|
onActiveChanged = { state.eventSink(CreateRoomRootEvents.OnSearchActiveChanged(it)) },
|
||||||
onTextChanged = { state.eventSink(CreateRoomRootEvents.UpdateSearchQuery(it)) },
|
onTextChanged = { state.eventSink(CreateRoomRootEvents.UpdateSearchQuery(it)) },
|
||||||
onResultSelected = { state.eventSink(CreateRoomRootEvents.StartDM(it)) }
|
onResultSelected = { state.eventSink(CreateRoomRootEvents.StartDM(it)) }
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!isSearchActive) {
|
if (!state.isSearchActive) {
|
||||||
CreateRoomActionButtonsList(
|
CreateRoomActionButtonsList(
|
||||||
onNewRoomClicked = { state.eventSink(CreateRoomRootEvents.CreateRoom) },
|
onNewRoomClicked = { state.eventSink(CreateRoomRootEvents.CreateRoom) },
|
||||||
onInvitePeopleClicked = { state.eventSink(CreateRoomRootEvents.InvitePeople) },
|
onInvitePeopleClicked = { state.eventSink(CreateRoomRootEvents.InvitePeople) },
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue