Skip to content

Commit 619aaa1

Browse files
committed
(Calendar) Check for conflicting setup data #20
1 parent fc96dce commit 619aaa1

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

app/src/main/java/com/mk/sheets/compose/samples/CalendarSample3.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ import java.time.LocalDate
3535
internal fun CalendarSample3(closeSelection: SheetState.() -> Unit) {
3636

3737
val selectedDateRange = remember {
38-
val value = Range(LocalDate.now().minusDays(5), LocalDate.now())
38+
val value = Range(LocalDate.now().minusDays(20), LocalDate.now().minusDays(10))
3939
mutableStateOf(value)
4040
}
4141

4242
CalendarDialog(
4343
state = rememberSheetState(visible = true, true, onCloseRequest = closeSelection),
4444
config = CalendarConfig(
45-
disabledTimeline = CalendarTimeline.PAST,
45+
disabledTimeline = CalendarTimeline.FUTURE,
4646
style = CalendarStyle.MONTH,
4747
),
4848
selection = CalendarSelection.Period(

calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarState.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,37 @@ internal class CalendarState(
5050
var calendarData by mutableStateOf(getInitCalendarData())
5151
var valid by mutableStateOf(isValid())
5252

53+
init {
54+
checkSetup()
55+
}
56+
57+
private fun checkSetup() {
58+
val selection = mutableListOf<LocalDate>()
59+
when (this.selection) {
60+
is CalendarSelection.Date -> date.value?.let { selection.add(it) }
61+
is CalendarSelection.Dates -> selection.addAll(dates)
62+
is CalendarSelection.Period -> {
63+
range.startValue?.let { selection.add(it) }
64+
range.endValue?.let { selection.add(it) }
65+
}
66+
}
67+
val overlapDate = selection.firstOrNull { config.disabledDates?.contains(it) == true }
68+
overlapDate?.let { throw IllegalStateException("Please correct your setup. Your selection overlaps with a provided disabled date. $it") }
69+
70+
val today = LocalDate.now()
71+
when (config.disabledTimeline) {
72+
CalendarTimeline.PAST -> {
73+
val overlapTimelineDate = selection.firstOrNull { it.isBefore(today) }
74+
overlapTimelineDate?.let { throw IllegalStateException("Please correct your setup. Your selection overlaps with the disabled timeline. ${config.disabledTimeline}") }
75+
}
76+
CalendarTimeline.FUTURE -> {
77+
val overlapTimelineDate = selection.firstOrNull { it.isAfter(today) }
78+
overlapTimelineDate?.let { throw IllegalStateException("Please correct your setup. Your selection overlaps with the disabled timeline. ${config.disabledTimeline}") }
79+
}
80+
null -> Unit
81+
}
82+
}
83+
5384
private fun getInitYearsRange(): IntRange =
5485
IntRange(config.minYear, config.maxYear.plus(1))
5586

0 commit comments

Comments
 (0)