Skip to content
Snippets Groups Projects
index.js 759 B
import 'rxjs';
import _ from 'lodash';
import { ajax } from 'rxjs/observable/dom/ajax';
import { combineEpics } from 'redux-observable';
import { updateResults, FETCH_RESULTS } from '../actions';

const getSuggestionsEpic = (action$, store) => {
  const searchUrl = 'http://localhost:3000/search';

  return action$.ofType(FETCH_RESULTS)
    .debounceTime(500)
    .switchMap(() => {
      const { query, datasets } = store.getState().search;
      const dsParams = _.map(datasets, ds => `dataset=${ds}`).join('&');

      const requestUrl = `${searchUrl}?q=${query}&${dsParams}`;
      return ajax.getJSON(requestUrl)
        .map(response => updateResults(response));
    });
};

const rootEpic = combineEpics(getSuggestionsEpic);

export default rootEpic;