Refactor: Improve ServerItem UI and add previews
- Updated `ServerItem` to accept `isJoined` as a parameter. - Modified the joined server indicator to use primary theme colors and adjusted its size. - Added `@Preview` composables for `ServerItem` in both joined and not joined states.
This commit is contained in:
parent
e20162ad36
commit
1da1d8a04e
|
|
@ -27,17 +27,21 @@ import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
|
import androidx.compose.ui.graphics.BlendMode.Companion.Color
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.ColorFilter
|
import androidx.compose.ui.graphics.ColorFilter
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
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 androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import chat.revolt.R
|
import chat.revolt.R
|
||||||
import chat.revolt.api.RevoltAPI
|
import chat.revolt.api.RevoltAPI
|
||||||
import chat.revolt.api.routes.googlesheets.ServerData
|
import chat.revolt.api.routes.googlesheets.ServerData
|
||||||
|
import com.google.android.material.color.MaterialColors
|
||||||
|
import java.nio.file.Files.delete
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DiscoverServersList(
|
fun DiscoverServersList(
|
||||||
|
|
@ -118,6 +122,7 @@ fun DiscoverServersList(
|
||||||
ServerItem(
|
ServerItem(
|
||||||
server = server,
|
server = server,
|
||||||
isProcessing = uiState.processingServerId == server.id,
|
isProcessing = uiState.processingServerId == server.id,
|
||||||
|
isJoined = isServerAlreadyJoined(server.id),
|
||||||
onClick = {
|
onClick = {
|
||||||
if (isJoined) {
|
if (isJoined) {
|
||||||
// If already joined, navigate directly to server channels
|
// If already joined, navigate directly to server channels
|
||||||
|
|
@ -138,15 +143,15 @@ fun DiscoverServersList(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
private fun isServerAlreadyJoined(serverId: String): Boolean {
|
private fun isServerAlreadyJoined(serverId: String): Boolean {
|
||||||
// Check if the server exists in RevoltAPI.serverCache
|
// Check if the server exists in RevoltAPI.serverCache
|
||||||
return RevoltAPI.serverCache.containsKey(serverId)
|
return RevoltAPI.serverCache.containsKey(serverId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ServerItem(
|
fun ServerItem(
|
||||||
server: ServerData,
|
server: ServerData,
|
||||||
|
isJoined: Boolean,
|
||||||
onClick: () -> Unit,
|
onClick: () -> Unit,
|
||||||
isProcessing: Boolean = false
|
isProcessing: Boolean = false
|
||||||
) {
|
) {
|
||||||
|
|
@ -154,9 +159,6 @@ fun ServerItem(
|
||||||
val contentAlpha = if (server.disabled) 0.5f else 1.0f
|
val contentAlpha = if (server.disabled) 0.5f else 1.0f
|
||||||
val descriptionAlpha = if (server.disabled) 0.4f else 0.7f
|
val descriptionAlpha = if (server.disabled) 0.4f else 0.7f
|
||||||
|
|
||||||
// Check if the server is already joined
|
|
||||||
val isJoined = isServerAlreadyJoined(server.id)
|
|
||||||
|
|
||||||
Card(
|
Card(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
|
|
@ -184,7 +186,9 @@ fun ServerItem(
|
||||||
Text(
|
Text(
|
||||||
text = server.name,
|
text = server.name,
|
||||||
style = MaterialTheme.typography.titleMedium,
|
style = MaterialTheme.typography.titleMedium,
|
||||||
color = MaterialTheme.colorScheme.onBackground.copy(alpha = contentAlpha)
|
color = MaterialTheme.colorScheme.onBackground.copy(
|
||||||
|
alpha = contentAlpha
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
Spacer(modifier = Modifier.height(4.dp))
|
Spacer(modifier = Modifier.height(4.dp))
|
||||||
|
|
@ -219,16 +223,17 @@ fun ServerItem(
|
||||||
// Show tick icon with green background for joined servers
|
// Show tick icon with green background for joined servers
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.size(24.dp)
|
.size(20.dp)
|
||||||
.clip(CircleShape)
|
.clip(CircleShape)
|
||||||
.background(Color(0xFF4CAF50)) // Green color
|
.background(MaterialTheme.colorScheme.primary) // Green color
|
||||||
.align(Alignment.Center),
|
.align(Alignment.Center),
|
||||||
contentAlignment = Alignment.Center
|
contentAlignment = Alignment.Center
|
||||||
) {
|
) {
|
||||||
Image(
|
Image(
|
||||||
|
modifier = Modifier.size(16.dp),
|
||||||
painter = painterResource(R.drawable.icn_check_24dp),
|
painter = painterResource(R.drawable.icn_check_24dp),
|
||||||
contentDescription = "Already joined",
|
contentDescription = "Already joined",
|
||||||
colorFilter = ColorFilter.tint(Color.White)
|
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onPrimary)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -249,3 +254,38 @@ fun ServerItem(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun ServerItemPreview() {
|
||||||
|
val server = ServerData(
|
||||||
|
id = "1",
|
||||||
|
name = "Revolt Lounge",
|
||||||
|
description = "The official Revolt server. Hang out, chat, and get help with Revolt.",
|
||||||
|
inviteCode = "revolt",
|
||||||
|
disabled = false
|
||||||
|
)
|
||||||
|
ServerItem(
|
||||||
|
server = server,
|
||||||
|
onClick = {},
|
||||||
|
isJoined = false,
|
||||||
|
isProcessing = false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun JoinedServerItemPreview() {
|
||||||
|
val server = ServerData(
|
||||||
|
id = "1",
|
||||||
|
name = "Revolt Lounge",
|
||||||
|
description = "The official Revolt server. Hang out, chat, and get help with Revolt.",
|
||||||
|
inviteCode = "revolt",
|
||||||
|
disabled = false
|
||||||
|
)
|
||||||
|
ServerItem(
|
||||||
|
server = server,
|
||||||
|
onClick = {},
|
||||||
|
isJoined = true,
|
||||||
|
isProcessing = false
|
||||||
|
)
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue