Skip to content

Commit b6738d2

Browse files
authored
Send events only for selected day & refactor KalendarEvent (#185)
* feat: Send events only for selected day & refactor KalendarEvent - Events are now sent only for the specific day that is clicked. - Refactored `KalendarEvent` into an interface for better flexibility:
1 parent e8ed7e2 commit b6738d2

File tree

7 files changed

+81
-24
lines changed

7 files changed

+81
-24
lines changed

kalendar-foundation/src/commonMain/kotlin/com/himanshoe/kalendar/foundation/action/OnDayClick.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616

1717
package com.himanshoe.kalendar.foundation.action
1818

19-
import com.himanshoe.kalendar.foundation.event.KalendarEvent
19+
import com.himanshoe.kalendar.foundation.event.KalenderEvent
2020
import kotlinx.datetime.LocalDate
2121

2222
fun LocalDate.onDayClick(
23-
events: List<KalendarEvent>,
23+
events: List<KalenderEvent>,
2424
rangeStartDate: LocalDate?,
2525
rangeEndDate: LocalDate?,
2626
onDaySelectionAction: OnDaySelectionAction,

kalendar-foundation/src/commonMain/kotlin/com/himanshoe/kalendar/foundation/action/OnDaySelectionAction.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616

1717
package com.himanshoe.kalendar.foundation.action
1818

19-
import com.himanshoe.kalendar.foundation.event.KalendarEvent
19+
import com.himanshoe.kalendar.foundation.event.KalenderEvent
2020
import kotlinx.datetime.LocalDate
2121

2222
sealed class OnDaySelectionAction {
23-
data class Single(val onDayClick: (LocalDate, List<KalendarEvent>) -> Unit) :
23+
data class Single(val onDayClick: (LocalDate, List<KalenderEvent>) -> Unit) :
2424
OnDaySelectionAction()
2525

26-
data class Range(val onRangeSelected: (KalendarSelectedDayRange, List<KalendarEvent>) -> Unit) :
26+
data class Range(val onRangeSelected: (KalendarSelectedDayRange, List<KalenderEvent>) -> Unit) :
2727
OnDaySelectionAction()
2828
}

kalendar-foundation/src/commonMain/kotlin/com/himanshoe/kalendar/foundation/component/KalendarDay.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ import androidx.compose.ui.util.fastFilter
4141
import androidx.compose.ui.util.fastForEachIndexed
4242
import com.himanshoe.kalendar.foundation.action.KalendarSelectedDayRange
4343
import com.himanshoe.kalendar.foundation.component.config.KalendarDayKonfig
44-
import com.himanshoe.kalendar.foundation.event.KalendarEvent
4544
import com.himanshoe.kalendar.foundation.event.KalendarEvents
45+
import com.himanshoe.kalendar.foundation.event.KalenderEvent
4646
import com.himanshoe.kalendar.foundation.ext.circleLayout
4747
import com.himanshoe.kalendar.foundation.ext.dayBackgroundColor
4848
import kotlinx.datetime.Clock
@@ -58,7 +58,7 @@ fun KalendarDay(
5858
selectedDate: LocalDate = date,
5959
events: KalendarEvents = KalendarEvents(),
6060
dayKonfig: KalendarDayKonfig = KalendarDayKonfig.default(),
61-
onDayClick: (LocalDate, List<KalendarEvent>) -> Unit = { _, _ -> },
61+
onDayClick: (LocalDate, List<KalenderEvent>) -> Unit = { _, _ -> },
6262
) {
6363
KalendarDayContent(
6464
date = date,
@@ -79,7 +79,7 @@ private fun KalendarDayContent(
7979
selectedDate: LocalDate = date,
8080
dayKonfig: KalendarDayKonfig = KalendarDayKonfig.default(),
8181
events: KalendarEvents = KalendarEvents(),
82-
onDayClick: (LocalDate, List<KalendarEvent>) -> Unit = { _, _ -> }
82+
onDayClick: (LocalDate, List<KalenderEvent>) -> Unit = { _, _ -> }
8383
) {
8484
val today = remember(TimeZone.currentSystemDefault()) {
8585
Clock.System.todayIn(TimeZone.currentSystemDefault())
@@ -108,7 +108,9 @@ private fun KalendarDayContent(
108108
selectedRange = selectedRange,
109109
colors = dayKonfig.selectedBackgroundColor.value
110110
)
111-
.clickable { onDayClick(date, events.eventList) }
111+
.clickable {
112+
onDayClick(date, currentDayEvents)
113+
}
112114
.circleLayout()
113115
.defaultMinSize(dayKonfig.size),
114116
verticalArrangement = Arrangement.Center,
@@ -135,7 +137,7 @@ private fun KalendarDayContent(
135137

136138
@Composable
137139
private fun EventIndicators(
138-
events: List<KalendarEvent>,
140+
events: List<KalenderEvent>,
139141
dayKonfig: KalendarDayKonfig,
140142
modifier: Modifier = Modifier
141143
) {

kalendar-foundation/src/commonMain/kotlin/com/himanshoe/kalendar/foundation/event/KalendarEvent.kt

+38-6
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,44 @@ package com.himanshoe.kalendar.foundation.event
1818

1919
import kotlinx.datetime.LocalDate
2020

21-
data class KalendarEvent(
22-
val date: LocalDate,
23-
val eventName: String,
24-
val eventDescription: String? = null
25-
)
21+
/**
22+
* Represents an event in the calendar.
23+
*/
24+
interface KalenderEvent {
25+
/**
26+
* The date of the event.
27+
*/
28+
val date: LocalDate
29+
30+
/**
31+
* The name of the event.
32+
*/
33+
val eventName: String
2634

35+
/**
36+
* The description of the event.
37+
*/
38+
val eventDescription: String?
39+
}
40+
41+
/**
42+
* A basic implementation of the [KalenderEvent] interface.
43+
*
44+
* @property date The date of the event.
45+
* @property eventName The name of the event.
46+
* @property eventDescription The description of the event.
47+
*/
48+
data class BasicKalendarEvent(
49+
override val date: LocalDate,
50+
override val eventName: String,
51+
override val eventDescription: String?
52+
) : KalenderEvent
53+
54+
/**
55+
* A collection of calendar events.
56+
*
57+
* @property eventList The list of events.
58+
*/
2759
data class KalendarEvents(
28-
val eventList: List<KalendarEvent> = emptyList()
60+
val eventList: List<KalenderEvent> = emptyList()
2961
)

kalendar/src/commonMain/kotlin/com/himanshoe/kalendar/KalendarAerial.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import com.himanshoe.kalendar.foundation.component.config.KalendarDayLabelKonfig
4444
import com.himanshoe.kalendar.foundation.component.config.KalendarHeaderKonfig
4545
import com.himanshoe.kalendar.foundation.component.config.KalendarKonfig
4646
import com.himanshoe.kalendar.foundation.event.KalendarEvents
47+
import com.himanshoe.kalendar.foundation.event.KalenderEvent
4748
import kotlinx.coroutines.launch
4849
import kotlinx.datetime.Clock
4950
import kotlinx.datetime.DateTimeUnit
@@ -159,7 +160,7 @@ private fun KalendarAerialContent(
159160
KalendarDay(
160161
date = date,
161162
selectedRange = selectedRange.value,
162-
onDayClick = { clickedDate, events ->
163+
onDayClick = { clickedDate, events: List<KalenderEvent> ->
163164
clickedDate.onDayClick(
164165
events = events,
165166
rangeStartDate = rangeStartDate,

sample/build.gradle.kts

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
18-
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
1918
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
2019
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
2120

@@ -77,6 +76,8 @@ kotlin {
7776
implementation(compose.foundation)
7877
implementation(project(":kalendar"))
7978
implementation(project(":kalendar-foundation"))
79+
// implementation("com.himanshoe:kalendar:2.0.0-RC1")
80+
// implementation("com.himanshoe:kalendar-foundation:1.0.0")
8081
implementation(compose.material)
8182
implementation(compose.ui)
8283
implementation(libs.kotlinx.datetime)

sample/src/commonMain/kotlin/com/himanshoe/sample/App.kt

+27-6
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,26 @@ package com.himanshoe.sample
1919

2020
import androidx.compose.foundation.background
2121
import androidx.compose.foundation.layout.Column
22-
import androidx.compose.foundation.layout.Spacer
2322
import androidx.compose.foundation.layout.fillMaxWidth
24-
import androidx.compose.foundation.layout.height
2523
import androidx.compose.foundation.layout.wrapContentSize
2624
import androidx.compose.runtime.Composable
2725
import androidx.compose.ui.Modifier
2826
import androidx.compose.ui.graphics.Color
29-
import androidx.compose.ui.unit.dp
3027
import com.himanshoe.kalendar.Kalendar
3128
import com.himanshoe.kalendar.KalendarType
3229
import com.himanshoe.kalendar.foundation.action.OnDaySelectionAction
3330
import com.himanshoe.kalendar.foundation.event.KalendarEvents
31+
import com.himanshoe.kalendar.foundation.event.KalenderEvent
3432
import kotlinx.datetime.Clock
3533
import kotlinx.datetime.DayOfWeek
34+
import kotlinx.datetime.LocalDate
3635
import kotlinx.datetime.TimeZone
3736
import kotlinx.datetime.todayIn
3837

3938
@Composable
4039
fun App() {
4140
Column(modifier = Modifier.wrapContentSize().background(Color.Blue)) {
42-
// Kalendar(
41+
// Kalendar(
4342
// selectedDate = Clock.System.todayIn(TimeZone.currentSystemDefault()),
4443
// modifier = Modifier.fillMaxWidth(),
4544
// events = KalendarEvents(),
@@ -73,13 +72,35 @@ fun App() {
7372
// )
7473
// Spacer(Modifier.height(16.dp))
7574
//
75+
data class TestEvent(
76+
override val date: LocalDate,
77+
override val eventName: String,
78+
override val eventDescription: String?,
79+
val test: String
80+
) : KalenderEvent
81+
7682
Kalendar(
7783
selectedDate = Clock.System.todayIn(TimeZone.currentSystemDefault()),
7884
modifier = Modifier.fillMaxWidth(),
79-
events = KalendarEvents(),
85+
events = KalendarEvents(
86+
eventList = listOf(
87+
TestEvent(
88+
date = Clock.System.todayIn(TimeZone.currentSystemDefault()),
89+
eventName = "Event 1",
90+
eventDescription = "Event 1 Description",
91+
test = "Event 1 Description",
92+
),
93+
TestEvent(
94+
date = Clock.System.todayIn(TimeZone.currentSystemDefault()),
95+
eventName = "Event 1",
96+
eventDescription = "Event 1 Description",
97+
test = "Event 1 Description"
98+
)
99+
)
100+
),
80101
startDayOfWeek = DayOfWeek.MONDAY,
81102
kalendarType = KalendarType.Aerial,
82-
onDaySelectionAction = OnDaySelectionAction.Range { date, events ->
103+
onDaySelectionAction = OnDaySelectionAction.Single { date, events ->
83104
println("Selected Date: $date with events: $events")
84105
},
85106
)

0 commit comments

Comments
 (0)