public/actions/CapiActions/searchCapi.js (87 lines of code) (raw):

import debounce from 'lodash.debounce'; import {searchContent, searchPreviewContent} from '../../util/capiClient'; export const CAPI_CLEAR_PAGES = 'CAPI_CLEAR_PAGES'; export const CAPI_SWITCH_PAGE = 'CAPI_SWITCH_PAGE'; export const CAPI_SEARCH_REQUEST = 'CAPI_SEARCH_REQUEST'; export const CAPI_SEARCH_RECEIVE = 'CAPI_SEARCH_RECEIVE'; export const CAPI_SEARCH_ERROR = 'CAPI_SEARCH_ERROR'; export const CAPI_FILTERS_UPDATE = 'CAPI_FILTERS_UPDATE'; function capiClearPages() { return { type: CAPI_CLEAR_PAGES, receivedAt: Date.now() } } function switchCapiPage(page) { return { type: CAPI_SWITCH_PAGE, page: page } } function requestCapiSearch(searchTerm, byline) { return { type: CAPI_SEARCH_REQUEST, searchTerm: searchTerm, byline: byline, receivedAt: Date.now() }; } function recieveCapiSearch(res, searchTerm) { return { type: CAPI_SEARCH_RECEIVE, results: res.response.results, resultsCount: res.response.total, page: res.response.currentPage, searchTerm: searchTerm, receivedAt: Date.now() }; } function errorCapiSearch(error) { return { type: CAPI_SEARCH_ERROR, message: 'Could not search CAPI', error: error, receivedAt: Date.now() }; } function _searchFn (dispatch, searchString, params) { return searchContent(searchString, params) .then(res => dispatch(recieveCapiSearch(res, searchString))) .fail(error => dispatch(errorCapiSearch(error))); } function _searchPreviewFn (dispatch, searchString, byline, params) { return searchPreviewContent(searchString, byline, params) .then(res => dispatch(recieveCapiSearch(res, searchString))) .fail(error => dispatch(errorCapiSearch(error))); } const _debouncedSearch = debounce(_searchFn, 500); const _debouncedPreviewSearch = debounce(_searchPreviewFn, 500); export function searchCapi(searchString, params) { return dispatch => { dispatch(requestCapiSearch(searchString)); return _debouncedSearch(dispatch, searchString, params); }; } export function switchPage(page) { return dispatch => { dispatch(switchCapiPage(page)); } } export function clearPages() { return dispatch => { dispatch(capiClearPages()) }; } export function searchPreviewCapi(searchString, byline, params) { return dispatch => { dispatch(requestCapiSearch(searchString, byline)); return _debouncedPreviewSearch(dispatch, searchString, byline, params); }; } export function updateFilters(filters) { return { type: CAPI_FILTERS_UPDATE, filters: filters, receivedAt: Date.now() }; }