public parseData()

in src/EnhancedScatterChart.ts [726:829]


    public parseData(
        dataView: DataView,
        colorPalette: IColorPalette,
        visualHost: IVisualHost,
        interactivityService: IInteractivityService<BaseDataPoint>,
    ): EnhancedScatterChartData {
        const settings: Settings = this.parseSettings(dataView, new ColorHelper(colorPalette));

        if (!this.isDataViewValid(dataView)) {
            return this.getDefaultData(settings);
        }

        let categoryValues: any[],
            categoryFormatter: IValueFormatter,
            categoryObjects: DataViewObjects[],
            dataViewCategorical: DataViewCategorical = dataView.categorical,
            categories: DataViewCategoryColumn[] = dataViewCategorical.categories || [],
            dataValues: DataViewValueColumns = dataViewCategorical.values,
            hasDynamicSeries: boolean = !!dataValues.source,
            grouped: DataViewValueColumnGroup[] = dataValues.grouped(),
            dvSource: DataViewMetadataColumn = dataValues.source,
            scatterMetadata: EnhancedScatterChartMeasureMetadata = EnhancedScatterChart.getMetadata(categories, grouped),
            categoryIndex: number = scatterMetadata.idx.category,
            useShape: boolean = scatterMetadata.idx.image >= EnhancedScatterChart.MinIndex,
            useCustomColor: boolean = scatterMetadata.idx.colorFill >= EnhancedScatterChart.MinIndex;

        if (dataViewCategorical.categories
            && dataViewCategorical.categories.length > 0
            && dataViewCategorical.categories[categoryIndex]
        ) {
            const mainCategory: DataViewCategoryColumn = dataViewCategorical.categories[categoryIndex];
            categoryValues = mainCategory.values;
            categoryFormatter = valueFormatter.create({
                format: valueFormatter.getFormatStringByColumn(mainCategory.source),
                value: categoryValues[0],
                value2: categoryValues[categoryValues.length - 1]
            });

            categoryObjects = mainCategory.objects;
        }
        else {
            categoryValues = [null];
            // creating default formatter for null value (to get the right string of empty value from the locale)
            categoryFormatter = valueFormatter.createDefaultFormatter(null);
        }

        const sizeRange: ValueRange<number> = EnhancedScatterChart.getSizeRangeForGroups(
            grouped,
            scatterMetadata.idx.size
        );

        settings.fillPoint.isHidden = !!(sizeRange && sizeRange.min);

        const colorHelper: ColorHelper = new ColorHelper(
            colorPalette,
            {
                objectName: "dataPoint",
                propertyName: "fill"
            },
            hasDynamicSeries
                ? undefined
                : settings.dataPoint.defaultColor
        );

        const dataPoints: EnhancedScatterChartDataPoint[] = this.createDataPoints(
            visualHost,
            dataValues,
            scatterMetadata,
            categories,
            categoryValues,
            categoryFormatter,
            categoryObjects,
            hasDynamicSeries,
            colorHelper,
            settings,
        );

        if (interactivityService) {
            interactivityService.applySelectionStateToData(dataPoints);
        }

        const legendParseResult = this.parseLegend(visualHost, dataValues, dvSource, categories, categoryIndex, colorHelper, hasDynamicSeries);
        let legendDataPoints: LegendDataPoint[] = legendParseResult.legendDataPoints;
        let legendTitle: string = legendParseResult.legendTitle;

        this.changeSettingsAndMetadata(dataPoints, scatterMetadata, settings, legendTitle);
        const hasGradientRole: boolean = gradientUtils.hasGradientRole(dataViewCategorical);

        return {
            settings,
            dataPoints,
            legendDataPoints,
            sizeRange,
            hasGradientRole,
            hasDynamicSeries,
            useShape,
            useCustomColor,
            xCol: scatterMetadata.cols.x,
            yCol: scatterMetadata.cols.y,
            axesLabels: scatterMetadata.axesLabels,
            selectedIds: [],
            size: scatterMetadata.cols.size,
        };
    }