UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

86 lines 3.48 kB
import set from 'lodash/set.js'; import removeEmpty from "../../util/removeEmpty.js"; import removeKey from "../../util/removeKey.js"; export const SET_SORT = 'SET_SORT'; export const SORT_ASC = 'ASC'; export const SORT_DESC = 'DESC'; export const SET_PAGE = 'SET_PAGE'; export const SET_PER_PAGE = 'SET_PER_PAGE'; export const SET_FILTER = 'SET_FILTER'; export const SHOW_FILTER = 'SHOW_FILTER'; export const HIDE_FILTER = 'HIDE_FILTER'; const oppositeOrder = direction => direction === SORT_DESC ? SORT_ASC : SORT_DESC; /** * This reducer is for the react-router query string. */ export const queryReducer = (previousState, action) => { switch (action.type) { case SET_SORT: if (action.payload.field === previousState.sort) { return { ...previousState, order: action.payload.order ?? oppositeOrder(previousState.order), page: 1, }; } return { ...previousState, sort: action.payload.field, order: action.payload.order || SORT_ASC, page: 1, }; case SET_PAGE: return { ...previousState, page: action.payload }; case SET_PER_PAGE: return { ...previousState, page: 1, perPage: action.payload }; case SET_FILTER: { return { ...previousState, page: 1, filter: action.payload.filter, displayedFilters: action.payload.displayedFilters ? action.payload.displayedFilters : previousState.displayedFilters, }; } case SHOW_FILTER: { if (previousState.displayedFilters && previousState.displayedFilters[action.payload.filterName]) { // the filter is already shown return previousState; } return { ...previousState, filter: typeof action.payload.defaultValue !== 'undefined' ? set(previousState.filter, action.payload.filterName, action.payload.defaultValue) : previousState.filter, // we don't use lodash.set() for displayed filters // to avoid problems with compound filter names (e.g. 'author.name') displayedFilters: { ...previousState.displayedFilters, [action.payload.filterName]: true, }, }; } case HIDE_FILTER: { return { ...previousState, filter: removeEmpty(removeKey(previousState.filter, action.payload)), // we don't use lodash.set() for displayed filters // to avoid problems with compound filter names (e.g. 'author.name') displayedFilters: previousState.displayedFilters ? Object.keys(previousState.displayedFilters).reduce((filters, filter) => { return filter !== action.payload ? { ...filters, [filter]: true } : filters; }, {}) : previousState.displayedFilters, }; } default: return previousState; } }; export default queryReducer; //# sourceMappingURL=queryReducer.js.map