# elasticpress/4.6.0/assets/js/api-search/src/reducer.js

ElasticPress, version 4.6.0. 96 lines.

- Page: https://pluginprobe.com/plugins/elasticpress/4.6.0/code/assets/js/api-search/src/reducer.js
- Raw: https://pluginprobe.com/plugins/elasticpress/4.6.0/raw/assets/js/api-search/src/reducer.js
- Modified: 2023-03-09T20:42:38+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/elasticpress/4.6.0/code/assets/js/api-search/src/reducer.js#L10-L20`.

```javascript
/**
 * Internal dependencies.
 */
import { getArgsWithoutConstraints } from './utilities';

/**
 * Reducer function.
 *
 * @param {object} state Current state.
 * @param {object} action Action data.
 * @returns {object} Updated state.
 */
export default (state, action) => {
	const newState = { ...state, isPoppingState: false };

	switch (action.type) {
		case 'CLEAR_CONSTRAINTS': {
			const clearedArgs = getArgsWithoutConstraints(newState.args, newState.argsSchema);

			newState.args = clearedArgs;
			newState.args.offset = 0;

			break;
		}
		case 'CLEAR_RESULTS': {
			newState.aggregations = {};
			newState.searchResults = [];
			newState.totalResults = 0;
			break;
		}
		case 'SEARCH': {
			newState.args = { ...newState.args, ...action.args, offset: 0 };
			newState.isOn = true;
			break;
		}
		case 'SEARCH_FOR': {
			const clearedArgs = getArgsWithoutConstraints(newState.args, newState.argsSchema);

			newState.args = clearedArgs;
			newState.args.search = action.searchTerm;
			newState.args.offset = 0;
			newState.isOn = true;

			break;
		}
		case 'SET_IS_LOADING': {
			newState.isLoading = action.isLoading;
			break;
		}
		case 'TURN_OFF': {
			newState.args = { ...newState.args };
			newState.isOn = false;
			break;
		}
		case 'SET_RESULTS': {
			const {
				hits: { hits, total },
				aggregations,
			} = action.response;

			/**
			 * Total number of items.
			 */
			const totalNumber = typeof total === 'number' ? total : total.value;

			newState.aggregations = aggregations;
			newState.searchResults = hits;
			newState.searchTerm = newState.args.search;
			newState.totalResults = totalNumber;

			break;
		}
		case 'NEXT_PAGE': {
			newState.args.offset += newState.args.per_page;
			break;
		}
		case 'PREVIOUS_PAGE': {
			newState.args.offset = Math.max(newState.args.offset - newState.args.per_page, 0);
			break;
		}
		case 'POP_STATE': {
			const { isOn, args } = action.args;

			newState.args = args;
			newState.isOn = isOn;
			newState.isPoppingState = true;

			break;
		}
		default:
			break;
	}

	return newState;
};

```
