ReportMessageEvents -> ReportMessageEvent

This commit is contained in:
Benoit Marty 2026-01-27 10:00:44 +01:00
parent e2f281b248
commit 60b261cd61
5 changed files with 23 additions and 23 deletions

View file

@ -8,9 +8,9 @@
package io.element.android.features.messages.impl.report package io.element.android.features.messages.impl.report
sealed interface ReportMessageEvents { sealed interface ReportMessageEvent {
data class UpdateReason(val reason: String) : ReportMessageEvents data class UpdateReason(val reason: String) : ReportMessageEvent
data object ToggleBlockUser : ReportMessageEvents data object ToggleBlockUser : ReportMessageEvent
data object Report : ReportMessageEvents data object Report : ReportMessageEvent
data object ClearError : ReportMessageEvents data object ClearError : ReportMessageEvent
} }

View file

@ -54,12 +54,12 @@ class ReportMessagePresenter(
var blockUser by rememberSaveable { mutableStateOf(false) } var blockUser by rememberSaveable { mutableStateOf(false) }
var result: MutableState<AsyncAction<Unit>> = remember { mutableStateOf(AsyncAction.Uninitialized) } var result: MutableState<AsyncAction<Unit>> = remember { mutableStateOf(AsyncAction.Uninitialized) }
fun handleEvent(event: ReportMessageEvents) { fun handleEvent(event: ReportMessageEvent) {
when (event) { when (event) {
is ReportMessageEvents.UpdateReason -> reason = event.reason is ReportMessageEvent.UpdateReason -> reason = event.reason
ReportMessageEvents.ToggleBlockUser -> blockUser = !blockUser ReportMessageEvent.ToggleBlockUser -> blockUser = !blockUser
ReportMessageEvents.Report -> coroutineScope.report(inputs.eventId, inputs.senderId, reason, blockUser, result) ReportMessageEvent.Report -> coroutineScope.report(inputs.eventId, inputs.senderId, reason, blockUser, result)
ReportMessageEvents.ClearError -> result.value = AsyncAction.Uninitialized ReportMessageEvent.ClearError -> result.value = AsyncAction.Uninitialized
} }
} }

View file

@ -14,5 +14,5 @@ data class ReportMessageState(
val reason: String, val reason: String,
val blockUser: Boolean, val blockUser: Boolean,
val result: AsyncAction<Unit>, val result: AsyncAction<Unit>,
val eventSink: (ReportMessageEvents) -> Unit val eventSink: (ReportMessageEvent) -> Unit
) )

View file

@ -57,7 +57,7 @@ fun ReportMessageView(
progressDialog = {}, progressDialog = {},
onSuccess = { onBackClick() }, onSuccess = { onBackClick() },
errorMessage = { stringResource(CommonStrings.error_unknown) }, errorMessage = { stringResource(CommonStrings.error_unknown) },
onErrorDismiss = { state.eventSink(ReportMessageEvents.ClearError) } onErrorDismiss = { state.eventSink(ReportMessageEvent.ClearError) }
) )
Scaffold( Scaffold(
@ -84,7 +84,7 @@ fun ReportMessageView(
TextField( TextField(
value = state.reason, value = state.reason,
onValueChange = { state.eventSink(ReportMessageEvents.UpdateReason(it)) }, onValueChange = { state.eventSink(ReportMessageEvent.UpdateReason(it)) },
placeholder = stringResource(R.string.screen_report_content_hint), placeholder = stringResource(R.string.screen_report_content_hint),
minLines = 3, minLines = 3,
enabled = !isSending, enabled = !isSending,
@ -113,7 +113,7 @@ fun ReportMessageView(
Switch( Switch(
enabled = !isSending, enabled = !isSending,
checked = state.blockUser, checked = state.blockUser,
onCheckedChange = { state.eventSink(ReportMessageEvents.ToggleBlockUser) }, onCheckedChange = { state.eventSink(ReportMessageEvent.ToggleBlockUser) },
) )
} }
@ -125,7 +125,7 @@ fun ReportMessageView(
showProgress = isSending, showProgress = isSending,
onClick = { onClick = {
focusManager.clearFocus(force = true) focusManager.clearFocus(force = true)
state.eventSink(ReportMessageEvents.Report) state.eventSink(ReportMessageEvent.Report)
}, },
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()

View file

@ -51,7 +51,7 @@ class ReportMessagePresenterTest {
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
val reason = "This user is making the chat very toxic." val reason = "This user is making the chat very toxic."
initialState.eventSink(ReportMessageEvents.UpdateReason(reason)) initialState.eventSink(ReportMessageEvent.UpdateReason(reason))
assertThat(awaitItem().reason).isEqualTo(reason) assertThat(awaitItem().reason).isEqualTo(reason)
} }
@ -64,11 +64,11 @@ class ReportMessagePresenterTest {
presenter.present() presenter.present()
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(ReportMessageEvents.ToggleBlockUser) initialState.eventSink(ReportMessageEvent.ToggleBlockUser)
assertThat(awaitItem().blockUser).isTrue() assertThat(awaitItem().blockUser).isTrue()
initialState.eventSink(ReportMessageEvents.ToggleBlockUser) initialState.eventSink(ReportMessageEvent.ToggleBlockUser)
assertThat(awaitItem().blockUser).isFalse() assertThat(awaitItem().blockUser).isFalse()
} }
@ -87,9 +87,9 @@ class ReportMessagePresenterTest {
presenter.present() presenter.present()
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(ReportMessageEvents.ToggleBlockUser) initialState.eventSink(ReportMessageEvent.ToggleBlockUser)
skipItems(1) skipItems(1)
initialState.eventSink(ReportMessageEvents.Report) initialState.eventSink(ReportMessageEvent.Report)
assertThat(awaitItem().result).isInstanceOf(AsyncAction.Loading::class.java) assertThat(awaitItem().result).isInstanceOf(AsyncAction.Loading::class.java)
assertThat(awaitItem().result).isInstanceOf(AsyncAction.Success::class.java) assertThat(awaitItem().result).isInstanceOf(AsyncAction.Success::class.java)
reportContentResult.assertions().isCalledOnce() reportContentResult.assertions().isCalledOnce()
@ -109,7 +109,7 @@ class ReportMessagePresenterTest {
presenter.present() presenter.present()
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(ReportMessageEvents.Report) initialState.eventSink(ReportMessageEvent.Report)
assertThat(awaitItem().result).isInstanceOf(AsyncAction.Loading::class.java) assertThat(awaitItem().result).isInstanceOf(AsyncAction.Loading::class.java)
assertThat(awaitItem().result).isInstanceOf(AsyncAction.Success::class.java) assertThat(awaitItem().result).isInstanceOf(AsyncAction.Success::class.java)
reportContentResult.assertions().isCalledOnce() reportContentResult.assertions().isCalledOnce()
@ -129,13 +129,13 @@ class ReportMessagePresenterTest {
presenter.present() presenter.present()
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(ReportMessageEvents.Report) initialState.eventSink(ReportMessageEvent.Report)
assertThat(awaitItem().result).isInstanceOf(AsyncAction.Loading::class.java) assertThat(awaitItem().result).isInstanceOf(AsyncAction.Loading::class.java)
val resultState = awaitItem() val resultState = awaitItem()
assertThat(resultState.result).isInstanceOf(AsyncAction.Failure::class.java) assertThat(resultState.result).isInstanceOf(AsyncAction.Failure::class.java)
reportContentResult.assertions().isCalledOnce() reportContentResult.assertions().isCalledOnce()
resultState.eventSink(ReportMessageEvents.ClearError) resultState.eventSink(ReportMessageEvent.ClearError)
assertThat(awaitItem().result).isInstanceOf(AsyncAction.Uninitialized::class.java) assertThat(awaitItem().result).isInstanceOf(AsyncAction.Uninitialized::class.java)
} }
} }