UNPKG

decap-cms-core

Version:

Decap CMS core application, see decap-cms package for the main distribution.

92 lines 2.27 kB
import { produce } from 'immer'; import { QUERY_FAILURE, QUERY_REQUEST, QUERY_SUCCESS, SEARCH_CLEAR, SEARCH_ENTRIES_FAILURE, SEARCH_ENTRIES_REQUEST, SEARCH_ENTRIES_SUCCESS, CLEAR_REQUESTS } from '../actions/search'; const defaultState = { isFetching: false, term: '', collections: [], page: 0, entryIds: [], queryHits: {}, error: undefined, requests: [] }; const search = produce((state, action) => { switch (action.type) { case SEARCH_CLEAR: return defaultState; case SEARCH_ENTRIES_REQUEST: { const { page, searchTerm, searchCollections } = action.payload; state.isFetching = true; state.term = searchTerm; state.collections = searchCollections; state.page = page; break; } case SEARCH_ENTRIES_SUCCESS: { const { entries, page } = action.payload; const entryIds = entries.map(entry => ({ collection: entry.collection, slug: entry.slug })); state.isFetching = false; state.page = page; state.entryIds = !page || isNaN(page) || page === 0 ? entryIds : state.entryIds.concat(entryIds); break; } case SEARCH_ENTRIES_FAILURE: { const { error } = action.payload; state.isFetching = false; state.error = error; break; } case QUERY_REQUEST: { const { searchTerm, request } = action.payload; state.isFetching = true; state.term = searchTerm; if (request) { state.requests.push(request); } break; } case CLEAR_REQUESTS: { state.requests = state.requests.filter(req => req.expires >= new Date()); break; } case QUERY_SUCCESS: { const { namespace, hits } = action.payload; state.isFetching = false; state.queryHits[namespace] = hits; break; } case QUERY_FAILURE: { const { error } = action.payload; state.isFetching = false; state.error = error; } } }, defaultState); export default search;