export default function searchUsers(action$) { return action$ .ofType(ActionTypes.SEARCHED_USERS) .map((action) => action.payload.query) .filter((q) => !!q) .switchMap((q) => Observable.timer(800) // debounce .takeUntil(action$.ofType(ActionTypes.CLEARED_SEARCH_RESULTS)) .mergeMap(() => Observable.merge( Observable.of(replace(`?q=${q}`)), ajax .getJSON(`https://api.github.com/search/users?q=${q}`) .map((res) => res.items) .map(receiveUsers), ), ), ); }