adding works again

This commit is contained in:
Xaver 2025-01-16 15:55:52 +01:00
parent a0860c85ba
commit 7e66cdc30b
2 changed files with 55 additions and 12 deletions

View File

@ -25,7 +25,6 @@ class OverviewCategoryViewModel(
private val repository: EntryRepository private val repository: EntryRepository
) : ViewModel() { ) : ViewModel() {
var categoryUiState by mutableStateOf(CategoryListUIState()) var categoryUiState by mutableStateOf(CategoryListUIState())
var categoryUi by mutableStateOf(CategoryUIState())
private set private set
init { init {

View File

@ -1,10 +1,14 @@
package at.xaxa.ledger.ui.entry.add package at.xaxa.ledger.ui.entry.add
import android.util.Log
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuBox
@ -12,6 +16,7 @@ import androidx.compose.material3.ExposedDropdownMenuDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -30,6 +35,7 @@ import at.xaxa.ledger.ui.ButtonSuccess
import at.xaxa.ledger.ui.DatePickerDocked import at.xaxa.ledger.ui.DatePickerDocked
import at.xaxa.ledger.ui.category.iconNames import at.xaxa.ledger.ui.category.iconNames
import at.xaxa.ledger.ui.category.icons import at.xaxa.ledger.ui.category.icons
import kotlin.math.log
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -39,12 +45,41 @@ fun Add(
addViewModel: AddViewModel = viewModel(factory = AppViewModelProvider.Factory) addViewModel: AddViewModel = viewModel(factory = AppViewModelProvider.Factory)
) { ) {
var name by remember { mutableStateOf("") } var name by remember { mutableStateOf("") }
var categories = addViewModel.categoryUiState.categories.collectAsState(emptyList()).value
var spending by remember { mutableStateOf("") } var spending by remember { mutableStateOf("") }
var selectedDate by remember { mutableLongStateOf(0) } var selectedDate by remember { mutableLongStateOf(System.currentTimeMillis()) }
var expanded by remember { mutableStateOf(false) } var expanded by remember { mutableStateOf(false) }
var selectedIconIndex by remember { mutableStateOf(0) } // Store index of selected icon var selectedIconIndex by remember { mutableStateOf(0) } // Store index of selected icon
var selectedCategoryName by remember { mutableStateOf("") } // Store index of selected icon
var selectedCategory by remember { mutableIntStateOf(-1) } var selectedCategory by remember { mutableIntStateOf(-1) }
var parsingError by remember { mutableStateOf(false) }
if (parsingError) {
AlertDialog(
icon = {
Icon(Icons.Default.Info, contentDescription = "Info Icon")
},
title = {
Text(text = "Parsing error")
},
text = {
Text(text = "One or more fields contain invalid input. Please review your entries and try again.")
},
onDismissRequest = {
parsingError = false
},
confirmButton = {
TextButton(
onClick = {
parsingError = false
}
) {
Text("Okay")
}
}
)
}
Column( Column(
modifier = modifier modifier = modifier
@ -76,9 +111,9 @@ fun Add(
onExpandedChange = { expanded = it } onExpandedChange = { expanded = it }
) { ) {
OutlinedTextField( OutlinedTextField(
value = iconNames[selectedIconIndex], // Show selected icon name value = selectedCategoryName, // Show selected icon name
onValueChange = {}, onValueChange = {},
label = { Text("Icon") }, label = { Text("Category") },
readOnly = true, readOnly = true,
leadingIcon = { leadingIcon = {
Icon( Icon(
@ -98,17 +133,19 @@ fun Add(
expanded = expanded, expanded = expanded,
onDismissRequest = { expanded = false } onDismissRequest = { expanded = false }
) { ) {
icons.forEachIndexed { index, icon -> categories.forEachIndexed { index, category ->
DropdownMenuItem( DropdownMenuItem(
text = { Text(text = iconNames[index]) }, // Use name from iconNames text = { Text(text = category.categoryName) }, // Use name from iconNames
onClick = { onClick = {
selectedIconIndex = index // Update selected index selectedIconIndex = category.icon // Update selected index
expanded = false expanded = false
selectedCategoryName = category.categoryName
selectedCategory = category._id
}, },
leadingIcon = { leadingIcon = {
androidx.compose.material3.Icon( androidx.compose.material3.Icon(
imageVector = icon, imageVector = icons[category.icon],
contentDescription = iconNames[index] contentDescription = iconNames[category.icon]
) )
} }
) )
@ -116,8 +153,8 @@ fun Add(
} }
} }
DatePickerDocked{ DatePickerDocked { dateMilis ->
dateMilis -> selectedDate = dateMilis selectedDate = dateMilis
} }
} }
@ -130,7 +167,12 @@ fun Add(
modifier = Modifier, modifier = Modifier,
"Add Transaction", "Add Transaction",
onClick = { onClick = {
if (name.isNotBlank() && spending.toFloat() != 0f && selectedDate != 0L && selectedCategory != -1) { val isValidSpending = spending.matches(Regex("^[+-]?\\d*(\\.\\d+)?$"))
Log.w("xaxaxa", name.isNotBlank().toString() )
Log.w("xaxaxa", isValidSpending.toString() )
Log.w("xaxaxa", (selectedDate != 0L).toString() )
Log.w("xaxaxa", (selectedCategory != -1).toString() )
if (name.isNotBlank() && isValidSpending && selectedDate != 0L && selectedCategory != -1) {
val newEntry = Entry( val newEntry = Entry(
id = 0, id = 0,
name = name, name = name,
@ -140,6 +182,8 @@ fun Add(
) )
addViewModel.addEntryToDB(newEntry) addViewModel.addEntryToDB(newEntry)
onCardClick() onCardClick()
} else {
parsingError = true;
} }
} }
) )