@@ -3,12 +3,19 @@ package com.prof18.moneyflow.presentation.addtransaction
33import androidx.compose.foundation.layout.Column
44import androidx.compose.foundation.layout.fillMaxWidth
55import androidx.compose.foundation.layout.padding
6+ import androidx.compose.material3.DatePicker
7+ import androidx.compose.material3.DatePickerDefaults
8+ import androidx.compose.material3.DatePickerDialog
9+ import androidx.compose.material3.ExperimentalMaterial3Api
610import androidx.compose.material3.Icon
711import androidx.compose.material3.MaterialTheme
812import androidx.compose.material3.Scaffold
913import androidx.compose.material3.SnackbarHost
1014import androidx.compose.material3.SnackbarHostState
1115import androidx.compose.material3.Surface
16+ import androidx.compose.material3.Text
17+ import androidx.compose.material3.TextButton
18+ import androidx.compose.material3.rememberDatePickerState
1219import androidx.compose.runtime.Composable
1320import androidx.compose.runtime.LaunchedEffect
1421import androidx.compose.runtime.State
@@ -20,7 +27,6 @@ import androidx.compose.ui.text.input.KeyboardType
2027import androidx.compose.ui.tooling.preview.Preview
2128import com.prof18.moneyflow.database.model.TransactionType
2229import com.prof18.moneyflow.domain.entities.CurrencyConfig
23- import com.prof18.moneyflow.presentation.addtransaction.components.DatePickerDialog
2430import com.prof18.moneyflow.presentation.addtransaction.components.IconTextClickableRow
2531import com.prof18.moneyflow.presentation.addtransaction.components.MFTextInput
2632import com.prof18.moneyflow.presentation.addtransaction.components.TransactionTypeTabBar
@@ -32,6 +38,8 @@ import com.prof18.moneyflow.ui.style.Margins
3238import com.prof18.moneyflow.ui.style.MoneyFlowTheme
3339import money_flow.shared.generated.resources.Res
3440import money_flow.shared.generated.resources.add_transaction_screen
41+ import money_flow.shared.generated.resources.cancel
42+ import money_flow.shared.generated.resources.confirm
3543import money_flow.shared.generated.resources.description
3644import money_flow.shared.generated.resources.ic_calendar
3745import money_flow.shared.generated.resources.ic_edit
@@ -42,9 +50,11 @@ import money_flow.shared.generated.resources.select_category
4250import money_flow.shared.generated.resources.today
4351import org.jetbrains.compose.resources.painterResource
4452import org.jetbrains.compose.resources.stringResource
53+ import kotlin.time.Clock
4554
4655@Composable
4756@Suppress(" LongMethod" , " LongParameterList" ) // TODO: reduce method length
57+ @OptIn(ExperimentalMaterial3Api ::class )
4858internal fun AddTransactionScreen (
4959 categoryState : State <CategoryUIData ?>,
5060 navigateUp : () -> Unit ,
@@ -56,16 +66,19 @@ internal fun AddTransactionScreen(
5666 updateDescriptionText : (String? ) -> Unit ,
5767 selectedTransactionType : TransactionType ,
5868 updateTransactionType : (TransactionType ) -> Unit ,
59- updateYear : (Int ) -> Unit ,
60- updateMonth : (Int ) -> Unit ,
61- updateDay : (Int ) -> Unit ,
62- saveDate : () -> Unit ,
69+ updateSelectedDate : (Long ) -> Unit ,
6370 dateLabel : String? ,
71+ selectedDateMillis : Long ,
6472 addTransactionAction : AddTransactionAction ? ,
6573 resetAction : () -> Unit ,
6674 currencyConfig : CurrencyConfig ? ,
6775) {
6876 val (showDatePickerDialog, setShowedDatePickerDialog) = remember { mutableStateOf(false ) }
77+ val datePickerState = rememberDatePickerState(initialSelectedDateMillis = selectedDateMillis)
78+
79+ LaunchedEffect (selectedDateMillis) {
80+ datePickerState.selectedDateMillis = selectedDateMillis
81+ }
6982
7083 val snackbarHostState = remember { SnackbarHostState () }
7184 addTransactionAction?.let {
@@ -111,14 +124,37 @@ internal fun AddTransactionScreen(
111124 },
112125 content = { innerPadding ->
113126 Column (modifier = Modifier .padding(innerPadding)) {
114- DatePickerDialog (
115- showDatePickerDialog,
116- setShowedDatePickerDialog,
117- onYearSelected = { updateYear(it) },
118- onMonthSelected = { updateMonth(it) },
119- onDaySelected = { updateDay(it) },
120- onSave = { saveDate() },
121- )
127+ if (showDatePickerDialog) {
128+ DatePickerDialog (
129+ onDismissRequest = { setShowedDatePickerDialog(false ) },
130+ confirmButton = {
131+ TextButton (
132+ enabled = datePickerState.selectedDateMillis != null ,
133+ onClick = {
134+ datePickerState.selectedDateMillis?.let { selectedDate ->
135+ updateSelectedDate(selectedDate)
136+ }
137+ setShowedDatePickerDialog(false )
138+ },
139+ ) {
140+ Text (text = stringResource(Res .string.confirm))
141+ }
142+ },
143+ dismissButton = {
144+ TextButton (onClick = { setShowedDatePickerDialog(false ) }) {
145+ Text (text = stringResource(Res .string.cancel))
146+ }
147+ },
148+ ) {
149+ DatePicker (
150+ state = datePickerState,
151+ showModeToggle = false ,
152+ colors = DatePickerDefaults .colors(
153+ containerColor = MaterialTheme .colorScheme.surface,
154+ ),
155+ )
156+ }
157+ }
122158
123159 TransactionTypeTabBar (
124160 transactionType = selectedTransactionType,
@@ -225,11 +261,9 @@ private fun AddTransactionScreenPreview() {
225261 updateDescriptionText = {},
226262 selectedTransactionType = TransactionType .OUTCOME ,
227263 updateTransactionType = {},
228- updateYear = {},
229- updateMonth = {},
230- updateDay = {},
231- saveDate = {},
264+ updateSelectedDate = {},
232265 dateLabel = " 11 July 2021" ,
266+ selectedDateMillis = Clock .System .now().toEpochMilliseconds(),
233267 addTransactionAction = null ,
234268 resetAction = {},
235269 currencyConfig = CurrencyConfig (
0 commit comments