Skip to content

Commit 0d4fe43

Browse files
committed
style(fc): create HostableUserAvatar to reuse crowning
Signed-off-by: Brandon McAnsh <[email protected]>
1 parent f08e2e4 commit 0d4fe43

File tree

2 files changed

+77
-35
lines changed

2 files changed

+77
-35
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.getcode.ui.components.chat
2+
3+
import androidx.compose.foundation.Image
4+
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.layout.Box
6+
import androidx.compose.foundation.layout.offset
7+
import androidx.compose.foundation.layout.padding
8+
import androidx.compose.foundation.layout.size
9+
import androidx.compose.foundation.shape.CircleShape
10+
import androidx.compose.material.icons.Icons
11+
import androidx.compose.material.icons.filled.Person
12+
import androidx.compose.runtime.Composable
13+
import androidx.compose.ui.Alignment
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.draw.clip
16+
import androidx.compose.ui.graphics.Color
17+
import androidx.compose.ui.graphics.ColorFilter
18+
import androidx.compose.ui.platform.LocalDensity
19+
import androidx.compose.ui.res.painterResource
20+
import androidx.compose.ui.unit.Density
21+
import androidx.compose.ui.unit.Dp
22+
import androidx.compose.ui.unit.IntOffset
23+
import androidx.compose.ui.unit.dp
24+
import com.getcode.theme.CodeTheme
25+
import com.getcode.ui.components.R
26+
27+
@Composable
28+
fun HostableUserAvatar(
29+
imageData: Any?,
30+
modifier: Modifier = Modifier,
31+
size: Dp = CodeTheme.dimens.staticGrid.x8,
32+
crownOffset: Density.() -> IntOffset = {
33+
IntOffset(
34+
x = -(5.dp).roundToPx(),
35+
y = -(5.dp).roundToPx()
36+
)
37+
},
38+
isHost: Boolean = false,
39+
) {
40+
Box(
41+
modifier = modifier,
42+
) {
43+
UserAvatar(
44+
modifier = Modifier
45+
.size(size)
46+
.clip(CircleShape),
47+
data = imageData,
48+
overlay = {
49+
Image(
50+
modifier = Modifier.padding(5.dp),
51+
imageVector = Icons.Default.Person,
52+
colorFilter = ColorFilter.tint(Color.White),
53+
contentDescription = null,
54+
)
55+
}
56+
)
57+
58+
if (isHost) {
59+
Image(
60+
modifier = Modifier
61+
.align(Alignment.TopStart)
62+
.offset { crownOffset() }
63+
.size(CodeTheme.dimens.staticGrid.x4)
64+
.background(color = Color(0xFFE9C432), shape = CircleShape)
65+
.padding(4.dp),
66+
painter = painterResource(R.drawable.ic_crown),
67+
contentDescription = null,
68+
colorFilter = ColorFilter.tint(CodeTheme.colors.brand)
69+
)
70+
}
71+
}
72+
}

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

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -541,42 +541,12 @@ private fun ContentFromSender(
541541
if (isFirstInSeries) {
542542
Column {
543543
Spacer(Modifier.size(CodeTheme.dimens.grid.x4))
544-
Box(
544+
HostableUserAvatar(
545545
modifier = Modifier
546-
.padding(top = CodeTheme.dimens.grid.x1)
547-
) {
548-
UserAvatar(
549-
modifier = Modifier
550-
.size(CodeTheme.dimens.staticGrid.x8)
551-
.clip(CircleShape),
552-
data = sender.profileImage ?: sender.id,
553-
overlay = {
554-
Image(
555-
modifier = Modifier.padding(5.dp),
556-
imageVector = Icons.Default.Person,
557-
colorFilter = ColorFilter.tint(Color.White),
558-
contentDescription = null,
559-
)
560-
}
561-
)
562-
563-
if (sender.isHost) {
564-
Image(
565-
modifier = Modifier
566-
.align(Alignment.TopStart)
567-
.offset(
568-
x = -(CodeTheme.dimens.grid.x1),
569-
y = -(CodeTheme.dimens.grid.x1)
570-
)
571-
.size(CodeTheme.dimens.staticGrid.x4)
572-
.background(color = Color(0xFFE9C432), shape = CircleShape)
573-
.padding(4.dp),
574-
painter = painterResource(R.drawable.ic_crown),
575-
contentDescription = null,
576-
colorFilter = ColorFilter.tint(CodeTheme.colors.brand)
577-
)
578-
}
579-
}
546+
.padding(top = CodeTheme.dimens.grid.x1),
547+
imageData = sender.profileImage ?: sender.id,
548+
isHost = sender.isHost
549+
)
580550
}
581551
} else {
582552
Spacer(Modifier.size(CodeTheme.dimens.staticGrid.x8))

0 commit comments

Comments
 (0)