Skip to content

Commit ec21a23

Browse files
committed
Refactor: Relocate PersianDatePickerState and SelectableDates
This commit refactors the location of `PersianDatePickerState` and introduces the `SelectableDates` interface to the `domain` package. **Key changes:** - **Moved `PersianDatePickerState`:** - `PersianDatePickerState` and its implementation `PersianDatePickerStateImpl` were moved from `io.github.faridsolgi.view.internal` to `io.github.faridsolgi.view`. - **Created `SelectableDates` interface:** - The `SelectableDates` interface was created in `io.github.faridsolgi.domain`. This interface defines methods `isSelectableDate` and `isSelectableYear` to control which dates and years are enabled in the date picker. - **Updated Imports:** All imports were updated to reflect the new locations of the moved and created files. - **Version Update:** Project version bumped from `0.0.2` to `0.0.3` in `library/build.gradle.kts`. This refactoring improves the project structure by placing `SelectableDates` within the domain layer, as it represents a core business rule, and by making `PersianDatePickerState` a public part of the view layer.
1 parent 75afae2 commit ec21a23

File tree

6 files changed

+28
-10
lines changed

6 files changed

+28
-10
lines changed

library/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ plugins {
1616
}
1717

1818
group = "io.github.faridsolgi"
19-
version = "0.0.2"
19+
version = "0.0.3"
2020

2121
kotlin {
2222
jvm()
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.github.faridsolgi.domain
2+
3+
import androidx.compose.material3.ExperimentalMaterial3Api
4+
import androidx.compose.runtime.Stable
5+
6+
7+
@Stable
8+
interface SelectableDates {
9+
10+
/**
11+
* Returns true if the date item representing the [utcTimeMillis] should be enabled for
12+
* selection in the UI.
13+
*/
14+
fun isSelectableDate(utcTimeMillis: Long) = true
15+
16+
/**
17+
* Returns true if a given [year] should be enabled for selection in the UI. When a year is
18+
* defined as non selectable, all the dates in that year will also be non selectable.
19+
*/
20+
fun isSelectableYear(year: Int) = true
21+
}

library/src/commonMain/kotlin/io/github/faridsolgi/util/PersianDatePickerStateExtensions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.faridsolgi.util
22

33
import io.github.faridsolgi.persiandatetime.domain.PersianDateTime
4-
import io.github.faridsolgi.view.internal.PersianDatePickerState
4+
import io.github.faridsolgi.view.PersianDatePickerState
55

66

77
internal fun PersianDatePickerState.navigateToPreviousMonth() {

library/src/commonMain/kotlin/io/github/faridsolgi/view/PersianDatePicker.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ import io.github.faridsolgi.domain.model.PersianDatePickerTokens
2828
import io.github.faridsolgi.persiandatetime.converter.toDateString
2929
import io.github.faridsolgi.view.internal.DisplayModeToggleButton
3030
import io.github.faridsolgi.view.internal.PersianDatePickerCalender
31-
import io.github.faridsolgi.view.internal.PersianDatePickerState
3231
import io.github.faridsolgi.view.internal.ProvideContentColorTextStyle
33-
import io.github.faridsolgi.view.internal.rememberPersianDatePickerState
3432
import org.jetbrains.compose.ui.tooling.preview.Preview
3533

3634
@Composable

library/src/commonMain/kotlin/io/github/faridsolgi/view/internal/PersianDatePickerState.kt renamed to library/src/commonMain/kotlin/io/github/faridsolgi/view/PersianDatePickerState.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.github.faridsolgi.view.internal
1+
package io.github.faridsolgi.view
22

33

44
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -10,14 +10,13 @@ import androidx.compose.runtime.saveable.Saver
1010
import androidx.compose.runtime.saveable.listSaver
1111
import androidx.compose.runtime.saveable.rememberSaveable
1212
import androidx.compose.runtime.setValue
13-
import io.github.faridsolgi.domain.model.DisplayMode
1413
import io.github.faridsolgi.domain.SelectableDates
15-
import io.github.faridsolgi.view.internal.PersianDatePickerStateImpl.Companion.Saver
14+
import io.github.faridsolgi.domain.model.DisplayMode
15+
import io.github.faridsolgi.view.PersianDatePickerStateImpl.Companion.Saver
1616
import io.github.faridsolgi.persiandatetime.converter.nowPersianDate
1717
import io.github.faridsolgi.persiandatetime.converter.toLocalDate
1818
import io.github.faridsolgi.persiandatetime.converter.toPersianDateTime
1919
import io.github.faridsolgi.persiandatetime.domain.PersianDateTime
20-
import io.github.faridsolgi.view.PersianDatePickerDefaults
2120
import kotlinx.datetime.TimeZone
2221
import kotlinx.datetime.atStartOfDayIn
2322
import kotlin.time.Clock
@@ -192,7 +191,7 @@ fun rememberPersianDatePickerState(
192191
initialDisplayMode: DisplayMode = DisplayMode.Companion.Picker,
193192
selectableDates: SelectableDates = PersianDatePickerDefaults.AllDatesSelectable,
194193
): PersianDatePickerState {
195-
return rememberSaveable(saver = PersianDatePickerStateImpl.Companion.Saver(selectableDates)) {
194+
return rememberSaveable(saver = Saver(selectableDates)) {
196195
PersianDatePickerStateImpl(
197196
initialSelectedDate = initialSelectedDate,
198197
initDisplayedDate = initialDisplayedDate,

library/src/commonMain/kotlin/io/github/faridsolgi/view/internal/PersianCalender.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.Row
1717
import androidx.compose.foundation.layout.Spacer
1818
import androidx.compose.foundation.layout.aspectRatio
1919
import androidx.compose.foundation.layout.fillMaxWidth
20-
import androidx.compose.foundation.layout.heightIn
2120
import androidx.compose.foundation.layout.padding
2221
import androidx.compose.foundation.lazy.grid.GridCells
2322
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
@@ -54,6 +53,7 @@ import io.github.faridsolgi.util.canNavigateToNextMonth
5453
import io.github.faridsolgi.util.canNavigateToPreviousMonth
5554
import io.github.faridsolgi.util.navigateToNextMonth
5655
import io.github.faridsolgi.util.navigateToPreviousMonth
56+
import io.github.faridsolgi.view.PersianDatePickerState
5757
import kotlinx.datetime.TimeZone
5858
import kotlin.time.Clock
5959
import kotlin.time.ExperimentalTime

0 commit comments

Comments
 (0)