@@ -3,63 +3,70 @@ package app.expense.tracker.ui.views.addExpense
33import androidx.compose.foundation.horizontalScroll
44import androidx.compose.foundation.layout.Column
55import androidx.compose.foundation.layout.Row
6- import androidx.compose.foundation.layout.fillMaxWidth
6+ import androidx.compose.foundation.layout.Spacer
77import androidx.compose.foundation.layout.padding
88import androidx.compose.foundation.rememberScrollState
99import androidx.compose.material.icons.Icons
10+ import androidx.compose.material.icons.outlined.AddCircle
1011import androidx.compose.material.icons.outlined.Clear
1112import androidx.compose.material3.ExperimentalMaterial3Api
1213import androidx.compose.material3.Icon
14+ import androidx.compose.material3.IconButton
1315import androidx.compose.material3.InputChip
1416import androidx.compose.material3.MaterialTheme
1517import androidx.compose.material3.Text
1618import androidx.compose.runtime.Composable
1719import androidx.compose.runtime.MutableState
18- import androidx.compose.runtime.collectAsState
1920import androidx.compose.runtime.mutableStateOf
20- import androidx.compose.runtime.rememberCoroutineScope
21- import androidx.compose.runtime.saveable.rememberSaveable
21+ import androidx.compose.runtime.remember
2222import androidx.compose.ui.Modifier
23+ import androidx.compose.ui.res.dimensionResource
24+ import androidx.compose.ui.res.stringResource
2325import androidx.compose.ui.unit.dp
24- import androidx.hilt.navigation.compose.hiltViewModel
25- import app.expense.presentation.viewModels.CategoriesViewModel
26- import app.expense.tracker.ui.utils.AutoCompleteTextField
27- import kotlinx.coroutines.launch
26+ import app.expense.tracker.R
27+ import app.expense.tracker.ui.utils.CategoryInputDialog
2828
2929@OptIn(ExperimentalMaterial3Api ::class )
3030@Composable
3131fun CategoryView (
32- categories : MutableState <List <String >>,
33- viewModel : CategoriesViewModel = hiltViewModel()
32+ categories : MutableState <List <String >>
3433) {
35-
36- val coroutineScope = rememberCoroutineScope()
37- val suggestions = viewModel.categoriesState.collectAsState().value
38- val category = rememberSaveable { mutableStateOf(" " ) }
34+ val categoryDialogOpen = remember { mutableStateOf(false ) }
3935
4036 Column {
41- AutoCompleteTextField (
42- value = category.value,
43- label = " Category" ,
44- suggestions = suggestions,
45- onCategoryEntered = { value ->
46- category.value = value
47- coroutineScope.launch {
48- viewModel.getCategories(value)
49- }
50- },
51- onCategorySelect = { value ->
52- categories.value = categories.value.toMutableList().apply { add(value.trim()) }
53- category.value = " "
54- },
55- modifier = Modifier
56- .fillMaxWidth()
57- .padding(16 .dp)
58- )
37+ Row (
38+ modifier = Modifier .padding(
39+ start = dimensionResource(id = R .dimen.default_padding),
40+ end = dimensionResource(id = R .dimen.default_padding),
41+ top = dimensionResource(id = R .dimen.default_padding)
42+ )
43+ ) {
44+ Text (
45+ text = stringResource(R .string.category),
46+ style = MaterialTheme .typography.titleMedium
47+ )
48+ Spacer (modifier = Modifier .weight(1f ))
49+ IconButton (onClick = { categoryDialogOpen.value = true }) {
50+ Icon (
51+ imageVector = Icons .Outlined .AddCircle ,
52+ contentDescription = stringResource(R .string.add_category)
53+ )
54+ }
55+
56+ if (categoryDialogOpen.value) {
57+ CategoryInputDialog (onCategoryEntered = { category ->
58+ categories.value = categories.value.toMutableList().apply {
59+ add(0 , category)
60+ }
61+ categoryDialogOpen.value = false
62+ }, onDismiss = { categoryDialogOpen.value = false })
63+ }
64+ }
65+
5966 if (categories.value.isNotEmpty()) {
6067 Row (
6168 modifier = Modifier
62- .padding(start = 16 .dp, end = 16 .dp, top = 4 .dp )
69+ .padding(start = 16 .dp, end = 16 .dp)
6370 .horizontalScroll(rememberScrollState())
6471 ) {
6572 categories.value.filter { it.isNotBlank() }.forEach { item ->
@@ -74,7 +81,7 @@ fun CategoryView(
7481 trailingIcon = {
7582 Icon (
7683 imageVector = Icons .Outlined .Clear ,
77- contentDescription = " Remove category "
84+ contentDescription = stringResource(id = R .string.remove_category)
7885 )
7986 }
8087 )
0 commit comments