change(room members): add reason to unban
This commit is contained in:
parent
1d72057391
commit
8d76dd9161
5 changed files with 17 additions and 10 deletions
|
|
@ -12,6 +12,6 @@ import io.element.android.features.roommembermoderation.api.RoomMemberModeration
|
|||
sealed interface InternalRoomMemberModerationEvents : RoomMemberModerationEvents {
|
||||
data class DoKickUser(val reason: String) : InternalRoomMemberModerationEvents
|
||||
data class DoBanUser(val reason: String) : InternalRoomMemberModerationEvents
|
||||
data object DoUnbanUser : InternalRoomMemberModerationEvents
|
||||
data class DoUnbanUser(val reason: String) : InternalRoomMemberModerationEvents
|
||||
data object Reset : InternalRoomMemberModerationEvents
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ class RoomMemberModerationPresenter(
|
|||
}
|
||||
is InternalRoomMemberModerationEvents.DoUnbanUser -> {
|
||||
selectedUser?.let {
|
||||
coroutineScope.unbanUser(it.userId, unbanUserAsyncAction)
|
||||
coroutineScope.unbanUser(it.userId, event.reason, unbanUserAsyncAction)
|
||||
}
|
||||
selectedUser = null
|
||||
}
|
||||
|
|
@ -197,10 +197,14 @@ class RoomMemberModerationPresenter(
|
|||
|
||||
private fun CoroutineScope.unbanUser(
|
||||
userId: UserId,
|
||||
reason: String,
|
||||
unbanUserAction: MutableState<AsyncAction<Unit>>,
|
||||
) = runActionAndWaitForMembershipChange(unbanUserAction) {
|
||||
analyticsService.capture(RoomModeration(RoomModeration.Action.UnbanMember))
|
||||
room.unbanUser(userId = userId)
|
||||
room.unbanUser(
|
||||
userId = userId,
|
||||
reason = reason.takeIf { it.isNotBlank() },
|
||||
)
|
||||
}
|
||||
|
||||
private fun <T> CoroutineScope.runActionAndWaitForMembershipChange(
|
||||
|
|
|
|||
|
|
@ -166,18 +166,21 @@ private fun RoomMemberAsyncActions(
|
|||
}
|
||||
when (val action = state.unbanUserAsyncAction) {
|
||||
is AsyncAction.Confirming -> {
|
||||
ConfirmationDialog(
|
||||
TextFieldDialog(
|
||||
title = stringResource(R.string.screen_bottom_sheet_manage_room_member_unban_member_confirmation_title),
|
||||
content = stringResource(R.string.screen_bottom_sheet_manage_room_member_unban_member_confirmation_description),
|
||||
submitText = stringResource(R.string.screen_bottom_sheet_manage_room_member_unban_member_confirmation_action),
|
||||
onSubmitClick = {
|
||||
onSubmit = { reason ->
|
||||
val userDisplayName = selectedUser?.getBestName().orEmpty()
|
||||
asyncIndicatorState.enqueue {
|
||||
AsyncIndicator.Loading(text = stringResource(R.string.screen_bottom_sheet_manage_room_member_unbanning_user, userDisplayName))
|
||||
}
|
||||
state.eventSink(InternalRoomMemberModerationEvents.DoUnbanUser)
|
||||
state.eventSink(InternalRoomMemberModerationEvents.DoUnbanUser(reason = reason))
|
||||
},
|
||||
onDismiss = { state.eventSink(InternalRoomMemberModerationEvents.Reset) },
|
||||
onDismissRequest = { state.eventSink(InternalRoomMemberModerationEvents.Reset) },
|
||||
placeholder = stringResource(id = CommonStrings.common_reason),
|
||||
label = stringResource(id = CommonStrings.common_reason),
|
||||
content = stringResource(R.string.screen_bottom_sheet_manage_room_member_unban_member_confirmation_description),
|
||||
value = "",
|
||||
)
|
||||
}
|
||||
is AsyncAction.Failure -> {
|
||||
|
|
|
|||
|
|
@ -290,7 +290,7 @@ class RoomMemberModerationPresenterTest {
|
|||
)
|
||||
)
|
||||
skipItems(2)
|
||||
initialState.eventSink(InternalRoomMemberModerationEvents.DoUnbanUser)
|
||||
initialState.eventSink(InternalRoomMemberModerationEvents.DoUnbanUser("Reason"))
|
||||
skipItems(1)
|
||||
val loadingState = awaitState()
|
||||
assertThat(loadingState.unbanUserAsyncAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ class RoomMemberModerationViewTest {
|
|||
),
|
||||
)
|
||||
rule.pressTag(TestTags.dialogPositive.value)
|
||||
eventsRecorder.assertSingle(InternalRoomMemberModerationEvents.DoUnbanUser)
|
||||
eventsRecorder.assertSingle(InternalRoomMemberModerationEvents.DoUnbanUser(""))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue