-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathGrapesDatePickerDefaults.kt
73 lines (66 loc) · 3.34 KB
/
GrapesDatePickerDefaults.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.spendesk.grapes.compose.calendar
import androidx.compose.material3.DatePickerColors
import androidx.compose.material3.DatePickerDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.SelectableDates
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.ui.graphics.Color
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.Date
import java.util.TimeZone
@Immutable
object GrapesDatePickerDefaults {
val YearRange: IntRange = IntRange(1900, 2100)
@ExperimentalMaterial3Api
@Composable
fun colors(
containerColor: Color = GrapesTheme.colors.structureBackground,
titleContentColor: Color = GrapesTheme.colors.neutralDarker,
headlineContentColor: Color = GrapesTheme.colors.neutralDarker,
weekdayContentColor: Color = GrapesTheme.colors.neutralDarker,
subheadContentColor: Color = GrapesTheme.colors.neutralDarker,
yearContentColor: Color = GrapesTheme.colors.neutralDarker,
currentYearContentColor: Color = GrapesTheme.colors.neutralDarker,
selectedYearContentColor: Color = Color.White,
selectedYearContainerColor: Color = GrapesTheme.colors.primaryNormal,
dayContentColor: Color = GrapesTheme.colors.neutralDarker,
selectedDayContentColor: Color = Color.White,
selectedDayContainerColor: Color = GrapesTheme.colors.primaryNormal,
todayContentColor: Color = GrapesTheme.colors.primaryNormal,
todayDateBorderColor: Color = GrapesTheme.colors.primaryNormal,
): DatePickerColors = DatePickerDefaults.colors(
containerColor = containerColor,
titleContentColor = titleContentColor,
headlineContentColor = headlineContentColor,
weekdayContentColor = weekdayContentColor,
subheadContentColor = subheadContentColor,
yearContentColor = yearContentColor,
currentYearContentColor = currentYearContentColor,
selectedYearContentColor = selectedYearContentColor,
selectedYearContainerColor = selectedYearContainerColor,
dayContentColor = dayContentColor,
selectedDayContentColor = selectedDayContentColor,
selectedDayContainerColor = selectedDayContainerColor,
todayContentColor = todayContentColor,
todayDateBorderColor = todayDateBorderColor,
)
@OptIn(ExperimentalMaterial3Api::class)
fun selectableDatesEdges(minDate: Date? = null, maxDate: Date? = null): SelectableDates {
return if (minDate != null || maxDate != null) {
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
}
}
} else {
object : SelectableDates {}
}
}
}