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

# Conflicts:
#	Ledger/app/src/main/java/at/xaxa/ledger/ui/add/AddUI.kt
This commit is contained in:
Florian 2025-01-14 15:33:21 +01:00
commit b0511a0596
4 changed files with 131 additions and 9 deletions

View File

@ -5,17 +5,20 @@ import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import at.xaxa.ledger.ui.add.Add
import at.xaxa.ledger.ui.edit.Edit
import at.xaxa.ledger.ui.home.Home
enum class AppRoutes(val route: String) {
Home("home"),
Add("add"),
Edit("edit/{gameId}")
Edit("edit/{entryId}")
}
@Composable
@ -43,21 +46,23 @@ fun LedgerApp(modifier: Modifier = Modifier){
composable(AppRoutes.Add.route) {
Add(onCardClick = {
navController.navigate("add")
navController.navigate("home")
})
}
/*
composable(
route = AppRoutes.Edit.route,
arguments = listOf(navArgument("gameId") {
arguments = listOf(navArgument("entryId") {
type = NavType.IntType
})
) {
backStackEntry ->
DetailView(
modifier = Modifier
Edit(
modifier = Modifier,
onCardClick = {
navController.navigate("home")
}
)
}*/
}
}
}
}

View File

@ -266,7 +266,7 @@ private fun CustomButton(modifier: Modifier = Modifier, text: String, onClick: (
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DatePickerDocked() {
fun DatePickerDocked(onDateSelected: (Long) -> Unit) {
var showDatePicker by remember { mutableStateOf(false) }
val datePickerState = rememberDatePickerState()
val selectedDate = datePickerState.selectedDateMillis?.let {
@ -300,6 +300,10 @@ fun DatePickerDocked() {
TextButton(
onClick = {
showDatePicker = false
// Notify the parent about the selected date
datePickerState.selectedDateMillis?.let { millis ->
onDateSelected(millis)
}
}
) {
Text("OK")

View File

@ -43,6 +43,7 @@ fun Add(
var spending by remember { mutableStateOf("") }
var selectedDate by remember { mutableStateOf<Long?>(null) }
var expanded by remember { mutableStateOf(false) }
var selectedItem by remember { mutableStateOf("") }
var selectedCategory by remember { mutableIntStateOf(-1) }
@ -115,7 +116,9 @@ fun Add(
}
}
entryDate = DatePickerDocked()
DatePickerDocked{
dateMilis -> selectedDate = dateMilis
}
}
Box(

View File

@ -1,2 +1,112 @@
package at.xaxa.ledger.ui.edit
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.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExposedDropdownMenuBox
import androidx.compose.material3.ExposedDropdownMenuDefaults
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
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.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("") }
var selectedDate by remember { mutableStateOf<Long?>(null) }
var expanded by remember { mutableStateOf(false) }
var selectedItem by remember { mutableStateOf("") }
val categories = listOf("Option 1", "Option 2", "Option 3")
Column(
modifier = modifier.fillMaxSize()
.padding(16.dp, 0.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Column(
Modifier.weight(1f)
) {
OutlinedTextField(
value = name,
onValueChange = { name = it },
label = { Text("Name") },
modifier = Modifier
.fillMaxWidth()
)
OutlinedTextField(
value = spending,
onValueChange = { spending = it },
label = { Text("Spending") },
modifier = Modifier
.fillMaxWidth()
)
ExposedDropdownMenuBox(
expanded = expanded,
onExpandedChange = { expanded = it }
) {
// TextField to display the selected item and trigger the dropdown
OutlinedTextField(
value = selectedItem,
onValueChange = {},
label = { Text("Category") },
readOnly = true,
trailingIcon = {
ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded)
},
modifier = Modifier
.menuAnchor()
.fillMaxWidth()
)
// Dropdown menu
ExposedDropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false }
) {
categories.forEach { item ->
DropdownMenuItem(
text = { Text(text = item) },
onClick = {
selectedItem = item
expanded = false
}
)
}
}
}
DatePickerDocked{
dateMilis -> selectedDate = dateMilis
}
}
Box(
modifier = Modifier
.fillMaxWidth(),
contentAlignment = Alignment.Center
) {
ButtonDanger(modifier = Modifier, "Delete Transaction", onClick = { print("test") })
ButtonSuccess(modifier = Modifier, "Add Transaction", onClick = { print("test") })
}
}
}