feat: Add @Preview annotations to NIP-43 UI components
Adds preview functions for RelayMemberEventCard variants (membership list, add/remove member, join/leave request) and MembershipActions states (not member, is member, join sent, leave sent). https://claude.ai/code/session_01PRqe4bBCb9u62oPh8u9sHx
This commit is contained in:
@@ -40,12 +40,14 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
import com.vitorpamplona.amethyst.model.Note
|
import com.vitorpamplona.amethyst.model.Note
|
||||||
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
|
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
import com.vitorpamplona.amethyst.ui.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn
|
||||||
import com.vitorpamplona.quartz.nip43RelayMembers.addMember.RelayAddMemberEvent
|
import com.vitorpamplona.quartz.nip43RelayMembers.addMember.RelayAddMemberEvent
|
||||||
import com.vitorpamplona.quartz.nip43RelayMembers.list.RelayMembershipListEvent
|
import com.vitorpamplona.quartz.nip43RelayMembers.list.RelayMembershipListEvent
|
||||||
import com.vitorpamplona.quartz.nip43RelayMembers.removeMember.RelayRemoveMemberEvent
|
import com.vitorpamplona.quartz.nip43RelayMembers.removeMember.RelayRemoveMemberEvent
|
||||||
@@ -139,8 +141,8 @@ private fun RelayMemberEventCard(
|
|||||||
icon: ImageVector,
|
icon: ImageVector,
|
||||||
title: String,
|
title: String,
|
||||||
subtitle: String?,
|
subtitle: String?,
|
||||||
nav: INav,
|
nav: INav? = null,
|
||||||
relayPubKey: String?,
|
relayPubKey: String? = null,
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
modifier =
|
modifier =
|
||||||
@@ -175,3 +177,63 @@ private fun RelayMemberEventCard(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun RelayMembershipListCardPreview() {
|
||||||
|
ThemeComparisonColumn {
|
||||||
|
RelayMemberEventCard(
|
||||||
|
icon = Icons.Default.People,
|
||||||
|
title = "Relay membership list",
|
||||||
|
subtitle = "42 members",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun RelayAddMemberCardPreview() {
|
||||||
|
ThemeComparisonColumn {
|
||||||
|
RelayMemberEventCard(
|
||||||
|
icon = Icons.Default.PersonAdd,
|
||||||
|
title = "Member added to relay",
|
||||||
|
subtitle = "a1b2c3d4e5f6a7b8...",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun RelayRemoveMemberCardPreview() {
|
||||||
|
ThemeComparisonColumn {
|
||||||
|
RelayMemberEventCard(
|
||||||
|
icon = Icons.Default.PersonRemove,
|
||||||
|
title = "Member removed from relay",
|
||||||
|
subtitle = "a1b2c3d4e5f6a7b8...",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun RelayJoinRequestCardPreview() {
|
||||||
|
ThemeComparisonColumn {
|
||||||
|
RelayMemberEventCard(
|
||||||
|
icon = Icons.Default.PersonAdd,
|
||||||
|
title = "Relay join request",
|
||||||
|
subtitle = null,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun RelayLeaveRequestCardPreview() {
|
||||||
|
ThemeComparisonColumn {
|
||||||
|
RelayMemberEventCard(
|
||||||
|
icon = Icons.AutoMirrored.Filled.ExitToApp,
|
||||||
|
title = "Relay leave request",
|
||||||
|
subtitle = null,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+62
@@ -62,12 +62,14 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
|
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
|
||||||
import com.vitorpamplona.amethyst.ui.note.UserCompose
|
import com.vitorpamplona.amethyst.ui.note.UserCompose
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
import com.vitorpamplona.amethyst.ui.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.client.reqs.fetchAsFlow
|
import com.vitorpamplona.quartz.nip01Core.relay.client.reqs.fetchAsFlow
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
|
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
|
||||||
@@ -301,6 +303,66 @@ fun MembershipActions(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun MembershipActionsNotMemberPreview() {
|
||||||
|
ThemeComparisonColumn {
|
||||||
|
MembershipActions(
|
||||||
|
isMember = false,
|
||||||
|
isLoading = false,
|
||||||
|
joinRequestSent = false,
|
||||||
|
leaveRequestSent = false,
|
||||||
|
onJoinRequest = {},
|
||||||
|
onLeaveRequest = {},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun MembershipActionsIsMemberPreview() {
|
||||||
|
ThemeComparisonColumn {
|
||||||
|
MembershipActions(
|
||||||
|
isMember = true,
|
||||||
|
isLoading = false,
|
||||||
|
joinRequestSent = false,
|
||||||
|
leaveRequestSent = false,
|
||||||
|
onJoinRequest = {},
|
||||||
|
onLeaveRequest = {},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun MembershipActionsJoinSentPreview() {
|
||||||
|
ThemeComparisonColumn {
|
||||||
|
MembershipActions(
|
||||||
|
isMember = false,
|
||||||
|
isLoading = false,
|
||||||
|
joinRequestSent = true,
|
||||||
|
leaveRequestSent = false,
|
||||||
|
onJoinRequest = {},
|
||||||
|
onLeaveRequest = {},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun MembershipActionsLeaveSentPreview() {
|
||||||
|
ThemeComparisonColumn {
|
||||||
|
MembershipActions(
|
||||||
|
isMember = true,
|
||||||
|
isLoading = false,
|
||||||
|
joinRequestSent = false,
|
||||||
|
leaveRequestSent = true,
|
||||||
|
onJoinRequest = {},
|
||||||
|
onLeaveRequest = {},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun sendJoinRequest(
|
suspend fun sendJoinRequest(
|
||||||
relay: NormalizedRelayUrl,
|
relay: NormalizedRelayUrl,
|
||||||
accountViewModel: AccountViewModel,
|
accountViewModel: AccountViewModel,
|
||||||
|
|||||||
Reference in New Issue
Block a user