54 lines
1.9 KiB
Kotlin
54 lines
1.9 KiB
Kotlin
package com.vanced.manager.core.mvi.subject
|
|
|
|
import com.vanced.manager.core.mvi.Handler
|
|
import com.vanced.manager.core.mvi.MviFlow
|
|
import com.vanced.manager.core.mvi.MviFlowStore
|
|
import com.vanced.manager.core.mvi.Reducer
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
|
|
|
class SubjectStore<TD>(
|
|
scope: CoroutineScope,
|
|
defaultState: State,
|
|
private val testData: TD
|
|
) : MviFlowStore<State, Action, Modification, SideEffect> {
|
|
|
|
val modifications = mutableListOf<Modification>()
|
|
|
|
private val handler: Handler<State, Action, Modification, SideEffect> =
|
|
{ state: State, action: Action, sideEffectsFlow: MutableSharedFlow<SideEffect> ->
|
|
when (action) {
|
|
Action.Click -> {
|
|
emit(Modification.ChangeDescription(testData))
|
|
sideEffectsFlow.emit(SideEffect.ShowToast(testData))
|
|
}
|
|
Action.Tap -> {
|
|
emit(Modification.ChangeTitle(testData))
|
|
sideEffectsFlow.emit(SideEffect.ShowToast(testData))
|
|
}
|
|
}
|
|
}
|
|
|
|
private val reducer: Reducer<State, Modification> =
|
|
{ state: State, modification: Modification ->
|
|
modifications.add(modification)
|
|
when (modification) {
|
|
is Modification.ChangeDescription<*> -> {
|
|
emit(State.SetDescription(modification.text))
|
|
emit(State.Default)
|
|
}
|
|
is Modification.ChangeTitle<*> -> {
|
|
emit(State.SetTitle(modification.text))
|
|
emit(State.Default)
|
|
}
|
|
}
|
|
}
|
|
|
|
override val store: MviFlow<State, Action, Modification, SideEffect> =
|
|
MviFlow(
|
|
scope = scope,
|
|
initialState = defaultState,
|
|
handler = handler,
|
|
reducer = reducer
|
|
)
|
|
} |