function createRangeFacetsData()

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;
}