UNPKG

@yext/search-headless

Version:

A library for powering UI components for Yext Search integrations

66 lines (62 loc) 2.52 kB
import { createSlice, PayloadAction, Slice } from '@reduxjs/toolkit'; import { SortBy, VerticalSearchResponse } from '@yext/search-core'; import { AllResultsForVertical, VerticalSearchState } from '../models/slices/vertical'; export const initialState: VerticalSearchState = {}; const reducers = { handleSearchResponse: ( state: VerticalSearchState, action: PayloadAction<VerticalSearchResponse> ) => { if (action.payload?.allResultsForVertical && action.payload?.alternativeVerticals) { const allResultsForVertical: AllResultsForVertical = { facets: action.payload.allResultsForVertical.facets || [], results: action.payload.allResultsForVertical.verticalResults?.results, resultsCount: action.payload.allResultsForVertical.verticalResults?.resultsCount }; state.noResults = { allResultsForVertical, alternativeVerticals: action.payload.alternativeVerticals }; } else { state.noResults = undefined; } state.appliedQueryFilters = action.payload?.verticalResults?.appliedQueryFilters; state.queryDurationMillis = action.payload?.verticalResults?.queryDurationMillis; state.results = action.payload?.verticalResults?.results; state.resultsCount = action.payload?.verticalResults?.resultsCount; state.source = action.payload?.verticalResults?.source; }, setDisplayName: (state: VerticalSearchState, action: PayloadAction<string>) => { state.displayName = action.payload; }, setLimit: (state: VerticalSearchState, action: PayloadAction<number>) => { state.limit = action.payload; }, setOffset: (state: VerticalSearchState, action: PayloadAction<number>) => { state.offset = action.payload; }, setSortBys: (state: VerticalSearchState, action: PayloadAction<SortBy[]>) => { state.sortBys = action.payload; }, setVerticalKey: (state: VerticalSearchState, action: PayloadAction<string | undefined>) => { state.verticalKey = action.payload; }, setLocationRadius: (state: VerticalSearchState, action: PayloadAction<number | undefined>) => { state.locationRadius = action.payload; } }; /** * Registers with Redux the slice of {@link State} pertaining to vertical search. There * are reducers for setting the vertical key, search request data, and * results. */ export default function createVerticalSlice(prefix: string): Slice<VerticalSearchState, typeof reducers> { return createSlice({ name: prefix + 'vertical', initialState, reducers }); }