in src/data.ts [526:570]
function createRangeFacetsData(aggregatedData: AggregatedData, options: ConvertToFacetsVisualDataOptions) {
const result = [];
const { selectedRange, settings } = options;
const rangeFacetState = JSON.parse(settings.facetState.rangeFacet);
Object.keys(aggregatedData.rangeDataMap).forEach((key: string) => {
const rangeValueMap = aggregatedData.rangeDataMap[key];
const rangeKeys = Object.keys(rangeValueMap);
const group = {
label: key.replace(/_/, ' ').split(/\W/).map((word: string) => word.charAt(0).toUpperCase() + word.slice(1)).join(' '),
key: key,
facets: [], // initial facet
order: (rangeFacetState[key] && rangeFacetState[key].order) || 0,
isRange: true,
collapsed: !!rangeFacetState[key] && !!rangeFacetState[key].collapsed,
};
const selectionSlices = {};
const facet = {
value: key,
selection: {},
histogram: {
slices: rangeKeys.map((rangeKey: any) => {
selectionSlices[rangeKey] = aggregatedData.hasHighlight
? rangeValueMap[rangeKey].highlight
: rangeValueMap[rangeKey].subSelection;
return rangeValueMap[rangeKey];
}).sort((a: any, b: any) => compareRangeValue(a.metadata.rangeValue, b.metadata.rangeValue))
}
};
// set flag to the first and last item of the slices
facet.histogram.slices[0].metadata.isFirst = true;
facet.histogram.slices[facet.histogram.slices.length - 1].metadata.isLast = true;
// set initial selection state
facet.selection['slices'] = selectionSlices;
selectedRange && selectedRange[key] && (facet.selection['range'] = {
from: selectedRange[key].from.index,
to: selectedRange[key].to.index,
});
group.facets.push(facet);
result.unshift(group);
});
return result;
}