From 29fe4182bea40f4235f803772fe0b1a9dab9236b Mon Sep 17 00:00:00 2001 From: Florian Date: Tue, 14 Jan 2025 14:31:00 +0100 Subject: [PATCH] Connection between AddUI and AddViewmodel?!?!? --- .../at/xaxa/ledger/ui/AppViewModelProvider.kt | 5 +-- .../main/java/at/xaxa/ledger/ui/add/AddUI.kt | 36 ++++++++++++++++++- .../at/xaxa/ledger/ui/add/AddViewModel.kt | 27 +++++++------- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/AppViewModelProvider.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/AppViewModelProvider.kt index c8b83d7..26cc562 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/AppViewModelProvider.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/AppViewModelProvider.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.createSavedStateHandle import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import at.xaxa.ledger.LedgerApplication +import at.xaxa.ledger.ui.add.AddViewModel import at.xaxa.ledger.ui.edit.EditViewModel import at.xaxa.ledger.ui.home.HomeViewModel @@ -15,9 +16,9 @@ object AppViewModelProvider { HomeViewModel((this[APPLICATION_KEY] as LedgerApplication).entryRepository) } - /*initializer { + initializer { AddViewModel(this.createSavedStateHandle(), (this[APPLICATION_KEY] as LedgerApplication).entryRepository) - }*/ + } initializer { EditViewModel(this.createSavedStateHandle(), (this[APPLICATION_KEY] as LedgerApplication).entryRepository) 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 7cca35f..7b78329 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 @@ -4,6 +4,7 @@ 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 @@ -12,6 +13,7 @@ import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -19,19 +21,30 @@ import androidx.compose.runtime.setValue 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.DatePicker import at.xaxa.ledger.ui.home.HomeViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable -fun Add(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, HomeViewModel : HomeViewModel = viewModel(factory = AppViewModelProvider.Factory)) { +fun Add(modifier: Modifier = Modifier, onCardClick: () -> Unit, addViewModel: AddViewModel = viewModel(factory = AppViewModelProvider.Factory)) { + + val state by addViewModel.addUiState.entries.collectAsState(initial = emptyList()) + var spending by remember { mutableStateOf("") } var expanded by remember { mutableStateOf(false) } var selectedItem by remember { mutableStateOf("") } val categories = listOf("Option 1", "Option 2", "Option 3") + 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() @@ -88,5 +101,26 @@ fun Add(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit, HomeViewModel } DatePicker(onDateSelected = { date -> println("Selected date in milliseconds: $date") }, onDismiss = { println("Dismissed") }) + + Button( + onClick = { + if (entryName.isNotBlank() && entryAmount != null && entryDate != null && categories != null) { + val newEntry = Entry( + id = 0, + name = entryName, + amount = entryAmount, + date = entryDate, + categoryID = category + ) + + addViewModel.addEntryToDB(newEntry) + + onCardClick() + } + }, + modifier = Modifier.fillMaxWidth() + ) { + Text("Add Item") + } } } diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/add/AddViewModel.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/add/AddViewModel.kt index 8ac3a5a..d529f86 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/add/AddViewModel.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/add/AddViewModel.kt @@ -26,20 +26,17 @@ var categoryUiState by mutableStateOf(CategoryListUIState()) private set // UI State to hold a list of games -data class EntryListUi( - val entries: Flow> = flow{emit(emptyList()) } +data class EntryUi( + val entries: Flow> = flow { emit(emptyList()) } ) class AddViewModel( private val savedStateHandle: SavedStateHandle, private val repository: EntryRepository ) : ViewModel() { + var addUiState by mutableStateOf(EntryUi()) - var addUiState by mutableStateOf(EntryListUi()) - private set - - - fun addEntryToDB(entry: Entry){ + fun addEntryToDB(entry: Entry) { viewModelScope.launch { try { val entryEntity = Entry( @@ -58,6 +55,7 @@ class AddViewModel( } } } + fun addCategory(category: CategoryEntity) { viewModelScope.launch { try { @@ -75,14 +73,15 @@ class AddViewModel( } } } - fun getAllCategories(){ - viewModelScope.launch { - val categories = withContext(Dispatchers.IO){ - repository.getAllCategories() - } - categoryUiState = CategoryListUIState(categories) - } + fun getAllCategories() { + viewModelScope.launch { + val categories = withContext(Dispatchers.IO) { + repository.getAllCategories() + } + categoryUiState = CategoryListUIState(categories) } + } +}