Merge remote-tracking branch 'origin/Xaver' into Florian

This commit is contained in:
Florian 2025-01-15 10:49:13 +01:00
commit 6e17aff90d
6 changed files with 36 additions and 37 deletions

View File

@ -1,5 +1,7 @@
package at.xaxa.ledger.data package at.xaxa.ledger.data
import kotlinx.coroutines.flow.Flow
class Entry ( class Entry (
val id: Int, val id: Int,
val name: String, val name: String,

View File

@ -5,7 +5,6 @@ import at.xaxa.ledger.data.db.Entry.EntryEntity
import at.xaxa.ledger.data.db.LedgerDao import at.xaxa.ledger.data.db.LedgerDao
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import java.util.Locale.Category
class EntryRepository(private val ledgerDao: LedgerDao){ class EntryRepository(private val ledgerDao: LedgerDao){
@ -44,6 +43,7 @@ class EntryRepository(private val ledgerDao: LedgerDao){
suspend fun updateEntry(entry: Entry) { suspend fun updateEntry(entry: Entry) {
ledgerDao.updateEntry(EntryEntity(entry.id, entry.name, entry.amount, entry.date, entry.categoryID)) ledgerDao.updateEntry(EntryEntity(entry.id, entry.name, entry.amount, entry.date, entry.categoryID))
} }
suspend fun deleteEntry(entry: Entry) { suspend fun deleteEntry(entry: Entry) {
ledgerDao.deleteEntry(EntryEntity(_id = entry.id, entry.name, entry.amount, entry.date, entry.categoryID)) ledgerDao.deleteEntry(EntryEntity(_id = entry.id, entry.name, entry.amount, entry.date, entry.categoryID))
} }

View File

@ -37,7 +37,7 @@ fun LedgerApp(modifier: Modifier = Modifier){
composable(AppRoutes.Home.route){ composable(AppRoutes.Home.route){
Home( Home(
onCardClick = { onCardClick = {
navController.navigate("edit/$id") navController.navigate("edit/$it")
}, },
onButtonClick = { onButtonClick = {
navController.navigate("add") navController.navigate("add")
@ -57,7 +57,6 @@ fun LedgerApp(modifier: Modifier = Modifier){
}) })
) { ) {
backStackEntry -> backStackEntry ->
Log.w("xaver", "edit")
Edit( Edit(
modifier = Modifier, modifier = Modifier,
onCardClick = { onCardClick = {

View File

@ -1,12 +1,10 @@
package at.xaxa.ledger.ui.add package at.xaxa.ledger.ui.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.material3.Button
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
@ -17,6 +15,7 @@ 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
import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
@ -28,7 +27,6 @@ import at.xaxa.ledger.data.Entry
import at.xaxa.ledger.ui.AppViewModelProvider import at.xaxa.ledger.ui.AppViewModelProvider
import at.xaxa.ledger.ui.ButtonSuccess import at.xaxa.ledger.ui.ButtonSuccess
import at.xaxa.ledger.ui.DatePickerDocked import at.xaxa.ledger.ui.DatePickerDocked
import at.xaxa.ledger.ui.home.HomeViewModel
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -42,20 +40,11 @@ fun Add(
val categories by addViewModel.categoryUiState.categories.collectAsState(initial = emptyList()) val categories by addViewModel.categoryUiState.categories.collectAsState(initial = emptyList())
var spending by remember { mutableStateOf("") } var spending by remember { mutableStateOf("") }
var selectedDate by remember { mutableLongStateOf(0) }
var selectedDate by remember { mutableStateOf<Long>(0) }
var expanded by remember { mutableStateOf(false) } var expanded by remember { mutableStateOf(false) }
var selectedItem by remember { mutableStateOf("") } var selectedItem by remember { mutableStateOf("") }
var selectedCategory by remember { mutableIntStateOf(-1) } var selectedCategory by remember { mutableIntStateOf(-1) }
var entryName by remember { mutableStateOf("") }
var entryAmount by remember { mutableStateOf(0.0f) }
var entryDate by remember { mutableStateOf(0L) }
var category by remember { mutableStateOf(0) }
Column( Column(
modifier = modifier modifier = modifier
.fillMaxSize() .fillMaxSize()

View File

@ -1,26 +1,25 @@
package at.xaxa.ledger.ui.edit package at.xaxa.ledger.ui.edit
import androidx.compose.foundation.layout.Arrangement import android.util.Log
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
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.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
import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.ExposedDropdownMenuDefaults.TrailingIcon
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text import androidx.compose.material3.Text
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
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.BiasAlignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
@ -28,19 +27,26 @@ import at.xaxa.ledger.ui.AppViewModelProvider
import at.xaxa.ledger.ui.ButtonDanger import at.xaxa.ledger.ui.ButtonDanger
import at.xaxa.ledger.ui.ButtonSuccess import at.xaxa.ledger.ui.ButtonSuccess
import at.xaxa.ledger.ui.DatePickerDocked import at.xaxa.ledger.ui.DatePickerDocked
import at.xaxa.ledger.ui.home.HomeViewModel
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun Edit(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, EditViewModel : EditViewModel = viewModel(factory = AppViewModelProvider.Factory)) { fun Edit(modifier: Modifier = Modifier, onCardClick: () -> Unit, editViewModel : EditViewModel = viewModel(factory = AppViewModelProvider.Factory)) {
val entry = editViewModel.editUiState.entry
val categories by editViewModel.categoryUiState.categories.collectAsState(initial = emptyList())
var name by remember { mutableStateOf("") } Log.w("xaver", entry.name)
var spending by remember { mutableStateOf("") } Log.w("xaver", entry.amount.toString())
Log.w("xaver", entry.date.toString())
Log.w("xaver", editViewModel.categoryUi.categories.categoryName)
Log.w("xaver", entry.categoryID.toString())
var selectedDate by remember { mutableStateOf<Long?>(null) }
var name by remember { mutableStateOf(entry.name) }
var spending by remember { mutableStateOf(entry.amount.toString()) }
var selectedDate by remember { mutableLongStateOf(entry.date) }
var expanded by remember { mutableStateOf(false) } var expanded by remember { mutableStateOf(false) }
var selectedItem by remember { mutableStateOf("") } var selectedItem by remember { mutableStateOf(editViewModel.categoryUi.categories.categoryName) }
val categories = listOf("Option 1", "Option 2", "Option 3") var selectedCategory by remember { mutableIntStateOf(entry.categoryID) }
Column( Column(
modifier = modifier.fillMaxSize() modifier = modifier.fillMaxSize()
@ -76,7 +82,7 @@ fun Edit(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, EditViewMode
label = { Text("Category") }, label = { Text("Category") },
readOnly = true, readOnly = true,
trailingIcon = { trailingIcon = {
ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) TrailingIcon(expanded = expanded)
}, },
modifier = Modifier modifier = Modifier
.menuAnchor() .menuAnchor()
@ -90,9 +96,10 @@ fun Edit(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, EditViewMode
) { ) {
categories.forEach { item -> categories.forEach { item ->
DropdownMenuItem( DropdownMenuItem(
text = { Text(text = item) }, text = { Text(text = item.categoryName) },
onClick = { onClick = {
selectedItem = item selectedItem = item.categoryName
selectedCategory = item._id
expanded = false expanded = false
} }
) )
@ -114,12 +121,12 @@ fun Edit(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, EditViewMode
.fillMaxWidth() .fillMaxWidth()
.padding(bottom = 8.dp), .padding(bottom = 8.dp),
text = "Delete", text = "Delete",
onClick = { print("test") } onClick = { onCardClick() }
) )
ButtonSuccess( ButtonSuccess(
modifier = Modifier.fillMaxWidth(), // Add spacing between buttons modifier = Modifier.fillMaxWidth(), // Add spacing between buttons
text = "Done", text = "Done",
onClick = { print("test") } onClick = { onCardClick() }
) )
} }
} }

View File

@ -1,5 +1,6 @@
package at.xaxa.ledger.ui.edit package at.xaxa.ledger.ui.edit
import android.util.Log
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
@ -27,12 +28,11 @@ class EditViewModel(private val savedStateHandle: SavedStateHandle,
private val entryRepository: EntryRepository) : ViewModel() { private val entryRepository: EntryRepository) : ViewModel() {
private val entryId: Int = checkNotNull(savedStateHandle["entryId"]) private val entryId: Int = checkNotNull(savedStateHandle["entryId"])
private val categoryId: Int = checkNotNull(savedStateHandle["categoryId"])
var editUiState by mutableStateOf(EditUI()) var editUiState by mutableStateOf(EditUI())
var categoryUiState by mutableStateOf(CategoryListUIState()) var categoryUiState by mutableStateOf(CategoryListUIState())
var categoryui by mutableStateOf(CategoryUIState()) var categoryUi by mutableStateOf(CategoryUIState())
init { init {
@ -41,6 +41,8 @@ class EditViewModel(private val savedStateHandle: SavedStateHandle,
entryRepository.findEntryById(entryId) entryRepository.findEntryById(entryId)
} }
editUiState = EditUI(entry) editUiState = EditUI(entry)
findCategoryByID(entry.categoryID)
} }
} }
@ -67,12 +69,12 @@ class EditViewModel(private val savedStateHandle: SavedStateHandle,
} }
} }
fun findCategoryByID() { fun findCategoryByID(categoryId: Int) {
viewModelScope.launch { viewModelScope.launch {
val category = withContext(Dispatchers.IO) { val category = withContext(Dispatchers.IO) {
entryRepository.findCategoryById(categoryId) entryRepository.findCategoryById(categoryId)
} }
categoryui = CategoryUIState(category) categoryUi = CategoryUIState(category)
} }