Updated reactiv store code to suspend side effects
This commit is contained in:
parent
338f7b16f9
commit
918b893fe8
@ -7,6 +7,8 @@ import io.odin.Logger
|
||||
import monix.bio.Task
|
||||
import monix.reactive.OverflowStrategy
|
||||
import monix.reactive.subjects.ConcurrentSubject
|
||||
import monix.eval.Coeval
|
||||
import monix.reactive.Observable
|
||||
|
||||
object Store {
|
||||
def createL[A, M](
|
||||
@ -21,20 +23,25 @@ object Store {
|
||||
Task {
|
||||
val subject = ConcurrentSubject.publish[A](overflowStrategy)
|
||||
|
||||
val fold: ((A, M), A) => (A, M) = {
|
||||
case ((_, state), action) => {
|
||||
val (newState, effects) = reducer(state, action)
|
||||
val fold: ((A, M), A) => Coeval[(A, M)] = {
|
||||
case ((_, state), action) =>
|
||||
Coeval {
|
||||
val (newState, effects) = reducer(state, action)
|
||||
|
||||
effects.subscribe(subject.onNext _)
|
||||
effects.subscribe(subject.onNext _)
|
||||
|
||||
action -> newState
|
||||
}
|
||||
action -> newState
|
||||
}
|
||||
}
|
||||
|
||||
val obs = subject
|
||||
.scan[(A, M)](initialAction -> initialState)(fold)
|
||||
.behavior(initialAction -> initialState)
|
||||
.refCount
|
||||
val obs = Observable.suspend(
|
||||
subject
|
||||
.scanEval0F[Coeval, (A, M)](
|
||||
Coeval.pure(initialAction -> initialState)
|
||||
)(fold)
|
||||
.behavior(initialAction -> initialState)
|
||||
.refCount
|
||||
)
|
||||
|
||||
val res = middlewares.foldLeft(obs) {
|
||||
case (obs, middleware) => middleware(obs)
|
||||
|
Loading…
Reference in New Issue
Block a user