123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- import { getItemsCount, invariant } from '@algolia/autocomplete-shared';
- import { getCompletion } from './getCompletion';
- import { getNextActiveItemId } from './utils';
- export var stateReducer = function stateReducer(state, action) {
- switch (action.type) {
- case 'setActiveItemId':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: action.payload
- });
- }
- case 'setQuery':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- query: action.payload,
- completion: null
- });
- }
- case 'setCollections':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- collections: action.payload
- });
- }
- case 'setIsOpen':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- isOpen: action.payload
- });
- }
- case 'setStatus':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- status: action.payload
- });
- }
- case 'setContext':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- context: _objectSpread(_objectSpread({}, state.context), action.payload)
- });
- }
- case 'ArrowDown':
- {
- var nextState = _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)
- });
- return _objectSpread(_objectSpread({}, nextState), {}, {
- completion: getCompletion({
- state: nextState
- })
- });
- }
- case 'ArrowUp':
- {
- var _nextState = _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: getNextActiveItemId(-1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)
- });
- return _objectSpread(_objectSpread({}, _nextState), {}, {
- completion: getCompletion({
- state: _nextState
- })
- });
- }
- case 'Escape':
- {
- if (state.isOpen) {
- return _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: null,
- isOpen: false,
- completion: null
- });
- }
- return _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: null,
- query: '',
- status: 'idle',
- collections: []
- });
- }
- case 'submit':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: null,
- isOpen: false,
- status: 'idle'
- });
- }
- case 'reset':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: // Since we open the panel on reset when openOnFocus=true
- // we need to restore the highlighted index to the defaultActiveItemId. (DocSearch use-case)
- // Since we close the panel when openOnFocus=false
- // we lose track of the highlighted index. (Query-suggestions use-case)
- action.props.openOnFocus === true ? action.props.defaultActiveItemId : null,
- status: 'idle',
- query: ''
- });
- }
- case 'focus':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: action.props.defaultActiveItemId,
- isOpen: (action.props.openOnFocus || Boolean(state.query)) && action.props.shouldPanelOpen({
- state: state
- })
- });
- }
- case 'blur':
- {
- if (action.props.debug) {
- return state;
- }
- return _objectSpread(_objectSpread({}, state), {}, {
- isOpen: false,
- activeItemId: null
- });
- }
- case 'mousemove':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: action.payload
- });
- }
- case 'mouseleave':
- {
- return _objectSpread(_objectSpread({}, state), {}, {
- activeItemId: action.props.defaultActiveItemId
- });
- }
- default:
- invariant(false, "The reducer action ".concat(JSON.stringify(action.type), " is not supported."));
- return state;
- }
- };
|