Skip to content

Commit a3883d7

Browse files
authored
Merge pull request #126 from MohamedRejeb/0.5.x
Use initialSelectedDateMillis as the initial date on iOS if it exists.
2 parents bc0c3e8 + 6ceabcf commit a3883d7

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

calf-ui/src/iosMain/kotlin/com/mohamedrejeb/calf/ui/datepicker/AdaptiveDatePicker.ios.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import androidx.compose.runtime.remember
1010
import androidx.compose.ui.Modifier
1111
import androidx.compose.ui.interop.UIKitView
1212
import androidx.compose.ui.unit.dp
13+
import com.mohamedrejeb.calf.core.InternalCalfApi
14+
import kotlinx.cinterop.BetaInteropApi
1315
import kotlinx.cinterop.ExperimentalForeignApi
1416
import platform.UIKit.UIDatePicker
1517

16-
@OptIn(ExperimentalForeignApi::class, ExperimentalMaterial3Api::class)
18+
@OptIn(ExperimentalForeignApi::class, ExperimentalMaterial3Api::class, InternalCalfApi::class, BetaInteropApi::class)
1719
@Composable
1820
actual fun AdaptiveDatePicker(
1921
state: AdaptiveDatePickerState,
@@ -29,6 +31,8 @@ actual fun AdaptiveDatePicker(
2931
}
3032
val datePickerManager = remember {
3133
DatePickerManager(
34+
initialSelectedDateMillis = state.selectedDateMillis,
35+
colors = colors,
3236
datePicker = datePicker,
3337
displayMode = state.initialUIKitDisplayMode,
3438
onSelectionChanged = { dateMillis ->

calf-ui/src/iosMain/kotlin/com/mohamedrejeb/calf/ui/datepicker/DatePickerManager.kt

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package com.mohamedrejeb.calf.ui.datepicker
22

3+
import androidx.compose.material3.DatePickerColors
4+
import androidx.compose.material3.ExperimentalMaterial3Api
35
import androidx.compose.runtime.mutableStateOf
6+
import com.mohamedrejeb.calf.core.InternalCalfApi
7+
import com.mohamedrejeb.calf.ui.utils.applyTheme
8+
import com.mohamedrejeb.calf.ui.utils.isDark
9+
import com.mohamedrejeb.calf.ui.utils.toUIColor
410
import kotlinx.cinterop.BetaInteropApi
511
import kotlinx.cinterop.ExperimentalForeignApi
612
import kotlinx.cinterop.ObjCAction
@@ -9,8 +15,14 @@ import platform.Foundation.*
915
import platform.UIKit.*
1016
import platform.objc.sel_registerName
1117

12-
@OptIn(ExperimentalForeignApi::class)
13-
class DatePickerManager internal constructor(
18+
@OptIn(
19+
ExperimentalForeignApi::class,
20+
ExperimentalMaterial3Api::class
21+
)
22+
@InternalCalfApi
23+
class DatePickerManager @OptIn(ExperimentalMaterial3Api::class) internal constructor(
24+
initialSelectedDateMillis: Long?,
25+
colors: DatePickerColors,
1426
private val datePicker: UIDatePicker,
1527
displayMode: UIKitDisplayMode,
1628
private val onSelectionChanged: (dateMillis: Long?) -> Unit,
@@ -28,15 +40,18 @@ class DatePickerManager internal constructor(
2840
@ObjCAction
2941
fun dateSelection() {
3042
onSelectionChanged(
31-
stripTimeFromDate(datePicker.date).timeIntervalSince1970.toLong() * 1000
43+
datePicker.date.timeIntervalSince1970.toLong() * 1000
3244
)
3345
}
3446

3547
val datePickerWidth = mutableStateOf(0f)
3648
val datePickerHeight = mutableStateOf(0f)
3749

3850
init {
39-
datePicker.date = NSDate()
51+
val date = initialSelectedDateMillis
52+
?.let { NSDate.dateWithTimeIntervalSince1970(it / 1000.0) }
53+
?: NSDate()
54+
datePicker.setDate(date, animated = false)
4055
datePicker.locale = NSLocale.currentLocale
4156
datePicker.datePickerMode = UIDatePickerMode.UIDatePickerModeDate
4257
datePicker.preferredDatePickerStyle = when(displayMode) {

0 commit comments

Comments
 (0)