From 84bf24c95be1cbb2734b4c6eb22f2e3b04223aac Mon Sep 17 00:00:00 2001 From: Kelian CLERC Date: Mon, 12 Feb 2024 13:53:38 +0100 Subject: [PATCH 1/2] Bump bom version --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f7d911c0..277e1c54 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ androidx-appcompat = "1.6.1" android-material-version = '1.9.0' # Compose -compose-bom = "2023.10.01" +compose-bom = "2024.02.00" compose-kotlin-compiler = "1.5.7" # Image From a80a3d228f0c169a82edd702ff1d6a7b93de4769 Mon Sep 17 00:00:00 2001 From: Kelian CLERC Date: Mon, 12 Feb 2024 13:53:51 +0100 Subject: [PATCH 2/2] Fix datepicker breaking change --- .../compose/calendar/GrapesDatePicker.kt | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/library-compose/src/main/java/com/spendesk/grapes/compose/calendar/GrapesDatePicker.kt b/library-compose/src/main/java/com/spendesk/grapes/compose/calendar/GrapesDatePicker.kt index d1bef1ff..42e598e9 100644 --- a/library-compose/src/main/java/com/spendesk/grapes/compose/calendar/GrapesDatePicker.kt +++ b/library-compose/src/main/java/com/spendesk/grapes/compose/calendar/GrapesDatePicker.kt @@ -2,12 +2,12 @@ package com.spendesk.grapes.compose.calendar import androidx.compose.material3.DatePicker import androidx.compose.material3.DatePickerDefaults -import androidx.compose.material3.DatePickerState import androidx.compose.material3.DisplayMode import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.SelectableDates +import androidx.compose.material3.rememberDatePickerState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import com.spendesk.grapes.compose.extensions.resetDateToMidnight @@ -40,14 +40,22 @@ fun GrapesDatePicker( maxDate: Date? = null, onDateSelected: ((Date) -> Unit)? = null ) { - val selectedDate = remember(date, minDate, maxDate) { - DatePickerState( - initialSelectedDateMillis = date?.time, - initialDisplayedMonthMillis = date?.time, - yearRange = DatePickerDefaults.YearRange, - initialDisplayMode = DisplayMode.Picker - ) - } + val selectedDate = rememberDatePickerState( + initialSelectedDateMillis = date?.time, + initialDisplayedMonthMillis = date?.time, + yearRange = DatePickerDefaults.YearRange, + initialDisplayMode = DisplayMode.Picker, + selectableDates = object : SelectableDates { + override fun isSelectableDate(utcTimeMillis: Long): Boolean { + val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")).apply { timeInMillis = utcTimeMillis } + + val isAfterMinDate = minDate?.let { calendar.time.after(it.resetDateToMidnight()) } ?: true + val isBeforeMaxDate = maxDate?.let { calendar.time.before(it.resetDateToTomorrowMidnight()) } ?: true + + return isAfterMinDate && isBeforeMaxDate + } + } + ) DatePicker( state = selectedDate, @@ -71,14 +79,6 @@ fun GrapesDatePicker( todayContentColor = GrapesTheme.colors.mainPrimaryNormal, todayDateBorderColor = GrapesTheme.colors.mainPrimaryNormal ), - dateValidator = { utcDateInMills -> - val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")).apply { timeInMillis = utcDateInMills } - - val isAfterMinDate = minDate?.let { calendar.time.after(it.resetDateToMidnight()) } ?: true - val isBeforeMaxDate = maxDate?.let { calendar.time.before(it.resetDateToTomorrowMidnight()) } ?: true - - isAfterMinDate && isBeforeMaxDate - } ) LaunchedEffect(selectedDate.selectedDateMillis) {