PinnedMessagesBannerEvents -> PinnedMessagesBannerEvent
This commit is contained in:
parent
4d04808875
commit
f237b31db9
7 changed files with 13 additions and 13 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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 ->
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue