-
Notifications
You must be signed in to change notification settings - Fork 1
2. QuickStart
kimdohun0104 edited this page Oct 18, 2020
·
2 revisions
data class CountState(
val count: Int = 0,
val toastEvent: Event<String> = Event()
) : KindaState
sealed class CountEvent : KindaEvent {
object Increase : CountEvent()
object Decrease : CountEvent()
object AttemptMagic : CountEvent()
object Increase1000 : CountEvent()
}
sealed class CountSideEffect : KindaSideEffect {
object Magic : CountSideEffect()
}
class CountReducer : KindaReducer<CountState, CountEvent, CountSideEffect> {
override fun reduce(state: CountState, event: CountEvent): Next<CountState, CountSideEffect> {
return when (event) {
CountEvent.AttemptMagic -> Next(null, CountSideEffect.Magic)
CountEvent.Increase -> Next(state.copy(count = state.count + 1))
CountEvent.Decrease -> Next(state.copy(count = state.count - 1))
CountEvent.Increase1000 -> Next(
state.copy(
count = state.count + 1000,
toastEvent = Event("Increase 1000, It's magic!")
)
)
}
}
}
class CountSideEffectHandler : KindaSideEffectHandler<CountState, CountEvent, CountSideEffect> {
override suspend fun handle(state: CountState, sideEffect: CountSideEffect): CountEvent {
return when (sideEffect) {
CountSideEffect.Magic -> {
delay(1000)
CountEvent.Increase1000
}
}
}
}
val countKinda = Kinda.Builder<CountState, CountEvent, CountSideEffect>()
.initialState(CountState())
.coroutineScope(GlobalScope)
.reducer(CountReducer())
.sideEffectHandler(CountSideEffectHandler())
.render { state ->
println(state.count)
}
.build()
countKinda.intent(CountEvent.Increase)