This commit is contained in:
David Langley 2023-08-28 18:11:17 +01:00
parent 59d7947cc0
commit 3cf73cf536
5 changed files with 13 additions and 13 deletions

View file

@ -16,9 +16,7 @@
package io.element.android.features.messages.impl package io.element.android.features.messages.impl
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.emojibasebindings.EmojibaseDatasource
import io.element.android.features.messages.impl.actionlist.anActionListState import io.element.android.features.messages.impl.actionlist.anActionListState
import io.element.android.features.messages.impl.messagecomposer.aMessageComposerState import io.element.android.features.messages.impl.messagecomposer.aMessageComposerState
import io.element.android.features.messages.impl.timeline.aTimelineItemList import io.element.android.features.messages.impl.timeline.aTimelineItemList

View file

@ -57,9 +57,9 @@ fun CustomReactionBottomSheet(
) { ) {
EmojiPicker( EmojiPicker(
onEmojiSelected = ::onEmojiSelectedDismiss, onEmojiSelected = ::onEmojiSelectedDismiss,
modifier = Modifier.fillMaxSize(),
emojiProvider = emojiProvider, emojiProvider = emojiProvider,
selectedEmojis = state.selectedEmoji, selectedEmojis = state.selectedEmoji,
modifier = Modifier.fillMaxSize(),
) )
} }
} }

View file

@ -19,6 +19,6 @@ package io.element.android.features.messages.impl.timeline.components.customreac
import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItem
sealed interface CustomReactionEvents { sealed interface CustomReactionEvents {
data class ShowCustomReactionSheet(val event: TimelineItem.Event?) : CustomReactionEvents data class ShowCustomReactionSheet(val event: TimelineItem.Event) : CustomReactionEvents
object DismissCustomReactionSheet : CustomReactionEvents object DismissCustomReactionSheet : CustomReactionEvents
} }

View file

@ -27,10 +27,8 @@ import io.element.android.emojibasebindings.EmojibaseDatasource
import io.element.android.emojibasebindings.EmojibaseStore import io.element.android.emojibasebindings.EmojibaseStore
import io.element.android.libraries.architecture.Async import io.element.android.libraries.architecture.Async
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.matrix.api.core.EventId
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.libraries.architecture.Presenter
import kotlinx.collections.immutable.toImmutableSet import kotlinx.collections.immutable.toImmutableSet
import javax.inject.Inject import javax.inject.Inject
@ -59,11 +57,16 @@ class CustomReactionPresenter @Inject constructor() : Presenter<CustomReactionSt
fun handleEvents(event: CustomReactionEvents) { fun handleEvents(event: CustomReactionEvents) {
when (event) { when (event) {
is CustomReactionEvents.ShowCustomReactionSheet -> handleShowCustomReactionSheet(event) is CustomReactionEvents.ShowCustomReactionSheet -> handleShowCustomReactionSheet(event.event)
is CustomReactionEvents.DismissCustomReactionSheet -> handleDismissCustomReactionSheet() is CustomReactionEvents.DismissCustomReactionSheet -> handleDismissCustomReactionSheet()
} }
} }
val selectedEmoji = selectedEvent?.reactionsState?.reactions?.mapNotNull { if(it.isHighlighted) it.key else null }.orEmpty().toImmutableSet() val selectedEmoji = selectedEvent?.reactionsState?.reactions?.mapNotNull { if(it.isHighlighted) it.key else null }.orEmpty().toImmutableSet()
return CustomReactionState(selectedEventId = selectedEvent?.eventId, emojiProvider = emojiState, selectedEmoji = selectedEmoji, eventSink = ::handleEvents) return CustomReactionState(
selectedEventId = selectedEvent?.eventId,
emojiProvider = emojiState,
selectedEmoji = selectedEmoji,
eventSink = ::handleEvents
)
} }
} }

View file

@ -63,13 +63,13 @@ import kotlinx.coroutines.launch
@Composable @Composable
fun EmojiPicker( fun EmojiPicker(
onEmojiSelected: (Emoji) -> Unit, onEmojiSelected: (Emoji) -> Unit,
modifier: Modifier = Modifier,
emojiProvider: EmojibaseStore, emojiProvider: EmojibaseStore,
selectedEmojis: ImmutableSet<String>, selectedEmojis: ImmutableSet<String>,
modifier: Modifier = Modifier,
) { ) {
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
val categories = remember { emojiProvider.categories } val categories = remember { emojiProvider.categories }
val pagerState = rememberPagerState(pageCount = { emojiProvider.categories.size }) val pagerState = rememberPagerState(pageCount = { EmojibaseCategory.values().size })
Column(modifier) { Column(modifier) {
TabRow( TabRow(
selectedTabIndex = pagerState.currentPage, selectedTabIndex = pagerState.currentPage,
@ -91,7 +91,6 @@ fun EmojiPicker(
} }
HorizontalPager( HorizontalPager(
pageCount = EmojibaseCategory.values().size,
state = pagerState, state = pagerState,
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
) { index -> ) { index ->
@ -150,8 +149,8 @@ internal fun EmojiPickerDarkPreview() {
private fun ContentToPreview() { private fun ContentToPreview() {
EmojiPicker( EmojiPicker(
onEmojiSelected = {}, onEmojiSelected = {},
modifier = Modifier.fillMaxWidth(),
emojiProvider = EmojibaseDatasource().load(LocalContext.current), emojiProvider = EmojibaseDatasource().load(LocalContext.current),
selectedEmojis = persistentSetOf("😀", "😄", "😃") selectedEmojis = persistentSetOf("😀", "😄", "😃"),
modifier = Modifier.fillMaxWidth(),
) )
} }