Skip to content

Commit b1d7f2a

Browse files
committed
chore(fc): open reaction sheet with initial index of trigger
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 68e26e7 commit b1d7f2a

File tree

5 files changed

+37
-9
lines changed

5 files changed

+37
-9
lines changed

flipchatApp/src/main/kotlin/xyz/flipchat/app/features/chat/conversation/ConversationMessages.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,11 @@ internal fun ConversationMessages(
277277
ime?.hide()
278278
delay(500.scaled(animationScale))
279279
}
280-
navigator.show(MessageReactionsSheet(event.tips, event.reactions))
280+
navigator.show(MessageReactionsSheet(
281+
tips = event.tips,
282+
reactions = event.reactions,
283+
startingWith = event.startingWith
284+
))
281285
}
282286
}
283287

flipchatApp/src/main/kotlin/xyz/flipchat/app/features/chat/conversation/MessageReactionsSheet.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import com.getcode.theme.CodeTheme
4444
import com.getcode.ui.components.FullWidthScrollableTabRow
4545
import com.getcode.ui.components.R
4646
import com.getcode.ui.components.chat.UserAvatar
47+
import com.getcode.ui.components.chat.messagecontents.SelectedReaction
4748
import com.getcode.ui.components.chat.utils.MessageReaction
4849
import com.getcode.ui.components.chat.utils.MessageTip
4950
import com.getcode.ui.components.tabIndicatorOffset
@@ -72,6 +73,7 @@ private sealed interface FeedbackData {
7273
internal data class MessageReactionsSheet(
7374
val tips: List<MessageTip>,
7475
val reactions: List<MessageReaction>,
76+
val startingWith: SelectedReaction,
7577
) : Screen {
7678

7779
@Composable
@@ -99,8 +101,20 @@ internal data class MessageReactionsSheet(
99101
return@remember items
100102
}
101103

104+
fun getInitialPage(): Int {
105+
return feedback.indexOfFirst {
106+
when (it) {
107+
is Feedback.All -> false
108+
is Feedback.Emoji -> {
109+
if (startingWith !is SelectedReaction.Emoji) return@indexOfFirst false
110+
startingWith.unicode == it.emoji
111+
}
112+
is Feedback.Tips -> startingWith is SelectedReaction.Tips
113+
}
114+
}.takeIf { it >= 0 } ?: 0
115+
}
102116

103-
val pagerState = rememberPagerState { feedback.count() }
117+
val pagerState = rememberPagerState(initialPage = getInitialPage()) { feedback.count() }
104118
val composeScope = rememberCoroutineScope()
105119

106120
Column(

ui/components/src/main/kotlin/com/getcode/ui/components/chat/MessageList.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import com.getcode.model.chat.MessageStatus
3434
import com.getcode.theme.CodeTheme
3535
import com.getcode.ui.components.chat.messagecontents.MessageContentActionHandler
3636
import com.getcode.ui.components.chat.messagecontents.MessageContextAction
37+
import com.getcode.ui.components.chat.messagecontents.SelectedReaction
3738
import com.getcode.ui.components.chat.utils.ChatItem
3839
import com.getcode.ui.components.chat.utils.MessageReaction
3940
import com.getcode.ui.components.chat.utils.MessageTip
@@ -57,7 +58,11 @@ sealed interface MessageListEvent {
5758
data class ViewUserProfile(val userId: ID): MessageListEvent
5859
data class AddReaction(val messageId: ID, val emoji: String): MessageListEvent
5960
data class RemoveReaction(val originalMessageId: ID): MessageListEvent
60-
data class ShowMessageReactions(val tips: List<MessageTip>, val reactions: List<MessageReaction>) : MessageListEvent
61+
data class ShowMessageReactions(
62+
val tips: List<MessageTip>,
63+
val reactions: List<MessageReaction>,
64+
val startingWith: SelectedReaction,
65+
) : MessageListEvent
6166
}
6267

6368
data class MessageListPointer(
@@ -183,8 +188,8 @@ fun MessageList(
183188
dispatch(MessageListEvent.RemoveReaction(reactionMessageId))
184189
}
185190

186-
override fun viewReactions() {
187-
dispatch(MessageListEvent.ShowMessageReactions(item.tips, item.reactions))
191+
override fun viewReactions(selected: SelectedReaction) {
192+
dispatch(MessageListEvent.ShowMessageReactions(item.tips, item.reactions, selected))
188193
}
189194

190195
override fun startReply() {

ui/components/src/main/kotlin/com/getcode/ui/components/chat/messagecontents/Feedback.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ private fun TipCounter(
120120
.pointerInput(Unit) {
121121
detectTapGestures(
122122
onTap = { if (!isMessageFromSelf) { actionHandler.giveTip() } },
123-
onLongPress = { actionHandler.viewReactions() },
123+
onLongPress = { actionHandler.viewReactions(SelectedReaction.Tips) },
124124
)
125125
}
126126
.background(backgroundColor, CircleShape)
@@ -186,7 +186,7 @@ private fun EmojiCounter(
186186
modifier = modifier
187187
.clip(CircleShape)
188188
.combinedClickable(
189-
onLongClick = { actionHandler.viewReactions() }
189+
onLongClick = { actionHandler.viewReactions(SelectedReaction.Emoji(emoji)) }
190190
) {
191191
if (selfOccurrence != null) actionHandler.removeReaction(selfOccurrence.messageId)
192192
else actionHandler.addReaction(emoji)

ui/components/src/main/kotlin/com/getcode/ui/components/chat/messagecontents/MessageTextContent.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,17 @@ import com.getcode.ui.utils.addIf
5656
import com.getcode.ui.utils.dashedBorder
5757
import kotlinx.datetime.Instant
5858

59+
sealed interface SelectedReaction {
60+
data class Emoji(val unicode: String): SelectedReaction
61+
data object Tips: SelectedReaction
62+
}
63+
5964
interface MessageContentActionHandler {
6065
fun openMessageControls()
6166
fun giveTip()
6267
fun addReaction(emoji: String)
6368
fun removeReaction(reactionMessageId: ID)
64-
fun viewReactions()
69+
fun viewReactions(selected: SelectedReaction)
6570
fun startReply()
6671
fun viewOriginalMessage()
6772
fun openUserProfile()
@@ -72,7 +77,7 @@ private data object StubActionHandler: MessageContentActionHandler {
7277
override fun giveTip() = Unit
7378
override fun addReaction(emoji: String) = Unit
7479
override fun removeReaction(reactionMessageId: ID) = Unit
75-
override fun viewReactions() = Unit
80+
override fun viewReactions(selected: SelectedReaction) = Unit
7681
override fun startReply() = Unit
7782
override fun viewOriginalMessage() = Unit
7883
override fun openUserProfile() = Unit

0 commit comments

Comments
 (0)