delete NewVocListScreen.kt, update NewWordScreen to display recently added items, and refactor VocabularyCard styling in LibraryComponents.kt.
This commit is contained in:
@@ -127,7 +127,7 @@ fun AppCard(
|
||||
// Animate height changes when expanding/collapsing
|
||||
.animateContentSize(),
|
||||
shape = ComponentDefaults.CardShape,
|
||||
color = MaterialTheme.colorScheme.surfaceContainer
|
||||
color = MaterialTheme.colorScheme.surfaceContainer,
|
||||
) {
|
||||
Column {
|
||||
// --- Header Row ---
|
||||
|
||||
@@ -385,14 +385,14 @@ fun VocabularyCard(
|
||||
Card(
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clip(RoundedCornerShape(8.dp))
|
||||
.combinedClickable(
|
||||
onClick = onItemClick,
|
||||
onLongClick = onItemLongClick
|
||||
),
|
||||
shape = RoundedCornerShape(16.dp),
|
||||
colors = CardDefaults.cardColors(
|
||||
containerColor = if (isSelected) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surfaceVariant
|
||||
containerColor = if (isSelected) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surfaceContainer,
|
||||
contentColor = if (isSelected) MaterialTheme.colorScheme.onPrimaryContainer else MaterialTheme.colorScheme.surfaceContainer
|
||||
),
|
||||
border = if (isSelected) BorderStroke(2.dp, MaterialTheme.colorScheme.primary) else null
|
||||
) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -68,9 +68,9 @@ import eu.gaudian.translator.view.composable.AppOutlinedButton
|
||||
import eu.gaudian.translator.view.composable.AppSlider
|
||||
import eu.gaudian.translator.view.composable.AppTopAppBar
|
||||
import eu.gaudian.translator.view.composable.InspiringSearchField
|
||||
import eu.gaudian.translator.view.composable.SingleLanguageDropDown
|
||||
import eu.gaudian.translator.view.composable.SourceLanguageDropdown
|
||||
import eu.gaudian.translator.view.composable.TargetLanguageDropdown
|
||||
import eu.gaudian.translator.view.library.VocabularyCard
|
||||
import eu.gaudian.translator.viewmodel.LanguageViewModel
|
||||
import eu.gaudian.translator.viewmodel.VocabularyViewModel
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -85,6 +85,8 @@ fun NewWordScreen(
|
||||
val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity)
|
||||
val isGenerating by vocabularyViewModel.isGenerating.collectAsState()
|
||||
val generatedItems by vocabularyViewModel.generatedVocabularyItems.collectAsState()
|
||||
val allLanguages by languageViewModel.allLanguages.collectAsState()
|
||||
val recentItems by vocabularyViewModel.vocabularyItems.collectAsState()
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
var category by remember { mutableStateOf("") }
|
||||
var amount by remember { mutableFloatStateOf(8f) }
|
||||
@@ -111,6 +113,10 @@ fun NewWordScreen(
|
||||
var selectedLangSecond by remember { mutableStateOf<Language?>(null) }
|
||||
var parseError by remember { mutableStateOf<String?>(null) }
|
||||
|
||||
val recentlyAdded = remember(recentItems) {
|
||||
recentItems.sortedByDescending { it.id }.take(4)
|
||||
}
|
||||
|
||||
fun parseCsv(text: String): List<List<String>> {
|
||||
if (text.isBlank()) return emptyList()
|
||||
val candidates = listOf(',', ';', '\t')
|
||||
@@ -265,6 +271,40 @@ fun NewWordScreen(
|
||||
}
|
||||
)
|
||||
|
||||
if (recentlyAdded.isNotEmpty()) {
|
||||
Spacer(modifier = Modifier.height(32.dp))
|
||||
|
||||
Column {
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Text(
|
||||
text = "Recently Added",
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
TextButton(onClick = { navController.navigate("library") }) {
|
||||
Text("View All")
|
||||
}
|
||||
}
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {
|
||||
recentlyAdded.forEach { item ->
|
||||
VocabularyCard(
|
||||
item = item,
|
||||
allLanguages = allLanguages,
|
||||
isSelected = false,
|
||||
onItemClick = { navController.navigate("vocabulary_detail/${item.id}") },
|
||||
onItemLongClick = {},
|
||||
onDeleteClick = {}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Extra padding at the bottom for scroll clearance
|
||||
Spacer(modifier = Modifier.height(100.dp))
|
||||
}
|
||||
@@ -313,7 +353,7 @@ fun NewWordScreen(
|
||||
Row(horizontalArrangement = Arrangement.spacedBy(8.dp), verticalAlignment = Alignment.CenterVertically) {
|
||||
Column(modifier = Modifier.weight(1f)) {
|
||||
Text(stringResource(R.string.label_first_language))
|
||||
SingleLanguageDropDown(
|
||||
eu.gaudian.translator.view.composable.SingleLanguageDropDown(
|
||||
languageViewModel = languageViewModel,
|
||||
selectedLanguage = selectedLangFirst,
|
||||
onLanguageSelected = { selectedLangFirst = it }
|
||||
@@ -321,7 +361,7 @@ fun NewWordScreen(
|
||||
}
|
||||
Column(modifier = Modifier.weight(1f)) {
|
||||
Text(stringResource(R.string.label_second_language))
|
||||
SingleLanguageDropDown(
|
||||
eu.gaudian.translator.view.composable.SingleLanguageDropDown(
|
||||
languageViewModel = languageViewModel,
|
||||
selectedLanguage = selectedLangSecond,
|
||||
onLanguageSelected = { selectedLangSecond = it }
|
||||
|
||||
Reference in New Issue
Block a user