Skip to content

Instantly share code, notes, and snippets.

@charlag
Created September 10, 2017 10:12
Show Gist options
  • Save charlag/18a5f4206763e476f5331e81825754e8 to your computer and use it in GitHub Desktop.
Save charlag/18a5f4206763e476f5331e81825754e8 to your computer and use it in GitHub Desktop.
fun <S, E> createStore(
initial: S,
eventsSource: Observable<E>,
reducer: (S, E) -> S,
transformer: ObservableTransformer<in Triple<S, S, E>, out E>
): Observable<S> {
val state = behaviorSubjectDefault(initial)
val events = behaviorSubject<E>()
eventsSource.subscribe(events::onNext)
events.withLatestFrom(state) { ev, oldState ->
val newState = reducer(oldState, ev)
state.onNext(newState)
Triple(oldState, newState, ev)
}
.compose(transformer)
.subscribe(events)
return state
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment