From 271f7591e3b5fe3054ee3970ab8fbf1f1bf02811 Mon Sep 17 00:00:00 2001 From: Florian Renaud Date: Fri, 10 Mar 2023 01:16:30 +0100 Subject: [PATCH] Handle search result click --- .../createroom/impl/root/CreateRoomRootEvents.kt | 5 ++++- .../createroom/impl/root/CreateRoomRootPresenter.kt | 10 ++++++++-- .../createroom/impl/root/CreateRoomRootView.kt | 11 ++++++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt index 4562dd53de..7b2b42613c 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt @@ -16,8 +16,11 @@ package io.element.android.features.createroom.impl.root +import io.element.android.libraries.matrix.ui.model.MatrixUser + sealed interface CreateRoomRootEvents { - data class UpdateSearchQuery(val query: String): CreateRoomRootEvents + data class UpdateSearchQuery(val query: String) : CreateRoomRootEvents + data class StartDM(val matrixUser: MatrixUser) : CreateRoomRootEvents object CreateRoom : CreateRoomRootEvents object InvitePeople : CreateRoomRootEvents } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt index f3bf0f7664..5da23dc04d 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt @@ -31,6 +31,7 @@ import io.element.android.libraries.matrix.ui.model.MatrixUser import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList +import timber.log.Timber import javax.inject.Inject class CreateRoomRootPresenter @Inject constructor() : Presenter { @@ -44,9 +45,10 @@ class CreateRoomRootPresenter @Inject constructor() : Presenter searchQuery = event.query + is CreateRoomRootEvents.StartDM -> handleStartDM(event.matrixUser) CreateRoomRootEvents.CreateRoom -> Unit // Todo Handle create room action CreateRoomRootEvents.InvitePeople -> Unit // Todo Handle invite people action - is CreateRoomRootEvents.UpdateSearchQuery -> searchQuery = event.query } } @@ -72,10 +74,14 @@ class CreateRoomRootPresenter @Inject constructor() : Presenter()// TODO trigger /search request if (isMatrixId && results.none { it.id.value == query }) { - val getProfileResult: MatrixUser? = null // TODO trigger /profile quest + val getProfileResult: MatrixUser? = null // TODO trigger /profile request val profile = getProfileResult ?: MatrixUser(UserId(query)) results.add(0, profile) } return results.toImmutableList() } + + private fun handleStartDM(matrixUser: MatrixUser) { + Timber.d("handleStartDM: $matrixUser") // Todo handle start DM action + } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt index da60d9ff2b..05e770cf96 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt @@ -89,6 +89,7 @@ fun CreateRoomRootView( active = isSearchActive, onActiveChanged = { isSearchActive = it }, onTextChanged = { state.eventSink(CreateRoomRootEvents.UpdateSearchQuery(it)) }, + onResultSelected = { state.eventSink(CreateRoomRootEvents.StartDM(it)) } ) if (!isSearchActive) { @@ -134,6 +135,7 @@ fun CreateRoomSearchBar( modifier: Modifier = Modifier, onActiveChanged: (Boolean) -> Unit = {}, onTextChanged: (String) -> Unit = {}, + onResultSelected: (MatrixUser) -> Unit = {}, ) { val focusManager = LocalFocusManager.current @@ -181,7 +183,12 @@ fun CreateRoomSearchBar( shape = if (!active) SearchBarDefaults.dockedShape else SearchBarDefaults.fullScreenShape, colors = if (!active) SearchBarDefaults.colors() else SearchBarDefaults.colors(containerColor = Color.Transparent), content = { - results.forEach { CreateRoomSearchResultItem(matrixUser = it) } + results.forEach { + CreateRoomSearchResultItem( + matrixUser = it, + onClick = { onResultSelected(it) } + ) + } }, ) } @@ -210,11 +217,13 @@ fun CreateRoomActionButtonsList( fun CreateRoomSearchResultItem( matrixUser: MatrixUser, modifier: Modifier = Modifier, + onClick: () -> Unit = {}, ) { MatrixUserRow( modifier = modifier.heightIn(min = 56.dp), matrixUser = matrixUser, avatarSize = AvatarSize.SMALL, + onClick = onClick, ) }