@progress/sitefinity-nextjs-sdk
Version:
Provides OOB widgets developed using the Next.js framework, which includes an abstraction layer for Sitefinity communication. Additionally, it offers an expanded API, typings, and tools for further development and integration.
67 lines (66 loc) • 3.55 kB
JavaScript
import { RestClient } from '../../rest-sdk/rest-client';
import { WidgetSettingsFacetFieldMapper } from './facet-field-mapper';
import { SearchFacetsModelBuilder } from './search-facets-model-builder';
export async function getSearchFacets(searchQuery, culture, indexCatalogue, filter, resultsForAllSites, searchFields, facets, ctx) {
let searchServiceFacetResponse = [];
try {
searchServiceFacetResponse = await RestClient.getFacets({
searchQuery,
culture,
indexCatalogue,
filter,
resultsForAllSites,
searchFields,
facets,
traceContext: ctx
});
}
catch (_) {
// noop
}
return Object.fromEntries(searchServiceFacetResponse.map((p) => [p.FacetKey, p.FacetResponses]));
}
export function getSelectedFacetsToBeUsed(searchFacets) {
const selectedFacetsToBeUsed = [];
searchFacets.forEach((f) => {
selectedFacetsToBeUsed.push(JSON.parse(JSON.stringify(f.facetField)));
});
return selectedFacetsToBeUsed;
}
export function getFacets(selectedFacetsToBeUsed, newSearchParams) {
return WidgetSettingsFacetFieldMapper.mapWidgetSettingsToFieldsModel(selectedFacetsToBeUsed, newSearchParams['sf_culture']);
}
export async function updateFacetsViewProps(newSearchParams, facetResponse, selectedFacetsToBeUsed) {
const facetableFieldsFromIndex = await RestClient.getFacatebleFields({ indexCatalogue: newSearchParams.indexCatalogue });
const facetableFieldsKeys = facetableFieldsFromIndex.map((x) => x.FacetableFieldNames.length ? x.FacetableFieldNames[0] : '');
const searchFacets = SearchFacetsModelBuilder.buildFacetsViewProps(selectedFacetsToBeUsed, facetResponse, facetableFieldsKeys, '');
return {
searchFacets,
hasAnyFacetElements: SearchFacetsModelBuilder.hasAnyFacetElements(searchFacets)
};
}
export async function getInitialFacetsWithModels(searchParams, entity) {
const searchQuery = searchParams['searchQuery'];
const ret = {
searchFacets: [],
hasAnyFacetElements: false
};
if (searchQuery && entity.IndexCatalogue) {
const facetableFieldsFromIndex = await RestClient.getFacatebleFields({ indexCatalogue: entity.IndexCatalogue });
const facetableFieldsKeys = facetableFieldsFromIndex.map((x) => x.FacetableFieldNames.length ? x.FacetableFieldNames[0] : '');
const sourceGroups = entity.SelectedFacets.reduce((group, contentVariation) => {
const { FacetableFieldNames } = contentVariation;
group[FacetableFieldNames[0]] = group[FacetableFieldNames[0]] ?? [];
group[FacetableFieldNames[0]].push(contentVariation);
return group;
}, {});
const selectedFacetsToBeUsed = Object.values(sourceGroups)
.map((e) => e[e.length - 1])
.filter((x) => facetableFieldsKeys.includes(x.FacetableFieldNames[0]));
const facets = WidgetSettingsFacetFieldMapper.mapWidgetSettingsToFieldsModel(selectedFacetsToBeUsed, searchParams['sf_culture']);
let facetsDict = await getSearchFacets(searchQuery, searchParams['sf_culture'], entity.IndexCatalogue, searchParams['filter'], searchParams['resultsForAllSites'], entity.SearchFields, facets);
ret.searchFacets = SearchFacetsModelBuilder.buildFacetsViewProps(entity.SelectedFacets, facetsDict, facetableFieldsKeys, entity.SortType || '');
}
ret.hasAnyFacetElements = SearchFacetsModelBuilder.hasAnyFacetElements(ret.searchFacets);
return ret;
}