PinnedMessagesBannerEvents -> PinnedMessagesBannerEvent

This commit is contained in:
Benoit Marty 2026-01-27 09:59:18 +01:00
parent 4d04808875
commit f237b31db9
7 changed files with 13 additions and 13 deletions

View file

@ -8,6 +8,6 @@
package io.element.android.features.messages.impl.pinned.banner package io.element.android.features.messages.impl.pinned.banner
sealed interface PinnedMessagesBannerEvents { sealed interface PinnedMessagesBannerEvent {
data object MoveToNextPinned : PinnedMessagesBannerEvents data object MoveToNextPinned : PinnedMessagesBannerEvent
} }

View file

@ -58,9 +58,9 @@ class PinnedMessagesBannerPresenter(
}, },
) )
fun handleEvent(event: PinnedMessagesBannerEvents) { fun handleEvent(event: PinnedMessagesBannerEvent) {
when (event) { when (event) {
is PinnedMessagesBannerEvents.MoveToNextPinned -> { is PinnedMessagesBannerEvent.MoveToNextPinned -> {
val loadedCount = pinnedItems.value.dataOrNull().orEmpty().size val loadedCount = pinnedItems.value.dataOrNull().orEmpty().size
currentPinnedMessageIndex = (currentPinnedMessageIndex - 1).mod(loadedCount) currentPinnedMessageIndex = (currentPinnedMessageIndex - 1).mod(loadedCount)
} }
@ -80,7 +80,7 @@ class PinnedMessagesBannerPresenter(
expectedPinnedMessagesCount: Int, expectedPinnedMessagesCount: Int,
pinnedItems: AsyncData<ImmutableList<PinnedMessagesBannerItem>>, pinnedItems: AsyncData<ImmutableList<PinnedMessagesBannerItem>>,
currentPinnedMessageIndex: Int, currentPinnedMessageIndex: Int,
eventSink: (PinnedMessagesBannerEvents) -> Unit eventSink: (PinnedMessagesBannerEvent) -> Unit
): PinnedMessagesBannerState { ): PinnedMessagesBannerState {
return when (pinnedItems) { return when (pinnedItems) {
is AsyncData.Failure, is AsyncData.Uninitialized -> PinnedMessagesBannerState.Hidden is AsyncData.Failure, is AsyncData.Uninitialized -> PinnedMessagesBannerState.Hidden

View file

@ -41,6 +41,6 @@ sealed interface PinnedMessagesBannerState {
val currentPinnedMessage: PinnedMessagesBannerItem, val currentPinnedMessage: PinnedMessagesBannerItem,
val currentPinnedMessageIndex: Int, val currentPinnedMessageIndex: Int,
val loadedPinnedMessagesCount: Int, val loadedPinnedMessagesCount: Int,
val eventSink: (PinnedMessagesBannerEvents) -> Unit val eventSink: (PinnedMessagesBannerEvent) -> Unit
) : Visible ) : Visible
} }

View file

@ -50,7 +50,7 @@ internal fun aLoadedPinnedMessagesBannerState(
eventId = EventId("\$" + Random.nextInt().toString()), eventId = EventId("\$" + Random.nextInt().toString()),
formatted = AnnotatedString(message) formatted = AnnotatedString(message)
), ),
eventSink: (PinnedMessagesBannerEvents) -> Unit = {} eventSink: (PinnedMessagesBannerEvent) -> Unit = {}
) = PinnedMessagesBannerState.Loaded( ) = PinnedMessagesBannerState.Loaded(
currentPinnedMessage = currentPinnedMessage, currentPinnedMessage = currentPinnedMessage,
currentPinnedMessageIndex = currentPinnedMessageIndex, currentPinnedMessageIndex = currentPinnedMessageIndex,

View file

@ -96,7 +96,7 @@ private fun PinnedMessagesBannerRow(
if (state is PinnedMessagesBannerState.Loaded) { if (state is PinnedMessagesBannerState.Loaded) {
analyticsService.captureInteraction(Interaction.Name.PinnedMessageBannerClick) analyticsService.captureInteraction(Interaction.Name.PinnedMessageBannerClick)
onClick(state.currentPinnedMessage.eventId) onClick(state.currentPinnedMessage.eventId)
state.eventSink(PinnedMessagesBannerEvents.MoveToNextPinned) state.eventSink(PinnedMessagesBannerEvent.MoveToNextPinned)
} }
}, },
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,

View file

@ -127,7 +127,7 @@ class PinnedMessagesBannerPresenterTest {
assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(1) assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(1)
assertThat(loadedState.loadedPinnedMessagesCount).isEqualTo(2) assertThat(loadedState.loadedPinnedMessagesCount).isEqualTo(2)
assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent2.toString()) assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent2.toString())
loadedState.eventSink(PinnedMessagesBannerEvents.MoveToNextPinned) loadedState.eventSink(PinnedMessagesBannerEvent.MoveToNextPinned)
} }
awaitItem().also { loadedState -> awaitItem().also { loadedState ->
@ -135,7 +135,7 @@ class PinnedMessagesBannerPresenterTest {
assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(0) assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(0)
assertThat(loadedState.loadedPinnedMessagesCount).isEqualTo(2) assertThat(loadedState.loadedPinnedMessagesCount).isEqualTo(2)
assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent1.toString()) assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent1.toString())
loadedState.eventSink(PinnedMessagesBannerEvents.MoveToNextPinned) loadedState.eventSink(PinnedMessagesBannerEvent.MoveToNextPinned)
} }
awaitItem().also { loadedState -> awaitItem().also { loadedState ->

View file

@ -33,7 +33,7 @@ class PinnedMessagesBannerViewTest {
@Test @Test
fun `clicking on the banner invoke expected callback`() { fun `clicking on the banner invoke expected callback`() {
val eventsRecorder = EventsRecorder<PinnedMessagesBannerEvents>() val eventsRecorder = EventsRecorder<PinnedMessagesBannerEvent>()
val state = aLoadedPinnedMessagesBannerState( val state = aLoadedPinnedMessagesBannerState(
eventSink = eventsRecorder eventSink = eventsRecorder
) )
@ -44,13 +44,13 @@ class PinnedMessagesBannerViewTest {
onClick = callback onClick = callback
) )
rule.onRoot().performClick() rule.onRoot().performClick()
eventsRecorder.assertSingle(PinnedMessagesBannerEvents.MoveToNextPinned) eventsRecorder.assertSingle(PinnedMessagesBannerEvent.MoveToNextPinned)
} }
} }
@Test @Test
fun `clicking on view all emit the expected event`() { fun `clicking on view all emit the expected event`() {
val eventsRecorder = EventsRecorder<PinnedMessagesBannerEvents>(expectEvents = true) val eventsRecorder = EventsRecorder<PinnedMessagesBannerEvent>(expectEvents = true)
val state = aLoadedPinnedMessagesBannerState( val state = aLoadedPinnedMessagesBannerState(
eventSink = eventsRecorder eventSink = eventsRecorder
) )