Skip to content

Commit c4992df

Browse files
committed
chore(ui/message/reply): update layout handling to favor longest content
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 5306757 commit c4992df

3 files changed

Lines changed: 17 additions & 9 deletions

File tree

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ import androidx.compose.ui.text.TextStyle
3131
import androidx.compose.ui.text.style.TextOverflow
3232
import androidx.compose.ui.unit.dp
3333
import com.getcode.theme.CodeTheme
34-
import com.getcode.theme.White10
3534
import com.getcode.ui.components.Badge
36-
import com.getcode.ui.components.Pill
3735
import com.getcode.ui.components.R
3836
import com.getcode.ui.utils.rememberedClickable
3937
import com.getcode.util.DateUtils

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
1010
import androidx.compose.foundation.layout.height
1111
import androidx.compose.foundation.layout.padding
1212
import androidx.compose.foundation.layout.width
13+
import androidx.compose.foundation.layout.widthIn
1314
import androidx.compose.material.Text
1415
import androidx.compose.runtime.Composable
1516
import androidx.compose.ui.Alignment
@@ -68,6 +69,7 @@ internal fun MessageNodeScope.MessageReplyContent(
6869
) {
6970
SubcomposeLayout { constraints ->
7071
val spacing = 2.5.dp.roundToPx()
72+
7173
val messageContentPlaceable = subcompose("MessageContent") {
7274
MessageContent(
7375
maxWidth = constraints.maxWidth,
@@ -82,12 +84,16 @@ internal fun MessageNodeScope.MessageReplyContent(
8284

8385
val replyPreviewPlaceable = subcompose("MessageReplyPreview") {
8486
MessageReplyPreview(
85-
modifier = Modifier.noRippleClickable { onOriginalMessageClicked() },
87+
modifier = Modifier
88+
.widthIn(min = messageContentPlaceable.width.toDp())
89+
.noRippleClickable { onOriginalMessageClicked() },
8690
sender = originalMessage.sender,
8791
message = originalMessage.message,
8892
backgroundColor = Color.Black.copy(0.1f)
8993
)
90-
}.first().measure(constraints)
94+
}.first().measure(
95+
constraints.copy(minWidth = messageContentPlaceable.width, maxWidth = constraints.maxWidth)
96+
)
9197

9298
// Determine the final width based on the longer of the two components
9399
val finalWidth = maxOf(messageContentPlaceable.width, replyPreviewPlaceable.width)

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.runtime.setValue
2020
import androidx.compose.ui.Alignment
2121
import androidx.compose.ui.Modifier
2222
import androidx.compose.ui.draw.drawWithContent
23+
import androidx.compose.ui.graphics.Color
2324
import androidx.compose.ui.graphics.Shape
2425
import androidx.compose.ui.input.pointer.pointerInput
2526
import androidx.compose.ui.platform.LocalDensity
@@ -38,6 +39,7 @@ import com.getcode.ui.utils.addIf
3839
import com.getcode.ui.utils.rememberedLongClickable
3940
import com.getcode.util.formatDateRelatively
4041
import kotlinx.datetime.Instant
42+
import kotlin.math.max
4143
import kotlin.math.roundToInt
4244

4345
sealed interface MessageControlAction {
@@ -89,9 +91,7 @@ internal fun MessageNodeScope.MessageText(
8991
.padding(CodeTheme.dimens.grid.x2)
9092
) contents@{
9193
val maxWidthPx = with(LocalDensity.current) { maxWidth.roundToPx() }
92-
Column(
93-
modifier = Modifier.background(color),
94-
) {
94+
Column {
9595
MessageContent(
9696
maxWidth = maxWidthPx,
9797
message = content,
@@ -109,6 +109,7 @@ internal fun MessageNodeScope.MessageText(
109109
@Composable
110110
private fun rememberAlignmentRule(
111111
contentTextStyle: TextStyle,
112+
minWidth:Int = 0,
112113
maxWidth: Int,
113114
message: String,
114115
date: Instant
@@ -119,7 +120,7 @@ private fun rememberAlignmentRule(
119120
val spacingPx = with(density) { DateWithStatusDefaults.Spacing.roundToPx() }
120121
val contentPaddingPx = with(density) { CodeTheme.dimens.grid.x2.roundToPx() }
121122

122-
return remember(maxWidth, message, date) {
123+
return remember(minWidth, maxWidth, message, date) {
123124
mutableStateOf<AlignmentRule?>(null)
124125
}.apply {
125126
val textMeasurer = rememberTextMeasurer()
@@ -129,7 +130,8 @@ private fun rememberAlignmentRule(
129130
style = dateTextStyle,
130131
maxLines = 1
131132
)
132-
result.size.width + spacingPx + iconSizePx
133+
134+
max(minWidth, result.size.width + spacingPx + iconSizePx)
133135
}
134136

135137
val bufferSize by remember(dateStatusWidth) {
@@ -167,6 +169,7 @@ private fun rememberAlignmentRule(
167169
@Composable
168170
internal fun MessageContent(
169171
modifier: Modifier = Modifier,
172+
minWidth: Int = 0,
170173
maxWidth: Int,
171174
message: String,
172175
date: Instant,
@@ -177,6 +180,7 @@ internal fun MessageContent(
177180
) {
178181
val alignmentRule by rememberAlignmentRule(
179182
contentTextStyle = options.contentStyle,
183+
minWidth = minWidth,
180184
maxWidth = maxWidth,
181185
message = message,
182186
date = date,

0 commit comments

Comments
 (0)