UNPKG

@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.

129 lines (128 loc) 5.6 kB
import { SearchIndexAdditionalFieldType } from './interfaces/search-index-additional-field-type'; import { SearchFacetExtensions } from './search-facets-extensions'; import { SitefinityFacetType } from '../../rest-sdk/dto/sitefinity-facet-type'; export class WidgetSettingsFacetFieldMapper { static getIntervalDateTime(dateStep) { if (dateStep) { switch (dateStep.toString()) { case '0': return 'day'; case '1': return 'week'; case '2': return 'month'; case '3': return 'quarter'; case '4': return 'year'; default: return 'day'; } } // UX: if there is no step specified we fallback to a day interval. return 'day'; } static mapWidgetSettingsToFieldsModel(selectedFacetsToBeUsed, culture) { const facetFields = []; selectedFacetsToBeUsed.forEach((facet) => { let facetFieldName = facet.FacetableFieldNames.length ? facet.FacetableFieldNames[0] : ''; let settings = facet.FacetFieldSettings; // eslint-disable-next-line eqeqeq if (facet.FacetFieldSettings.RangeType == SearchFacetExtensions.AutoGeneratedFacet) { if (SearchFacetExtensions.isValueFacet(settings)) { facetFields.push(this.createValueFacetFieldModel(facetFieldName, settings)); } else if (settings.FacetType === SearchIndexAdditionalFieldType.NumberWhole || settings.FacetType === SearchIndexAdditionalFieldType.NumberDecimal) { facetFields.push(this.createNumberIntervalFacetFieldModel(facetFieldName, settings)); } else if (settings.FacetType === SearchIndexAdditionalFieldType.DateAndTime) { facetFields.push(this.createDateIntervalFacetFieldModel(facetFieldName, settings)); } } else { if (settings.FacetType === SearchIndexAdditionalFieldType.NumberWhole || settings.FacetType === SearchIndexAdditionalFieldType.NumberDecimal) { facetFields.push(this.createNumberRangeFacetFieldModel(facetFieldName, settings, culture)); } else if (settings.FacetType === SearchIndexAdditionalFieldType.DateAndTime) { facetFields.push(this.createDateRangeFacetFieldModel(facetFieldName || '', settings)); } } }); return facetFields; } static parseDateIsoString(value) { if (!isNaN(Date.parse(value))) { return (new Date(value)).toISOString(); } return value; } static createDateRangeFacetFieldModel(facetFieldName, settings) { const rangeList = []; settings.DateRanges.forEach((range) => { let valueFrom = this.parseDateIsoString(range.From); let valueTo = this.parseDateIsoString(range.To); if (valueFrom != null && valueTo != null) { rangeList.push({ From: valueFrom, To: valueTo }); } }); return { FieldName: facetFieldName, CustomIntervals: rangeList, FacetFieldType: settings.FacetType, SitefinityFacetType: SitefinityFacetType.Range }; } static createNumberRangeFacetFieldModel(facetFieldName, settings, culture) { const rangeList = []; if (settings.NumberRanges != null) { rangeList.push(...settings .NumberRanges .map((range) => { return { From: range.From != null ? range.From.toString() : null, To: range.To != null ? range.To.toString() : null }; })); } if (settings.NumberRangesDecimal != null) { rangeList.push(...settings .NumberRangesDecimal .map((range) => { return { From: range.From != null ? new Intl.NumberFormat(culture).format(range.From).toString() : null, To: range.To != null ? new Intl.NumberFormat(culture).format(range.To).toString() : null }; })); } return { FieldName: facetFieldName, CustomIntervals: rangeList, FacetFieldType: settings.FacetType, SitefinityFacetType: SitefinityFacetType.Range }; } static createDateIntervalFacetFieldModel(facetFieldName, settings) { return { FieldName: facetFieldName, IntervalRange: this.getIntervalDateTime(settings.DateStep), FacetFieldType: settings.FacetType, SitefinityFacetType: SitefinityFacetType.Interval }; } static createNumberIntervalFacetFieldModel(facetFieldName, settings) { return { FieldName: facetFieldName, IntervalRange: settings.NumberStep != null ? settings.NumberStep.toString() : null, FacetFieldType: settings.FacetType, SitefinityFacetType: SitefinityFacetType.Interval }; } static createValueFacetFieldModel(facetFieldName, settings) { return { FieldName: facetFieldName, SitefinityFacetType: SitefinityFacetType.Value, FacetFieldType: settings.FacetType }; } static DateTimeFormat = 'yyyy-MM-ddTHH:mm:ss.fffZ'; }