@yext/search-headless
Version:
A library for powering UI components for Yext Search integrations
54 lines • 2.4 kB
JavaScript
import { combineReducers } from '@reduxjs/toolkit';
import createQuerySlice from './slices/query';
import createVerticalSlice from './slices/vertical';
import createUniversalSlice from './slices/universal';
import createFiltersSlice from './slices/filters';
import createSpellCheckSlice from './slices/spellcheck';
import createSessionTrackingSlice from './slices/sessiontracking';
import createMetaSlice from './slices/meta';
import createLocationSlice from './slices/location';
import createDirectAnswerSlice from './slices/directanswer';
import createSearchStatusSlice from './slices/searchstatus';
import createQueryRulesSlice from './slices/queryrules';
import createGenerativeDirectAnswerSlice from './slices/generativedirectanswer';
/**
* Manages the current map of headless IDs to Reducers.
*/
export default class HeadlessReducerManager {
constructor() {
this.headlessIdToReducer = {};
}
addAnswersReducer(headlessId) {
this.headlessIdToReducer[headlessId] = createAnswersReducer(headlessId + '/');
}
getParentReducer() {
// set-state should only update the state tree for the SearchHeadless instance
// that dispatched it
const coreReducer = combineReducers(this.headlessIdToReducer);
return (state, action) => {
if (action.type === 'set-state') {
return Object.assign(Object.assign({}, state), { [action.headlessId]: action.payload });
}
else {
return coreReducer(state, action);
}
};
}
}
function createAnswersReducer(prefix) {
return combineReducers({
query: createQuerySlice(prefix).reducer,
vertical: createVerticalSlice(prefix).reducer,
universal: createUniversalSlice(prefix).reducer,
directAnswer: createDirectAnswerSlice(prefix).reducer,
queryRules: createQueryRulesSlice(prefix).reducer,
filters: createFiltersSlice(prefix).reducer,
spellCheck: createSpellCheckSlice(prefix).reducer,
sessionTracking: createSessionTrackingSlice(prefix).reducer,
searchStatus: createSearchStatusSlice(prefix).reducer,
meta: createMetaSlice(prefix).reducer,
location: createLocationSlice(prefix).reducer,
generativeDirectAnswer: createGenerativeDirectAnswerSlice(prefix).reducer
});
}
//# sourceMappingURL=headless-reducer-manager.js.map