refactor + feat: updated UI and added cards search logic

This commit is contained in:
2026-06-23 15:11:33 +03:00
parent d3c194ce9c
commit 8fe59df6f9
10 changed files with 255 additions and 96 deletions
@@ -21,11 +21,13 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material3.Button
@@ -60,6 +62,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
@@ -73,12 +76,13 @@ import kotlinx.coroutines.launch
fun Page(
name: String,
innerPadding: PaddingValues,
topBarAdditionalElements: @Composable () -> Unit = {},
floatingActionButton: @Composable (() -> Unit) = {},
content: @Composable () -> Unit
) {
Scaffold(
topBar = {
TopBar(name, innerPadding)
TopBar(name, innerPadding, topBarAdditionalElements)
},
floatingActionButton = floatingActionButton
) { padding ->
@@ -154,7 +158,11 @@ fun ExpandableFab(
}
@Composable
fun TopBar(text: String, innerPadding: PaddingValues) {
fun TopBar(
text: String,
innerPadding: PaddingValues,
topBarAdditionalElements: @Composable () -> Unit = {}
) {
Row(
modifier = Modifier
.fillMaxWidth()
@@ -162,7 +170,7 @@ fun TopBar(text: String, innerPadding: PaddingValues) {
.padding(top = innerPadding.calculateTopPadding())
.padding(vertical = 12.dp, horizontal = 12.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp)
horizontalArrangement = Arrangement.SpaceBetween
) {
Text(
text,
@@ -170,6 +178,8 @@ fun TopBar(text: String, innerPadding: PaddingValues) {
fontSize = 24.sp,
color = MaterialTheme.colorScheme.onPrimaryContainer
)
topBarAdditionalElements()
}
}
@@ -202,7 +212,7 @@ fun CardButton(cardInfo: CardInfo, onDeleteCard: (Int) -> Unit) {
)
},
shape = RoundedCornerShape(12.dp),
color = cardColor.copy(0.425f),
color = MaterialTheme.colorScheme.primaryContainer.copy(0.625f),
tonalElevation = 2.dp,
) {
Row(
@@ -296,25 +306,46 @@ fun AdaptiveButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
icon: ImageVector? = null,
elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
border: BorderStroke? = null,
contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
interactionSource: MutableInteractionSource? = null,
isSecondary: Boolean = false,
content: @Composable RowScope.() -> Unit
) {
val colors = if (isSecondary)
ButtonDefaults.buttonColors(
containerColor = MaterialTheme.colorScheme.secondaryContainer,
contentColor = MaterialTheme.colorScheme.onSecondaryContainer
)
else
ButtonDefaults.buttonColors(
containerColor = MaterialTheme.colorScheme.primaryContainer,
contentColor = MaterialTheme.colorScheme.onPrimaryContainer
)
Button(
onClick = onClick,
modifier = modifier,
enabled = enabled,
shape = RoundedCornerShape(12.dp),
colors = ButtonDefaults.buttonColors(
containerColor = MaterialTheme.colorScheme.primaryContainer,
contentColor = MaterialTheme.colorScheme.onPrimaryContainer
),
colors = colors,
elevation = elevation,
border = border,
contentPadding = contentPadding,
interactionSource = interactionSource,
content = content
content = {
if (icon != null) {
Icon(
imageVector = icon,
contentDescription = null,
modifier = Modifier.size(18.dp)
)
Spacer(modifier = Modifier.width(8.dp))
}
content()
}
)
}