Skip to content

Instantly share code, notes, and snippets.

@Laimiux
Last active April 9, 2018 17:50
Show Gist options
  • Select an option

  • Save Laimiux/b7fe4b3ef99bbf1dce6d831da4a34cf4 to your computer and use it in GitHub Desktop.

Select an option

Save Laimiux/b7fe4b3ef99bbf1dce6d831da4a34cf4 to your computer and use it in GitHub Desktop.
fun reduce(event: TextChangedEvent): Reducer<CommentFormData> {
// implementation
}
fun reduce(event: Lce<Comment>): Reducer<CommentFormData> {
// implementation
}
fun formState(
textChangedEvents: Observable<TextChangedEvent>,
submitEvents: Observable<SubmitCommentEvent>
) : Observable<CommentFormData> {
val textChangedReducer: Observable<Reducer<CommentFormData>> = textChangedEvents.map { textEvent -> reduce(textEvent) }
// Explicitly declaring the type, for clarity sake
val requestStateReducer: Observable<Reducer<CommentFormData>> = submitEvents
.switchMap { event -> commentService.submit(event.comment) }
.map { lceEvent -> reduce(lceEvent) }
// We now have a clear common type (which happens to be a lambda)
val reducers: Observable<Reducer<CommentFormData>> = Observable.merge(textChangedReducer, requestStateReducer)
// And to finish this
return reducers.scan(initialState) { reducer, state -> reducer.invoke(state) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment