Improve Previews.

This commit is contained in:
Benoit Marty 2025-10-01 10:35:36 +02:00
parent dbffad29d0
commit 330f675541
5 changed files with 66 additions and 27 deletions

View file

@ -24,22 +24,23 @@ open class SpaceStateProvider : PreviewParameterProvider<SpaceState> {
get() = sequenceOf( get() = sequenceOf(
aSpaceState(), aSpaceState(),
aSpaceState( aSpaceState(
parentSpace = aSpaceRoom( parentSpace = aSpaceRoom(
name = null, name = null,
numJoinedMembers = 5, numJoinedMembers = 5,
childrenCount = 10, childrenCount = 10,
worldReadable = true, worldReadable = true,
),
hasMoreToLoad = true,
), ),
hasMoreToLoad = true,
),
aSpaceState( aSpaceState(
hasMoreToLoad = true, hasMoreToLoad = true,
children = aListOfSpaceRooms(), children = aListOfSpaceRooms(),
), ),
aSpaceState( aSpaceState(
hasMoreToLoad = false, hasMoreToLoad = false,
children = aListOfSpaceRooms() children = aListOfSpaceRooms(),
) joiningRooms = setOf(RoomId("!spaceId0:example.com")),
)
// Add other states here // Add other states here
) )
} }
@ -63,7 +64,7 @@ fun aSpaceState(
seenSpaceInvites = seenSpaceInvites.toImmutableSet(), seenSpaceInvites = seenSpaceInvites.toImmutableSet(),
hideInvitesAvatar = hideInvitesAvatar, hideInvitesAvatar = hideInvitesAvatar,
hasMoreToLoad = hasMoreToLoad, hasMoreToLoad = hasMoreToLoad,
joinActions = joiningRooms.associateWith { AsyncAction.Uninitialized }.toImmutableMap(), joinActions = joiningRooms.associateWith { AsyncAction.Loading }.toImmutableMap(),
acceptDeclineInviteState = acceptDeclineInviteState, acceptDeclineInviteState = acceptDeclineInviteState,
eventSink = {} eventSink = {}
) )

View file

@ -14,9 +14,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -45,7 +43,6 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.ButtonSize
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
import io.element.android.libraries.designsystem.theme.components.DropdownMenu import io.element.android.libraries.designsystem.theme.components.DropdownMenu
import io.element.android.libraries.designsystem.theme.components.DropdownMenuItem import io.element.android.libraries.designsystem.theme.components.DropdownMenuItem
@ -53,10 +50,10 @@ import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.CurrentUserMembership
import io.element.android.libraries.matrix.api.spaces.SpaceRoom import io.element.android.libraries.matrix.api.spaces.SpaceRoom
import io.element.android.libraries.matrix.ui.components.JoinButton
import io.element.android.libraries.matrix.ui.components.SpaceHeaderView import io.element.android.libraries.matrix.ui.components.SpaceHeaderView
import io.element.android.libraries.matrix.ui.components.SpaceRoomItemView import io.element.android.libraries.matrix.ui.components.SpaceRoomItemView
import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.getAvatarData
@ -307,15 +304,11 @@ private fun SpaceRoom.trailingAction(
): @Composable (() -> Unit)? { ): @Composable (() -> Unit)? {
return when (state) { return when (state) {
null, CurrentUserMembership.LEFT -> { null, CurrentUserMembership.LEFT -> {
@Composable { {
CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.textActionAccent) { JoinButton(
TextButton( showProgress = isCurrentlyJoining,
text = stringResource(CommonStrings.action_join), onClick = onClick,
onClick = onClick, )
size = ButtonSize.LargeLowPadding,
showProgress = isCurrentlyJoining,
)
}
} }
} }
else -> null else -> null

View file

@ -0,0 +1,32 @@
/*
* 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.matrix.ui.components
import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.res.stringResource
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.designsystem.theme.components.ButtonSize
import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun JoinButton(
showProgress: Boolean,
onClick: () -> Unit,
) {
CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.textActionAccent) {
TextButton(
text = stringResource(CommonStrings.action_join),
onClick = onClick,
size = ButtonSize.LargeLowPadding,
showProgress = showProgress,
)
}
}

View file

@ -259,6 +259,17 @@ internal fun SpaceRoomItemViewPreview(@PreviewParameter(SpaceRoomProvider::class
{ InviteButtonsRowMolecule({}, {}) } { InviteButtonsRowMolecule({}, {}) }
} else { } else {
null null
},
trailingAction = when (spaceRoom.state) {
null, CurrentUserMembership.LEFT -> {
{
JoinButton(
showProgress = spaceRoom.state == CurrentUserMembership.LEFT,
onClick = { },
)
}
}
else -> null
} }
) )
} }

View file

@ -24,6 +24,7 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
aSpaceRoom( aSpaceRoom(
roomType = RoomType.Room, roomType = RoomType.Room,
name = "Room name no topic", name = "Room name no topic",
state = CurrentUserMembership.LEFT,
), ),
aSpaceRoom( aSpaceRoom(
roomType = RoomType.Room, roomType = RoomType.Room,
@ -48,6 +49,7 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
worldReadable = true, worldReadable = true,
avatarUrl = "anUrl", avatarUrl = "anUrl",
roomId = RoomId("!spaceId1:example.com"), roomId = RoomId("!spaceId1:example.com"),
state = CurrentUserMembership.LEFT,
), ),
aSpaceRoom( aSpaceRoom(
name = null, name = null,