From 8f44d9978886e75bfe410974e64674151eb68ca1 Mon Sep 17 00:00:00 2001 From: Xaver Date: Wed, 15 Jan 2025 09:49:25 +0100 Subject: [PATCH 1/3] . --- .../main/java/at/xaxa/ledger/data/Entry.kt | 2 ++ .../at/xaxa/ledger/data/EntryRepository.kt | 2 +- .../main/java/at/xaxa/ledger/ui/add/AddUI.kt | 15 ++------- .../java/at/xaxa/ledger/ui/edit/EditUI.kt | 32 +++++++++---------- .../at/xaxa/ledger/ui/edit/EditViewModel.kt | 3 -- 5 files changed, 21 insertions(+), 33 deletions(-) diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/data/Entry.kt b/Ledger/app/src/main/java/at/xaxa/ledger/data/Entry.kt index a61d02b..0d7e11b 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/data/Entry.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/data/Entry.kt @@ -1,5 +1,7 @@ package at.xaxa.ledger.data +import kotlinx.coroutines.flow.Flow + class Entry ( val id: Int, val name: String, diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/data/EntryRepository.kt b/Ledger/app/src/main/java/at/xaxa/ledger/data/EntryRepository.kt index bbb5cfe..7604946 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/data/EntryRepository.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/data/EntryRepository.kt @@ -5,7 +5,6 @@ import at.xaxa.ledger.data.db.Entry.EntryEntity import at.xaxa.ledger.data.db.LedgerDao import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import java.util.Locale.Category class EntryRepository(private val ledgerDao: LedgerDao){ @@ -44,6 +43,7 @@ class EntryRepository(private val ledgerDao: LedgerDao){ suspend fun updateEntry(entry: Entry) { ledgerDao.updateEntry(EntryEntity(entry.id, entry.name, entry.amount, entry.date, entry.categoryID)) } + suspend fun deleteEntry(entry: Entry) { ledgerDao.deleteEntry(EntryEntity(_id = entry.id, entry.name, entry.amount, entry.date, entry.categoryID)) } diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/add/AddUI.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/add/AddUI.kt index bfe037f..28b3092 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/add/AddUI.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/add/AddUI.kt @@ -1,12 +1,10 @@ package at.xaxa.ledger.ui.add -import android.util.Log import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Button import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExposedDropdownMenuBox @@ -17,6 +15,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember 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.ButtonSuccess import at.xaxa.ledger.ui.DatePickerDocked -import at.xaxa.ledger.ui.home.HomeViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -42,20 +40,11 @@ fun Add( val categories by addViewModel.categoryUiState.categories.collectAsState(initial = emptyList()) var spending by remember { mutableStateOf("") } - - var selectedDate by remember { mutableStateOf(0) } + var selectedDate by remember { mutableLongStateOf(0) } var expanded by remember { mutableStateOf(false) } var selectedItem by remember { mutableStateOf("") } 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( modifier = modifier .fillMaxSize() diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt index ac40274..2a38ff8 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt @@ -1,9 +1,6 @@ package at.xaxa.ledger.ui.edit -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -14,31 +11,34 @@ import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment -import androidx.compose.ui.BiasAlignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel +import at.xaxa.ledger.data.Entry import at.xaxa.ledger.ui.AppViewModelProvider import at.xaxa.ledger.ui.ButtonDanger import at.xaxa.ledger.ui.ButtonSuccess import at.xaxa.ledger.ui.DatePickerDocked -import at.xaxa.ledger.ui.home.HomeViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable -fun Edit(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, HomeViewModel : HomeViewModel = viewModel(factory = AppViewModelProvider.Factory)) { - var name by remember { mutableStateOf("") } - var spending by remember { mutableStateOf("") } +fun Edit(modifier: Modifier = Modifier, onCardClick: () -> Unit, editViewModel : EditViewModel = viewModel(factory = AppViewModelProvider.Factory)) { + val libraryEntity = editViewModel.editUiState.entry - var selectedDate by remember { mutableStateOf(null) } + var name by remember { mutableStateOf(libraryEntity.name) } + var spending by remember { mutableStateOf(libraryEntity.amount.toString()) } + var selectedDate by remember { mutableLongStateOf(libraryEntity.date) } var expanded by remember { mutableStateOf(false) } var selectedItem by remember { mutableStateOf("") } - val categories = listOf("Option 1", "Option 2", "Option 3") + val categories by editViewModel.categoryUiState.categories.collectAsState(initial = emptyList()) Column( modifier = modifier.fillMaxSize() @@ -56,9 +56,9 @@ fun Edit(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, HomeViewMode .fillMaxWidth() ) OutlinedTextField( - value = spending, + value = name, onValueChange = { spending = it }, - label = { Text("Spending") }, + label = { Text("Name") }, modifier = Modifier .fillMaxWidth() ) @@ -111,13 +111,13 @@ fun Edit(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, HomeViewMode modifier = Modifier .fillMaxWidth() .padding(bottom = 8.dp), - text = "Delete Transaction", - onClick = { print("test") } + text = "Delete", + onClick = { onCardClick() } ) ButtonSuccess( modifier = Modifier.fillMaxWidth(), // Add spacing between buttons - text = "Add Transaction", - onClick = { print("test") } + text = "Done", + onClick = { onCardClick() } ) } } diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditViewModel.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditViewModel.kt index a028e10..c5cf28f 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditViewModel.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditViewModel.kt @@ -9,9 +9,6 @@ import androidx.lifecycle.viewModelScope import at.xaxa.ledger.data.Entry import at.xaxa.ledger.data.EntryRepository import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import kotlinx.coroutines.withContext From bcf0b9435a6367a941cdce4f3007f72f0d316350 Mon Sep 17 00:00:00 2001 From: Xaver Date: Wed, 15 Jan 2025 09:54:40 +0100 Subject: [PATCH 2/3] . --- .../src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt index 6ffcd53..b84f6bf 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -30,17 +31,16 @@ import at.xaxa.ledger.ui.DatePickerDocked @OptIn(ExperimentalMaterial3Api::class) @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 libraryEntity = editViewModel.editUiState.entry - var name by remember { mutableStateOf("") } - var spending by remember { mutableStateOf("") } + val categories by editViewModel.categoryUiState.categories.collectAsState(initial = emptyList()) var name by remember { mutableStateOf(libraryEntity.name) } var spending by remember { mutableStateOf(libraryEntity.amount.toString()) } var selectedDate by remember { mutableLongStateOf(libraryEntity.date) } var expanded by remember { mutableStateOf(false) } var selectedItem by remember { mutableStateOf("") } - val categories by editViewModel.categoryUiState.categories.collectAsState(initial = emptyList()) + var selectedCategory by remember { mutableIntStateOf(libraryEntity.categoryID) } Column( modifier = modifier.fillMaxSize() @@ -90,9 +90,10 @@ fun Edit(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, EditViewMode ) { categories.forEach { item -> DropdownMenuItem( - text = { Text(text = item) }, + text = { Text(text = item.categoryName) }, onClick = { - selectedItem = item + selectedItem = item.categoryName + selectedCategory = item._id expanded = false } ) From 80a8c8cb065a54c1b9702794cffcadccdaff91a1 Mon Sep 17 00:00:00 2001 From: Xaver Date: Wed, 15 Jan 2025 10:48:29 +0100 Subject: [PATCH 3/3] push me --- .../main/java/at/xaxa/ledger/ui/LedgerApp.kt | 3 +- .../java/at/xaxa/ledger/ui/edit/EditUI.kt | 30 +++++++++++-------- .../at/xaxa/ledger/ui/edit/EditViewModel.kt | 10 ++++--- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerApp.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerApp.kt index 582e843..e78b0cb 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerApp.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerApp.kt @@ -37,7 +37,7 @@ fun LedgerApp(modifier: Modifier = Modifier){ composable(AppRoutes.Home.route){ Home( onCardClick = { - navController.navigate("edit/$id") + navController.navigate("edit/$it") }, onButtonClick = { navController.navigate("add") @@ -57,7 +57,6 @@ fun LedgerApp(modifier: Modifier = Modifier){ }) ) { backStackEntry -> - Log.w("xaver", "edit") Edit( modifier = Modifier, onCardClick = { diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt index b84f6bf..db53b4e 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditUI.kt @@ -1,5 +1,6 @@ package at.xaxa.ledger.ui.edit +import android.util.Log import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -7,13 +8,12 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api 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.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableStateOf @@ -23,7 +23,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel -import at.xaxa.ledger.data.Entry import at.xaxa.ledger.ui.AppViewModelProvider import at.xaxa.ledger.ui.ButtonDanger import at.xaxa.ledger.ui.ButtonSuccess @@ -32,15 +31,22 @@ import at.xaxa.ledger.ui.DatePickerDocked @OptIn(ExperimentalMaterial3Api::class) @Composable fun Edit(modifier: Modifier = Modifier, onCardClick: () -> Unit, editViewModel : EditViewModel = viewModel(factory = AppViewModelProvider.Factory)) { - val libraryEntity = editViewModel.editUiState.entry + val entry = editViewModel.editUiState.entry val categories by editViewModel.categoryUiState.categories.collectAsState(initial = emptyList()) - var name by remember { mutableStateOf(libraryEntity.name) } - var spending by remember { mutableStateOf(libraryEntity.amount.toString()) } - var selectedDate by remember { mutableLongStateOf(libraryEntity.date) } + Log.w("xaver", entry.name) + 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 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 selectedItem by remember { mutableStateOf("") } - var selectedCategory by remember { mutableIntStateOf(libraryEntity.categoryID) } + var selectedItem by remember { mutableStateOf(editViewModel.categoryUi.categories.categoryName) } + var selectedCategory by remember { mutableIntStateOf(entry.categoryID) } Column( modifier = modifier.fillMaxSize() @@ -58,9 +64,9 @@ fun Edit(modifier: Modifier = Modifier, onCardClick: () -> Unit, editViewModel : .fillMaxWidth() ) OutlinedTextField( - value = name, + value = spending, onValueChange = { spending = it }, - label = { Text("Name") }, + label = { Text("Spending") }, modifier = Modifier .fillMaxWidth() ) @@ -76,7 +82,7 @@ fun Edit(modifier: Modifier = Modifier, onCardClick: () -> Unit, editViewModel : label = { Text("Category") }, readOnly = true, trailingIcon = { - ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) + TrailingIcon(expanded = expanded) }, modifier = Modifier .menuAnchor() diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditViewModel.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditViewModel.kt index 7f2b004..dcc8496 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditViewModel.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/edit/EditViewModel.kt @@ -1,5 +1,6 @@ package at.xaxa.ledger.ui.edit +import android.util.Log import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue @@ -27,12 +28,11 @@ class EditViewModel(private val savedStateHandle: SavedStateHandle, private val entryRepository: EntryRepository) : ViewModel() { private val entryId: Int = checkNotNull(savedStateHandle["entryId"]) - private val categoryId: Int = checkNotNull(savedStateHandle["categoryId"]) var editUiState by mutableStateOf(EditUI()) var categoryUiState by mutableStateOf(CategoryListUIState()) - var categoryui by mutableStateOf(CategoryUIState()) + var categoryUi by mutableStateOf(CategoryUIState()) init { @@ -41,6 +41,8 @@ class EditViewModel(private val savedStateHandle: SavedStateHandle, entryRepository.findEntryById(entryId) } editUiState = EditUI(entry) + + findCategoryByID(entry.categoryID) } } @@ -67,12 +69,12 @@ class EditViewModel(private val savedStateHandle: SavedStateHandle, } } - fun findCategoryByID() { + fun findCategoryByID(categoryId: Int) { viewModelScope.launch { val category = withContext(Dispatchers.IO) { entryRepository.findCategoryById(categoryId) } - categoryui = CategoryUIState(category) + categoryUi = CategoryUIState(category) }