private applyCategorySet()

in src/converter/data/dataConverter.ts [1046:1123]


    private applyCategorySet(
        categorySet: ICategoryHyperlink[],
        seriesSet: IDataRepresentationSeriesSet,
        seriesArray: IDataRepresentationSeries[],
        misplacedCategory?: IDataRepresentationSeries,
        shouldUseSeriesIndexAsDefaultSortOrder: boolean = false,
        level: number = 0,
    ): void {
        const category: ICategoryHyperlink = categorySet && categorySet[0];

        if (!category) {
            return;
        }

        let currentMisplacedCategory: IDataRepresentationSeries = misplacedCategory;

        if (level === 0) {
            const metricName: ICategoryHyperlink = categorySet
                && categorySet.length
                && categorySet[categorySet.length - 1];

            if (metricName
                && metricName.name !== null
                && metricName.name !== undefined
                && seriesSet[metricName.name]
                && seriesSet[metricName.name].hasBeenFilled
                && category
                && category.name !== null
                && category.name !== undefined
            ) {
                if (category.name !== metricName.name) {
                    currentMisplacedCategory = seriesSet[metricName.name];

                    delete seriesSet[metricName.name];

                    const seriesIndex: number = seriesArray.indexOf(currentMisplacedCategory);

                    if (seriesIndex > -1) {
                        seriesArray.splice(seriesIndex, 1);
                    }
                } else {
                    const existingSeries: IDataRepresentationSeries = seriesSet[metricName.name];

                    existingSeries.hyperlink = existingSeries.hyperlink || category.hyperlink;
                }
            }
        }

        const series: IDataRepresentationSeries = misplacedCategory && misplacedCategory.name === category.name
            ? this.applyExistingSeries(
                category.name,
                seriesSet,
                seriesArray,
                currentMisplacedCategory,
                level,
                category.hyperlink,
                category.sortOrder,
                category.image,
            )
            : this.createOrGetExistingSeries(
                category.name,
                seriesSet,
                seriesArray,
                level,
                category.hyperlink,
                category.sortOrder,
                category.image,
                shouldUseSeriesIndexAsDefaultSortOrder,
            );

        this.applyCategorySet(
            categorySet.slice(1),
            series.childrenSet,
            series.children,
            currentMisplacedCategory,
            shouldUseSeriesIndexAsDefaultSortOrder,
            level + 1);
    }