Remove confirmation dialog
This commit is contained in:
@@ -20,7 +20,5 @@ import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||
|
||||
sealed interface CreateRoomRootEvents {
|
||||
object InvitePeople : CreateRoomRootEvents
|
||||
data class SelectUser(val matrixUser: MatrixUser) : CreateRoomRootEvents
|
||||
data class CreateDM(val matrixUser: MatrixUser) : CreateRoomRootEvents
|
||||
object CancelCreateDM : CreateRoomRootEvents
|
||||
data class StartDM(val matrixUser: MatrixUser) : CreateRoomRootEvents
|
||||
}
|
||||
|
||||
@@ -18,13 +18,9 @@ package io.element.android.features.createroom.impl.root
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.MutableState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import io.element.android.features.selectusers.api.SelectUsersEvents
|
||||
import io.element.android.features.selectusers.api.SelectUsersPresenter
|
||||
import io.element.android.features.selectusers.api.SelectUsersPresenterArgs
|
||||
import io.element.android.features.selectusers.api.SelectionMode
|
||||
@@ -52,35 +48,24 @@ class CreateRoomRootPresenter @Inject constructor(
|
||||
val selectUsersState = presenter.present()
|
||||
|
||||
val localCoroutineScope = rememberCoroutineScope()
|
||||
|
||||
var showCreateDmConfirmationDialog by rememberSaveable { mutableStateOf(false) }
|
||||
val startDmAction: MutableState<Async<RoomId>> = remember { mutableStateOf(Async.Uninitialized) }
|
||||
|
||||
fun handleEvents(event: CreateRoomRootEvents) {
|
||||
when (event) {
|
||||
is CreateRoomRootEvents.SelectUser -> {
|
||||
is CreateRoomRootEvents.StartDM -> {
|
||||
val existingDM = matrixClient.findDM(event.matrixUser.id)
|
||||
if (existingDM == null) {
|
||||
showCreateDmConfirmationDialog = true
|
||||
localCoroutineScope.createDM(event.matrixUser, startDmAction)
|
||||
} else {
|
||||
startDmAction.value = Async.Success(existingDM.roomId)
|
||||
}
|
||||
}
|
||||
is CreateRoomRootEvents.CreateDM -> {
|
||||
showCreateDmConfirmationDialog = false
|
||||
localCoroutineScope.createDM(event.matrixUser, startDmAction)
|
||||
}
|
||||
CreateRoomRootEvents.CancelCreateDM -> {
|
||||
showCreateDmConfirmationDialog = false
|
||||
selectUsersState.eventSink(SelectUsersEvents.ClearSelection)
|
||||
}
|
||||
CreateRoomRootEvents.InvitePeople -> Unit // Todo Handle invite people action
|
||||
}
|
||||
}
|
||||
|
||||
return CreateRoomRootState(
|
||||
selectUsersState = selectUsersState,
|
||||
showCreateDmConfirmationDialog = showCreateDmConfirmationDialog,
|
||||
startDmAction = startDmAction.value,
|
||||
eventSink = ::handleEvents,
|
||||
)
|
||||
|
||||
@@ -22,7 +22,6 @@ import io.element.android.libraries.matrix.api.core.RoomId
|
||||
|
||||
data class CreateRoomRootState(
|
||||
val selectUsersState: SelectUsersState,
|
||||
val showCreateDmConfirmationDialog: Boolean,
|
||||
val startDmAction: Async<RoomId>,
|
||||
val eventSink: (CreateRoomRootEvents) -> Unit,
|
||||
)
|
||||
|
||||
@@ -27,7 +27,7 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRoot
|
||||
get() = sequenceOf(
|
||||
aCreateRoomRootState(),
|
||||
aCreateRoomRootState().copy(
|
||||
showCreateDmConfirmationDialog = true,
|
||||
startDmAction = Async.Loading(),
|
||||
selectUsersState = aMatrixUser().let {
|
||||
aSelectUsersState().copy(
|
||||
searchQuery = it.id.value,
|
||||
@@ -36,13 +36,12 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRoot
|
||||
isSearchActive = true,
|
||||
)
|
||||
}
|
||||
),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun aCreateRoomRootState() = CreateRoomRootState(
|
||||
eventSink = {},
|
||||
startDmAction = Async.Uninitialized,
|
||||
showCreateDmConfirmationDialog = false,
|
||||
selectUsersState = aSelectUsersState(),
|
||||
)
|
||||
|
||||
@@ -42,7 +42,6 @@ import io.element.android.features.createroom.impl.R
|
||||
import io.element.android.features.selectusers.api.SelectUsersView
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.designsystem.components.ProgressDialog
|
||||
import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
|
||||
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
|
||||
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
|
||||
import io.element.android.libraries.designsystem.theme.components.CenterAlignedTopAppBar
|
||||
@@ -51,7 +50,6 @@ import io.element.android.libraries.designsystem.theme.components.IconButton
|
||||
import io.element.android.libraries.designsystem.theme.components.Scaffold
|
||||
import io.element.android.libraries.designsystem.theme.components.Text
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.ui.model.getBestName
|
||||
import io.element.android.libraries.designsystem.R as DrawableR
|
||||
import io.element.android.libraries.ui.strings.R as StringR
|
||||
|
||||
@@ -85,7 +83,7 @@ fun CreateRoomRootView(
|
||||
SelectUsersView(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
state = state.selectUsersState,
|
||||
onUserSelected = { state.eventSink(CreateRoomRootEvents.SelectUser(it)) },
|
||||
onUserSelected = { state.eventSink(CreateRoomRootEvents.StartDM(it)) },
|
||||
)
|
||||
|
||||
if (!state.selectUsersState.isSearchActive) {
|
||||
@@ -97,8 +95,6 @@ fun CreateRoomRootView(
|
||||
}
|
||||
}
|
||||
|
||||
CreateDmConfirmationDialog(state)
|
||||
|
||||
if (state.startDmAction is Async.Loading) {
|
||||
ProgressDialog(text = "Creating room...")
|
||||
}
|
||||
@@ -172,26 +168,6 @@ fun CreateRoomActionButton(
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun CreateDmConfirmationDialog(
|
||||
state: CreateRoomRootState,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
if (state.showCreateDmConfirmationDialog) {
|
||||
val selectedUser = state.selectUsersState.selectedUsers.firstOrNull()
|
||||
if (selectedUser != null) {
|
||||
ConfirmationDialog(
|
||||
modifier = modifier,
|
||||
title = "Start chat",
|
||||
content = "You're about starting a chat with ${selectedUser.getBestName()}, do you want to continue?",
|
||||
submitText = stringResource(io.element.android.libraries.ui.strings.R.string.action_continue),
|
||||
onSubmitClicked = { state.eventSink(CreateRoomRootEvents.CreateDM(selectedUser)) },
|
||||
onDismiss = { state.eventSink(CreateRoomRootEvents.CancelCreateDM) },
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun CreateRoomRootViewLightPreview(@PreviewParameter(CreateRoomRootStateProvider::class) state: CreateRoomRootState) =
|
||||
|
||||
@@ -73,7 +73,7 @@ class CreateRoomRootPresenterTests {
|
||||
}.test {
|
||||
val initialState = awaitItem()
|
||||
val matrixUser = MatrixUser(UserId("@name:matrix.org"))
|
||||
initialState.eventSink(CreateRoomRootEvents.SelectUser(matrixUser))
|
||||
initialState.eventSink(CreateRoomRootEvents.StartDM(matrixUser))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,5 @@ sealed interface SelectUsersEvents {
|
||||
data class UpdateSearchQuery(val query: String) : SelectUsersEvents
|
||||
data class AddToSelection(val matrixUser: MatrixUser) : SelectUsersEvents
|
||||
data class RemoveFromSelection(val matrixUser: MatrixUser) : SelectUsersEvents
|
||||
object ClearSelection : SelectUsersEvents
|
||||
data class OnSearchActiveChanged(val active: Boolean) : SelectUsersEvents
|
||||
}
|
||||
|
||||
@@ -79,7 +79,6 @@ class DefaultSelectUsersPresenter @AssistedInject constructor(
|
||||
localCoroutineScope.scrollToFirstSelectedUser(selectedUsersListState)
|
||||
}
|
||||
is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableList()
|
||||
SelectUsersEvents.ClearSelection -> selectedUsers.value = persistentListOf()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user