Take into account hiding avatars from invitation
This commit is contained in:
committed by
Benoit Marty
parent
85d7532124
commit
cbcf86b1c9
@@ -54,6 +54,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
|
||||
internal fun HomeSpaceItemView(
|
||||
spaceRoom: SpaceRoom,
|
||||
showUnreadIndicator: Boolean,
|
||||
hideAvatars: Boolean,
|
||||
onClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
@@ -61,6 +62,7 @@ internal fun HomeSpaceItemView(
|
||||
modifier = modifier,
|
||||
spaceRoom = spaceRoom,
|
||||
onClick = onClick,
|
||||
hideAvatars = hideAvatars,
|
||||
onLongClick = { },
|
||||
) {
|
||||
NameAndIndicatorRow(
|
||||
@@ -151,7 +153,7 @@ private fun SpaceScaffoldRow(
|
||||
onClick: () -> Unit,
|
||||
onLongClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
hideAvatarImage: Boolean,
|
||||
hideAvatars: Boolean,
|
||||
content: @Composable ColumnScope.() -> Unit
|
||||
) {
|
||||
val clickModifier = Modifier
|
||||
@@ -173,7 +175,7 @@ private fun SpaceScaffoldRow(
|
||||
Avatar(
|
||||
avatarData = spaceRoom.getAvatarData(AvatarSize.SpaceListItem),
|
||||
avatarType = AvatarType.Space(),
|
||||
hideImage = hideAvatarImage,
|
||||
hideImage = hideAvatars,
|
||||
)
|
||||
Spacer(modifier = Modifier.width(16.dp))
|
||||
Column(
|
||||
@@ -189,6 +191,7 @@ internal fun HomeSpaceItemViewPreview(@PreviewParameter(SpaceRoomProvider::class
|
||||
HomeSpaceItemView(
|
||||
spaceRoom = spaceRoom,
|
||||
showUnreadIndicator = false,
|
||||
hideAvatars = true,
|
||||
onClick = {},
|
||||
)
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import androidx.compose.runtime.remember
|
||||
import io.element.android.features.invite.api.SeenInvitesStore
|
||||
import io.element.android.features.invite.api.seenSpaceIds
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.core.coroutine.mapState
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import kotlinx.collections.immutable.persistentSetOf
|
||||
import kotlinx.collections.immutable.toPersistentSet
|
||||
@@ -26,6 +27,12 @@ class HomeSpacesPresenter @Inject constructor(
|
||||
) : Presenter<HomeSpacesState> {
|
||||
@Composable
|
||||
override fun present(): HomeSpacesState {
|
||||
val hideInvitesAvatar by remember {
|
||||
client
|
||||
.mediaPreviewService()
|
||||
.mediaPreviewConfigFlow
|
||||
.mapState { config -> config.hideInviteAvatar }
|
||||
}.collectAsState()
|
||||
val spaceRooms by client.spaceService.spaceRooms.collectAsState(emptyList())
|
||||
val seenSpaceInvites by remember {
|
||||
seenInvitesStore.seenSpaceIds().map { it.toPersistentSet() }
|
||||
@@ -38,6 +45,7 @@ class HomeSpacesPresenter @Inject constructor(
|
||||
return HomeSpacesState(
|
||||
spaceRooms = spaceRooms,
|
||||
seenSpaceInvites = seenSpaceInvites,
|
||||
hideInvitesAvatar = hideInvitesAvatar,
|
||||
eventSink = ::handleEvents,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -14,5 +14,6 @@ import kotlinx.collections.immutable.ImmutableSet
|
||||
data class HomeSpacesState(
|
||||
val spaceRooms: List<SpaceRoom>,
|
||||
val seenSpaceInvites: ImmutableSet<SpaceId>,
|
||||
val hideInvitesAvatar: Boolean,
|
||||
val eventSink: (HomeSpacesEvents) -> Unit,
|
||||
)
|
||||
|
||||
@@ -27,10 +27,12 @@ open class HomeSpacesStateProvider : PreviewParameterProvider<HomeSpacesState> {
|
||||
internal fun aHomeSpacesState(
|
||||
spaceRooms: List<SpaceRoom> = aListOfSpaceRooms(),
|
||||
seenSpaceInvites: Set<SpaceId> = emptySet(),
|
||||
hideInvitesAvatar: Boolean = false,
|
||||
eventSink: (HomeSpacesEvents) -> Unit = {},
|
||||
) = HomeSpacesState(
|
||||
spaceRooms = spaceRooms,
|
||||
seenSpaceInvites = seenSpaceInvites.toImmutableSet(),
|
||||
hideInvitesAvatar = hideInvitesAvatar,
|
||||
eventSink = eventSink,
|
||||
)
|
||||
|
||||
|
||||
@@ -25,9 +25,11 @@ fun HomeSpacesView(
|
||||
LazyColumn(modifier) {
|
||||
state.spaceRooms.forEach {
|
||||
item(it.spaceId) {
|
||||
val isInvitation = it.state == CurrentUserMembership.INVITED
|
||||
HomeSpaceItemView(
|
||||
spaceRoom = it,
|
||||
showUnreadIndicator = it.state == CurrentUserMembership.INVITED && it.spaceId !in state.seenSpaceInvites,
|
||||
showUnreadIndicator = isInvitation && it.spaceId !in state.seenSpaceInvites,
|
||||
hideAvatars = isInvitation && state.hideInvitesAvatar,
|
||||
onClick = {
|
||||
onSpaceClick(it.spaceId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user