Merge pull request #5493 from element-hq/feature/fga/space_description

feature(space): make sure to handle topic properly
This commit is contained in:
ganfra 2025-10-09 15:39:15 +02:00 committed by GitHub
commit be8455b54d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 239 additions and 57 deletions

View file

@ -20,6 +20,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.AnnotatedString
@ -51,6 +52,7 @@ fun ClickableLinkText(
onClick: () -> Unit = {},
onLongClick: () -> Unit = {},
style: TextStyle = LocalTextStyle.current,
color: Color = Color.Unspecified,
inlineContent: ImmutableMap<String, InlineTextContent> = persistentMapOf(),
) {
ClickableLinkText(
@ -62,6 +64,7 @@ fun ClickableLinkText(
onClick = onClick,
onLongClick = onLongClick,
style = style,
color = color,
inlineContent = inlineContent,
)
}
@ -76,6 +79,7 @@ fun ClickableLinkText(
onClick: () -> Unit = {},
onLongClick: () -> Unit = {},
style: TextStyle = LocalTextStyle.current,
color: Color = Color.Unspecified,
inlineContent: ImmutableMap<String, InlineTextContent> = persistentMapOf(),
) {
@Suppress("NAME_SHADOWING")
@ -126,6 +130,7 @@ fun ClickableLinkText(
text = annotatedString,
modifier = modifier.then(pressIndicator),
style = style,
color = color,
onTextLayout = {
layoutResult.value = it
},

View file

@ -0,0 +1,67 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.designsystem.components
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.datasource.LoremIpsum
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet
import io.element.android.libraries.designsystem.theme.components.Text
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SimpleModalBottomSheet(
title: String,
onDismiss: () -> Unit,
modifier: Modifier = Modifier,
content: @Composable ColumnScope.() -> Unit,
) {
ModalBottomSheet(
onDismissRequest = onDismiss,
modifier = modifier,
sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true),
) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
) {
Text(
title,
style = ElementTheme.typography.fontBodyLgMedium,
color = ElementTheme.colors.textPrimary,
)
Spacer(Modifier.height(8.dp))
content()
}
}
}
@PreviewsDayNight
@Composable
internal fun SimpleModalBottomSheetPreview() = ElementPreview {
SimpleModalBottomSheet(title = "A title", onDismiss = {}) {
Text(
text = LoremIpsum(20).values.first(),
color = ElementTheme.colors.textSecondary,
style = ElementTheme.typography.fontBodyMdRegular,
)
}
}

View file

@ -7,6 +7,7 @@
package io.element.android.libraries.matrix.ui.components
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@ -43,6 +44,7 @@ fun SpaceHeaderView(
numberOfMembers: Int,
modifier: Modifier = Modifier,
topicMaxLines: Int = Int.MAX_VALUE,
onTopicClick: ((String) -> Unit)? = null,
) {
RoomPreviewOrganism(
modifier = modifier.padding(24.dp),
@ -68,7 +70,16 @@ fun SpaceHeaderView(
description = if (topic.isNullOrBlank()) {
null
} else {
{ RoomPreviewDescriptionAtom(description = topic, maxLines = topicMaxLines) }
{
RoomPreviewDescriptionAtom(
description = topic,
maxLines = topicMaxLines,
modifier = Modifier.clickable(
enabled = onTopicClick != null,
onClick = { onTopicClick?.invoke(topic) }
)
)
}
},
memberCount = {
SpaceMembersView(