change(room members): add reason to unban
This commit is contained in:
parent
e47c0b32d7
commit
5f2453b128
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 {
|
sealed interface InternalRoomMemberModerationEvents : RoomMemberModerationEvents {
|
||||||
data class DoKickUser(val reason: String) : InternalRoomMemberModerationEvents
|
data class DoKickUser(val reason: String) : InternalRoomMemberModerationEvents
|
||||||
data class DoBanUser(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
|
data object Reset : InternalRoomMemberModerationEvents
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ class RoomMemberModerationPresenter(
|
||||||
}
|
}
|
||||||
is InternalRoomMemberModerationEvents.DoUnbanUser -> {
|
is InternalRoomMemberModerationEvents.DoUnbanUser -> {
|
||||||
selectedUser?.let {
|
selectedUser?.let {
|
||||||
coroutineScope.unbanUser(it.userId, unbanUserAsyncAction)
|
coroutineScope.unbanUser(it.userId, event.reason, unbanUserAsyncAction)
|
||||||
}
|
}
|
||||||
selectedUser = null
|
selectedUser = null
|
||||||
}
|
}
|
||||||
|
|
@ -197,10 +197,14 @@ class RoomMemberModerationPresenter(
|
||||||
|
|
||||||
private fun CoroutineScope.unbanUser(
|
private fun CoroutineScope.unbanUser(
|
||||||
userId: UserId,
|
userId: UserId,
|
||||||
|
reason: String,
|
||||||
unbanUserAction: MutableState<AsyncAction<Unit>>,
|
unbanUserAction: MutableState<AsyncAction<Unit>>,
|
||||||
) = runActionAndWaitForMembershipChange(unbanUserAction) {
|
) = runActionAndWaitForMembershipChange(unbanUserAction) {
|
||||||
analyticsService.capture(RoomModeration(RoomModeration.Action.UnbanMember))
|
analyticsService.capture(RoomModeration(RoomModeration.Action.UnbanMember))
|
||||||
room.unbanUser(userId = userId)
|
room.unbanUser(
|
||||||
|
userId = userId,
|
||||||
|
reason = reason.takeIf { it.isNotBlank() },
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <T> CoroutineScope.runActionAndWaitForMembershipChange(
|
private fun <T> CoroutineScope.runActionAndWaitForMembershipChange(
|
||||||
|
|
|
||||||
|
|
@ -166,18 +166,21 @@ private fun RoomMemberAsyncActions(
|
||||||
}
|
}
|
||||||
when (val action = state.unbanUserAsyncAction) {
|
when (val action = state.unbanUserAsyncAction) {
|
||||||
is AsyncAction.Confirming -> {
|
is AsyncAction.Confirming -> {
|
||||||
ConfirmationDialog(
|
TextFieldDialog(
|
||||||
title = stringResource(R.string.screen_bottom_sheet_manage_room_member_unban_member_confirmation_title),
|
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),
|
submitText = stringResource(R.string.screen_bottom_sheet_manage_room_member_unban_member_confirmation_action),
|
||||||
onSubmitClick = {
|
onSubmit = { reason ->
|
||||||
val userDisplayName = selectedUser?.getBestName().orEmpty()
|
val userDisplayName = selectedUser?.getBestName().orEmpty()
|
||||||
asyncIndicatorState.enqueue {
|
asyncIndicatorState.enqueue {
|
||||||
AsyncIndicator.Loading(text = stringResource(R.string.screen_bottom_sheet_manage_room_member_unbanning_user, userDisplayName))
|
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 -> {
|
is AsyncAction.Failure -> {
|
||||||
|
|
|
||||||
|
|
@ -290,7 +290,7 @@ class RoomMemberModerationPresenterTest {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
skipItems(2)
|
skipItems(2)
|
||||||
initialState.eventSink(InternalRoomMemberModerationEvents.DoUnbanUser)
|
initialState.eventSink(InternalRoomMemberModerationEvents.DoUnbanUser("Reason"))
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
val loadingState = awaitState()
|
val loadingState = awaitState()
|
||||||
assertThat(loadingState.unbanUserAsyncAction).isInstanceOf(AsyncAction.Loading::class.java)
|
assertThat(loadingState.unbanUserAsyncAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
|
|
|
||||||
|
|
@ -181,7 +181,7 @@ class RoomMemberModerationViewTest {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
rule.pressTag(TestTags.dialogPositive.value)
|
rule.pressTag(TestTags.dialogPositive.value)
|
||||||
eventsRecorder.assertSingle(InternalRoomMemberModerationEvents.DoUnbanUser)
|
eventsRecorder.assertSingle(InternalRoomMemberModerationEvents.DoUnbanUser(""))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue