ReadReceiptBottomSheetEvents -> ReadReceiptBottomSheetEvent

This commit is contained in:
Benoit Marty 2026-01-27 10:03:28 +01:00
parent dd7c9dee78
commit c74169d893
8 changed files with 19 additions and 19 deletions

View file

@ -32,7 +32,7 @@ import io.element.android.features.messages.impl.timeline.components.customreact
import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionState import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionState
import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvent import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvent
import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryState import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryState
import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvent
import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetState import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetState
import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent
@ -206,7 +206,7 @@ fun aCustomReactionState(
fun aReadReceiptBottomSheetState( fun aReadReceiptBottomSheetState(
selectedEvent: TimelineItem.Event? = null, selectedEvent: TimelineItem.Event? = null,
eventSink: (ReadReceiptBottomSheetEvents) -> Unit = {}, eventSink: (ReadReceiptBottomSheetEvent) -> Unit = {},
) = ReadReceiptBottomSheetState( ) = ReadReceiptBottomSheetState(
selectedEvent = selectedEvent, selectedEvent = selectedEvent,
eventSink = eventSink, eventSink = eventSink,

View file

@ -79,7 +79,7 @@ import io.element.android.features.messages.impl.timeline.components.customreact
import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvent import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvent
import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryView import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryView
import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheet import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheet
import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvent
import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.features.messages.impl.timeline.model.TimelineItemGroupPosition import io.element.android.features.messages.impl.timeline.model.TimelineItemGroupPosition
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemStateEventContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemStateEventContent
@ -259,7 +259,7 @@ fun MessagesView(
onReactionLongClick = ::onEmojiReactionLongClick, onReactionLongClick = ::onEmojiReactionLongClick,
onMoreReactionsClick = ::onMoreReactionsClick, onMoreReactionsClick = ::onMoreReactionsClick,
onReadReceiptClick = { event -> onReadReceiptClick = { event ->
state.readReceiptBottomSheetState.eventSink(ReadReceiptBottomSheetEvents.EventSelected(event)) state.readReceiptBottomSheetState.eventSink(ReadReceiptBottomSheetEvent.EventSelected(event))
}, },
onSendLocationClick = onSendLocationClick, onSendLocationClick = onSendLocationClick,
onCreatePollClick = onCreatePollClick, onCreatePollClick = onCreatePollClick,

View file

@ -55,7 +55,7 @@ internal fun ReadReceiptBottomSheet(
onDismissRequest = { onDismissRequest = {
coroutineScope.launch { coroutineScope.launch {
sheetState.hide() sheetState.hide()
state.eventSink(ReadReceiptBottomSheetEvents.Dismiss) state.eventSink(ReadReceiptBottomSheetEvent.Dismiss)
} }
} }
) { ) {
@ -64,7 +64,7 @@ internal fun ReadReceiptBottomSheet(
onUserDataClick = { onUserDataClick = {
coroutineScope.launch { coroutineScope.launch {
sheetState.hide() sheetState.hide()
state.eventSink(ReadReceiptBottomSheetEvents.Dismiss) state.eventSink(ReadReceiptBottomSheetEvent.Dismiss)
onUserDataClick.invoke(it) onUserDataClick.invoke(it)
} }
}, },

View file

@ -10,7 +10,7 @@ package io.element.android.features.messages.impl.timeline.components.receipt.bo
import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItem
sealed interface ReadReceiptBottomSheetEvents { sealed interface ReadReceiptBottomSheetEvent {
data class EventSelected(val event: TimelineItem.Event) : ReadReceiptBottomSheetEvents data class EventSelected(val event: TimelineItem.Event) : ReadReceiptBottomSheetEvent
data object Dismiss : ReadReceiptBottomSheetEvents data object Dismiss : ReadReceiptBottomSheetEvent
} }

View file

@ -23,13 +23,13 @@ class ReadReceiptBottomSheetPresenter : Presenter<ReadReceiptBottomSheetState> {
override fun present(): ReadReceiptBottomSheetState { override fun present(): ReadReceiptBottomSheetState {
var selectedEvent: TimelineItem.Event? by remember { mutableStateOf(null) } var selectedEvent: TimelineItem.Event? by remember { mutableStateOf(null) }
fun handleEvent(event: ReadReceiptBottomSheetEvents) { fun handleEvent(event: ReadReceiptBottomSheetEvent) {
@Suppress("LiftReturnOrAssignment") @Suppress("LiftReturnOrAssignment")
when (event) { when (event) {
is ReadReceiptBottomSheetEvents.EventSelected -> { is ReadReceiptBottomSheetEvent.EventSelected -> {
selectedEvent = event.event selectedEvent = event.event
} }
ReadReceiptBottomSheetEvents.Dismiss -> { ReadReceiptBottomSheetEvent.Dismiss -> {
selectedEvent = null selectedEvent = null
} }
} }

View file

@ -12,5 +12,5 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItem
data class ReadReceiptBottomSheetState( data class ReadReceiptBottomSheetState(
val selectedEvent: TimelineItem.Event?, val selectedEvent: TimelineItem.Event?,
val eventSink: (ReadReceiptBottomSheetEvents) -> Unit, val eventSink: (ReadReceiptBottomSheetEvent) -> Unit,
) )

View file

@ -50,7 +50,7 @@ import io.element.android.features.messages.impl.timeline.components.customreact
import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionState import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionState
import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvent import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvent
import io.element.android.features.messages.impl.timeline.components.receipt.aReadReceiptData import io.element.android.features.messages.impl.timeline.components.receipt.aReadReceiptData
import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvent
import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
@ -216,7 +216,7 @@ class MessagesViewTest {
@Test @Test
@Config(qualifiers = "h1024dp") @Config(qualifiers = "h1024dp")
fun `clicking on a read receipt list emits the expected Event`() { fun `clicking on a read receipt list emits the expected Event`() {
val eventsRecorder = EventsRecorder<ReadReceiptBottomSheetEvents>() val eventsRecorder = EventsRecorder<ReadReceiptBottomSheetEvent>()
val state = aMessagesState( val state = aMessagesState(
timelineState = aTimelineState( timelineState = aTimelineState(
renderReadReceipts = true, renderReadReceipts = true,
@ -239,7 +239,7 @@ class MessagesViewTest {
state = state, state = state,
) )
rule.onNodeWithTag(TestTags.messageReadReceipts.value, useUnmergedTree = true).performClick() rule.onNodeWithTag(TestTags.messageReadReceipts.value, useUnmergedTree = true).performClick()
eventsRecorder.assertSingle(ReadReceiptBottomSheetEvents.EventSelected(timelineItem)) eventsRecorder.assertSingle(ReadReceiptBottomSheetEvent.EventSelected(timelineItem))
} }
@Test @Test

View file

@ -30,7 +30,7 @@ class ReadReceiptBottomSheetPresenterTest {
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
val selectedEvent = aTimelineItemEvent() val selectedEvent = aTimelineItemEvent()
initialState.eventSink(ReadReceiptBottomSheetEvents.EventSelected(selectedEvent)) initialState.eventSink(ReadReceiptBottomSheetEvent.EventSelected(selectedEvent))
assertThat(awaitItem().selectedEvent).isSameInstanceAs(selectedEvent) assertThat(awaitItem().selectedEvent).isSameInstanceAs(selectedEvent)
} }
} }
@ -43,9 +43,9 @@ class ReadReceiptBottomSheetPresenterTest {
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
val selectedEvent = aTimelineItemEvent() val selectedEvent = aTimelineItemEvent()
initialState.eventSink(ReadReceiptBottomSheetEvents.EventSelected(selectedEvent)) initialState.eventSink(ReadReceiptBottomSheetEvent.EventSelected(selectedEvent))
skipItems(1) skipItems(1)
initialState.eventSink(ReadReceiptBottomSheetEvents.Dismiss) initialState.eventSink(ReadReceiptBottomSheetEvent.Dismiss)
assertThat(awaitItem().selectedEvent).isNull() assertThat(awaitItem().selectedEvent).isNull()
} }
} }