feat: user sheet placeholder

Signed-off-by: Infi <wingit@geist.ga>
This commit is contained in:
Infi 2023-06-15 23:50:31 +02:00
parent 8b7c36337b
commit 72ea2d538e
4 changed files with 34 additions and 4 deletions

View File

@ -128,6 +128,7 @@ fun Message(
truncate: Boolean = false, truncate: Boolean = false,
parse: (MessageSchema) -> SpannableStringBuilder = { SpannableStringBuilder(it.content) }, parse: (MessageSchema) -> SpannableStringBuilder = { SpannableStringBuilder(it.content) },
onMessageContextMenu: () -> Unit = {}, onMessageContextMenu: () -> Unit = {},
onAvatarClick: () -> Unit = {},
canReply: Boolean = false, canReply: Boolean = false,
onReply: () -> Unit = {}, onReply: () -> Unit = {},
) { ) {
@ -198,7 +199,8 @@ fun Message(
username = User.resolveDefaultName(author), username = User.resolveDefaultName(author),
userId = author.id ?: message.id ?: ULID.makeSpecial(0), userId = author.id ?: message.id ?: ULID.makeSpecial(0),
avatar = author.avatar, avatar = author.avatar,
rawUrl = message.masquerade?.avatar?.let { asJanuaryProxyUrl(it) } rawUrl = message.masquerade?.avatar?.let { asJanuaryProxyUrl(it) },
onClick = onAvatarClick,
) )
} }
} else { } else {

View File

@ -107,6 +107,7 @@ fun UserAvatar(
url = "$REVOLT_BASE/users/${userId}/default_avatar", url = "$REVOLT_BASE/users/${userId}/default_avatar",
description = stringResource(id = R.string.avatar_alt, username), description = stringResource(id = R.string.avatar_alt, username),
modifier = Modifier modifier = Modifier
.clip(CircleShape)
.size(size) .size(size)
.then( .then(
if (onLongClick != null || onClick != null) Modifier if (onLongClick != null || onClick != null) Modifier
@ -115,8 +116,7 @@ fun UserAvatar(
onLongClick = { onLongClick?.invoke() } onLongClick = { onLongClick?.invoke() }
) )
else Modifier else Modifier
) ),
.clip(CircleShape),
) )
} }

View File

@ -190,6 +190,9 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = hil
var showServerContextSheet by remember { mutableStateOf(false) } var showServerContextSheet by remember { mutableStateOf(false) }
var serverContextSheetTarget by remember { mutableStateOf("") } var serverContextSheetTarget by remember { mutableStateOf("") }
var showUserContextSheet by remember { mutableStateOf(false) }
var userContextSheetTarget by remember { mutableStateOf("") }
BackHandler(enabled = drawerState.isClosed) { BackHandler(enabled = drawerState.isClosed) {
scope.launch { scope.launch {
drawerState.open() drawerState.open()
@ -323,6 +326,21 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = hil
} }
} }
if (showUserContextSheet) {
val userContextSheetState = rememberModalBottomSheetState()
ModalBottomSheet(
sheetState = userContextSheetState,
onDismissRequest = {
showUserContextSheet = false
},
) {
Column {
Text(text = "this is user context sheet for $userContextSheetTarget")
}
}
}
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
@ -473,7 +491,11 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = hil
if (drawerState.isOpen) drawerState.close() if (drawerState.isOpen) drawerState.close()
else drawerState.open() else drawerState.open()
} }
} },
onUserSheetOpenFor = { target ->
userContextSheetTarget = target
showUserContextSheet = true
},
) )
} }
} }

View File

@ -86,6 +86,7 @@ fun ChannelScreen(
navController: NavController, navController: NavController,
channelId: String, channelId: String,
onToggleDrawer: () -> Unit, onToggleDrawer: () -> Unit,
onUserSheetOpenFor: (String) -> Unit,
viewModel: ChannelScreenViewModel = viewModel() viewModel: ChannelScreenViewModel = viewModel()
) { ) {
val channel = viewModel.activeChannel val channel = viewModel.activeChannel
@ -282,6 +283,11 @@ fun ChannelScreen(
messageContextSheetShown = true messageContextSheetShown = true
messageContextSheetTarget = message.id ?: "" messageContextSheetTarget = message.id ?: ""
}, },
onAvatarClick = {
message.author?.let { author ->
onUserSheetOpenFor(author)
}
},
canReply = true, canReply = true,
onReply = { onReply = {
if (viewModel.pendingReplies.size >= 5) { if (viewModel.pendingReplies.size >= 5) {