更新
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
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
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user