66 lines
2.2 KiB
Kotlin
66 lines
2.2 KiB
Kotlin
package com.taskttl.ui.components
|
|
|
|
import androidx.compose.material3.DatePicker
|
|
import androidx.compose.material3.DatePickerDialog
|
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.TextButton
|
|
import androidx.compose.material3.rememberDatePickerState
|
|
import androidx.compose.runtime.Composable
|
|
import kotlinx.datetime.LocalDateTime
|
|
import kotlinx.datetime.TimeZone
|
|
import kotlinx.datetime.toInstant
|
|
import kotlinx.datetime.toLocalDateTime
|
|
import org.jetbrains.compose.resources.stringResource
|
|
import taskttl.composeapp.generated.resources.Res
|
|
import taskttl.composeapp.generated.resources.cancel
|
|
import taskttl.composeapp.generated.resources.confirm
|
|
import kotlin.time.Clock
|
|
import kotlin.time.ExperimentalTime
|
|
import kotlin.time.Instant
|
|
|
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalTime::class)
|
|
@Composable
|
|
fun CompactDatePickerDialog(
|
|
show: Boolean,
|
|
initialSelected: LocalDateTime?,
|
|
onConfirm: (LocalDateTime) -> Unit,
|
|
onDismiss: () -> Unit
|
|
) {
|
|
if (!show) return
|
|
|
|
val initialMillis = (
|
|
initialSelected?.toInstant(TimeZone.currentSystemDefault())
|
|
?: Clock.System.now()
|
|
).toEpochMilliseconds()
|
|
|
|
val state = rememberDatePickerState(initialSelectedDateMillis = initialMillis)
|
|
|
|
DatePickerDialog(
|
|
onDismissRequest = onDismiss,
|
|
confirmButton = {
|
|
TextButton(
|
|
onClick = {
|
|
val millis = state.selectedDateMillis
|
|
if (millis != null) {
|
|
val instant = Instant.fromEpochMilliseconds(millis)
|
|
val selected = instant.toLocalDateTime(TimeZone.currentSystemDefault())
|
|
onConfirm(selected)
|
|
}
|
|
onDismiss()
|
|
}
|
|
) { Text(stringResource(Res.string.confirm)) }
|
|
},
|
|
dismissButton = {
|
|
TextButton(onClick = onDismiss) { Text(stringResource(Res.string.cancel)) }
|
|
}
|
|
) {
|
|
DatePicker(
|
|
state = state,
|
|
headline = null,
|
|
title = null,
|
|
showModeToggle = false
|
|
)
|
|
}
|
|
}
|