This commit is contained in:
2025-10-08 18:08:15 +08:00
parent dc71bb19a9
commit 989e5be041
109 changed files with 10815 additions and 170 deletions

View File

@@ -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
)
}
}