From bfcd7f179466ad9ab83a3eceabe922b5aff3392b Mon Sep 17 00:00:00 2001 From: kasiopec Date: Tue, 14 Feb 2023 14:01:43 +0200 Subject: [PATCH] Added ability to hide date in WheelDatePicker --- .../wheel_picker_compose/WheelDatePicker.kt | 2 + .../core/DefaultWheelDatePicker.kt | 81 +++++++++++-------- 2 files changed, 48 insertions(+), 35 deletions(-) diff --git a/wheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/WheelDatePicker.kt b/wheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/WheelDatePicker.kt index 1cb392c..6e43137 100644 --- a/wheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/WheelDatePicker.kt +++ b/wheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/WheelDatePicker.kt @@ -17,6 +17,7 @@ import java.time.LocalDate fun WheelDatePicker( modifier: Modifier = Modifier, startDate: LocalDate = LocalDate.now(), + showDate: Boolean = true, minDate: LocalDate = LocalDate.MIN, maxDate: LocalDate = LocalDate.MAX, yearsRange: IntRange? = IntRange(1922, 2122), @@ -30,6 +31,7 @@ fun WheelDatePicker( DefaultWheelDatePicker( modifier, startDate, + showDate, minDate, maxDate, yearsRange, diff --git a/wheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/core/DefaultWheelDatePicker.kt b/wheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/core/DefaultWheelDatePicker.kt index c63b834..4e6d480 100644 --- a/wheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/core/DefaultWheelDatePicker.kt +++ b/wheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/core/DefaultWheelDatePicker.kt @@ -20,6 +20,7 @@ import java.time.LocalDate internal fun DefaultWheelDatePicker( modifier: Modifier = Modifier, startDate: LocalDate = LocalDate.now(), + showDate: Boolean = true, minDate: LocalDate = LocalDate.MIN, maxDate: LocalDate = LocalDate.MAX, yearsRange: IntRange? = IntRange(1922, 2122), @@ -31,8 +32,11 @@ internal fun DefaultWheelDatePicker( onSnappedDate : (snappedDate: SnappedDate) -> Int? = { _ -> null } ) { var snappedDate by remember { mutableStateOf(startDate) } + var dayOfMonths: List = emptyList() - var dayOfMonths = calculateDayOfMonths(snappedDate.month.value, snappedDate.year) + if(showDate) { + dayOfMonths = calculateDayOfMonths(snappedDate.month.value, snappedDate.year) + } val months = (1..12).map { Month( @@ -63,50 +67,57 @@ internal fun DefaultWheelDatePicker( ) {} } Row { - //Day of Month - WheelTextPicker( - size = DpSize( - width = if(yearsRange == null) size.width / 2 else size.width / 3, - height = size.height - ), - texts = dayOfMonths.map { it.text }, - rowCount = rowCount, - style = textStyle, - color = textColor, - selectorProperties = WheelPickerDefaults.selectorProperties( - enabled = false - ), - startIndex = dayOfMonths.find { it.value== startDate.dayOfMonth }?.index ?: 0, - onScrollFinished = { snappedIndex -> + if(showDate){ + //Day of Month + WheelTextPicker( + size = DpSize( + width = if(yearsRange == null) size.width / 2 else size.width / 3, + height = size.height + ), + texts = dayOfMonths.map { it.text }, + rowCount = rowCount, + style = textStyle, + color = textColor, + selectorProperties = WheelPickerDefaults.selectorProperties( + enabled = false + ), + startIndex = dayOfMonths.find { it.value== startDate.dayOfMonth }?.index ?: 0, + onScrollFinished = { snappedIndex -> - val newDayOfMonth = dayOfMonths.find { it.index == snappedIndex }?.value + val newDayOfMonth = dayOfMonths.find { it.index == snappedIndex }?.value - newDayOfMonth?.let { - val newDate = snappedDate.withDayOfMonth(newDayOfMonth) + newDayOfMonth?.let { + val newDate = snappedDate.withDayOfMonth(newDayOfMonth) - if(!newDate.isBefore(minDate) && !newDate.isAfter(maxDate)) { - snappedDate = newDate - } + if(!newDate.isBefore(minDate) && !newDate.isAfter(maxDate)) { + snappedDate = newDate + } - val newIndex = dayOfMonths.find { it.value == snappedDate.dayOfMonth }?.index + val newIndex = dayOfMonths.find { it.value == snappedDate.dayOfMonth }?.index - newIndex?.let { - onSnappedDate( - SnappedDate.DayOfMonth( - localDate = snappedDate, - index = newIndex - ) - )?.let { return@WheelTextPicker it } + newIndex?.let { + onSnappedDate( + SnappedDate.DayOfMonth( + localDate = snappedDate, + index = newIndex + ) + )?.let { return@WheelTextPicker it } + } } + + return@WheelTextPicker dayOfMonths.find { it.value == snappedDate.dayOfMonth }?.index } + ) + } - return@WheelTextPicker dayOfMonths.find { it.value == snappedDate.dayOfMonth }?.index - } - ) //Month WheelTextPicker( size = DpSize( - width = if(yearsRange == null) size.width / 2 else size.width / 3, + width = when { + yearsRange == null && showDate.not() -> size.width + yearsRange == null || showDate.not() -> size.width / 2 + else -> size.width / 3 + }, height = size.height ), texts = months.map { it.text }, @@ -151,7 +162,7 @@ internal fun DefaultWheelDatePicker( years?.let { years -> WheelTextPicker( size = DpSize( - width = size.width / 3, + width = if (showDate) size.width / 3 else size.width / 2, height = size.height ), texts = years.map { it.text },