From 1a5c38c372bba34d57966dfefdd4f867d8cb2535 Mon Sep 17 00:00:00 2001 From: Dany Bouca Nova Date: Tue, 4 Apr 2023 15:41:44 +0200 Subject: [PATCH] Release/1.7.3 (#198) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Button][Preview] - Make preview private * fix(TextField) update textFieldValueState if different from lastTextValue * Task/calendar improvements (#197) * [Button][Preview] - Make preview private * [Compose] - Bump Material 3 & calendar improvements * [Bump Grapes Version] - 1.7.3 --------- Co-authored-by: Kélian CLERC Co-authored-by: Jean-Philippe <112860634+jpbarbaud@users.noreply.github.com> --- build.gradle | 4 ++-- .../compose/calendar/GrapesDatePicker.kt | 23 +++++++++++-------- .../compose/calendar/GrapesTimePicker.kt | 4 +++- .../grapes/compose/message/Message.kt | 1 - .../compose/textfield/GrapesBaseTextField.kt | 6 +++++ 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index eecbe5cd..3fd905ac 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - grapes_version = '1.7.2' + grapes_version = '1.7.3' kotlin_version = '1.7.10' firebase_app_distribution_version = '2.1.2' @@ -12,7 +12,7 @@ buildscript { compose_version = '1.2.1' compose_kotlin_compiler = '1.3.1' compose_bom_version = '2023.01.00' - compose_material_3_version = '1.1.0-alpha08' + compose_material_3_version = '1.1.0-beta01' android_material_version = '1.4.0' androidx_core_ktx_version = '1.9.0' 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 7c82b4f2..d1bef1ff 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,18 +2,18 @@ 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.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 import com.spendesk.grapes.compose.extensions.resetDateToTomorrowMidnight import com.spendesk.grapes.compose.theme.GrapesTheme import java.util.Calendar -import java.util.Calendar.YEAR import java.util.Date import java.util.TimeZone @@ -35,25 +35,26 @@ import java.util.TimeZone @Composable fun GrapesDatePicker( modifier: Modifier = Modifier, - date: Date = Date(), + date: Date? = null, minDate: Date? = null, maxDate: Date? = null, onDateSelected: ((Date) -> Unit)? = null ) { - val cal = Calendar.getInstance().apply { time = date } - val selectedDate = - rememberDatePickerState( - initialSelectedDateMillis = date.time, - initialDisplayedMonthMillis = null, - yearRange = IntRange(cal.get(YEAR) - 3, cal.get(YEAR)), + val selectedDate = remember(date, minDate, maxDate) { + DatePickerState( + initialSelectedDateMillis = date?.time, + initialDisplayedMonthMillis = date?.time, + yearRange = DatePickerDefaults.YearRange, initialDisplayMode = DisplayMode.Picker ) + } DatePicker( state = selectedDate, modifier = modifier, showModeToggle = false, title = null, + headline = null, colors = DatePickerDefaults.colors( containerColor = GrapesTheme.colors.mainBackground, titleContentColor = GrapesTheme.colors.mainNeutralDarkest, @@ -82,7 +83,9 @@ fun GrapesDatePicker( LaunchedEffect(selectedDate.selectedDateMillis) { selectedDate.selectedDateMillis?.let { - onDateSelected?.invoke(Date(it)) + if (Date(it).resetDateToMidnight() != date?.resetDateToMidnight()) { + onDateSelected?.invoke(Date(it)) + } } } } diff --git a/library-compose/src/main/java/com/spendesk/grapes/compose/calendar/GrapesTimePicker.kt b/library-compose/src/main/java/com/spendesk/grapes/compose/calendar/GrapesTimePicker.kt index 4f179259..ec793e7f 100644 --- a/library-compose/src/main/java/com/spendesk/grapes/compose/calendar/GrapesTimePicker.kt +++ b/library-compose/src/main/java/com/spendesk/grapes/compose/calendar/GrapesTimePicker.kt @@ -56,7 +56,9 @@ fun GrapesTimePicker( ) LaunchedEffect(timerPickerState.hour, timerPickerState.minute) { - onTimeSelected?.invoke(timerPickerState.hour, timerPickerState.minute) + if (timerPickerState.hour != initialHour && timerPickerState.minute != initialMinute) { + onTimeSelected?.invoke(timerPickerState.hour, timerPickerState.minute) + } } } diff --git a/library-compose/src/main/java/com/spendesk/grapes/compose/message/Message.kt b/library-compose/src/main/java/com/spendesk/grapes/compose/message/Message.kt index ec863376..18d445a6 100644 --- a/library-compose/src/main/java/com/spendesk/grapes/compose/message/Message.kt +++ b/library-compose/src/main/java/com/spendesk/grapes/compose/message/Message.kt @@ -1,7 +1,6 @@ package com.spendesk.grapes.compose.message import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment diff --git a/library-compose/src/main/java/com/spendesk/grapes/compose/textfield/GrapesBaseTextField.kt b/library-compose/src/main/java/com/spendesk/grapes/compose/textfield/GrapesBaseTextField.kt index 6c3f283e..188b108c 100644 --- a/library-compose/src/main/java/com/spendesk/grapes/compose/textfield/GrapesBaseTextField.kt +++ b/library-compose/src/main/java/com/spendesk/grapes/compose/textfield/GrapesBaseTextField.kt @@ -87,6 +87,12 @@ internal fun GrapesBaseTextField( // CoreTextField's onValueChange is called multiple times without recomposition in between. var lastTextValue by remember(value) { mutableStateOf(value) } + SideEffect { + if (textFieldValueState.text != lastTextValue) { + textFieldValueState = textFieldValueState.copy(text = value) + } + } + GrapesBaseTextField( value = textFieldValueState, placeholderValue = placeholderValue,