superset transformProps 源码

  • 2022-10-20
  • 浏览 (341)

superset transformProps 代码

文件路径:/superset-frontend/plugins/preset-chart-xy/src/BoxPlot/legacy/transformProps.ts

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
import {
  ChartProps,
  LegacyQueryData,
  QueryFormData,
  QueryFormMetric,
} from '@superset-ui/core';
import {
  RawBoxPlotDataRow,
  BoxPlotDataRow,
} from '../../components/BoxPlot/types';

export type LegacyBoxPlotFormData = {
  groupby?: QueryFormData['groupby'];
  metrics?: QueryFormData['metrics'];
  colorScheme?: string;
};

export type LegacyBoxPlotChartProps = ChartProps & {
  formData: LegacyBoxPlotFormData;
  queriesData: (LegacyQueryData & {
    data?: RawBoxPlotDataRow[];
  })[];
};

export default function transformProps(chartProps: LegacyBoxPlotChartProps) {
  const { width, height, datasource, formData, queriesData } = chartProps;
  const { verboseMap = {} } = datasource;
  const { colorScheme, groupby = [], metrics = [] } = formData;

  const data = (queriesData[0].data || []).map(({ label, values }) => ({
    label,
    min: values.whisker_low,
    max: values.whisker_high,
    firstQuartile: values.Q1,
    median: values.Q2,
    thirdQuartile: values.Q3,
    outliers: values.outliers,
  }));

  const xAxisLabel = groupby.join('/');

  let metric: QueryFormMetric = '';
  if (Array.isArray(metrics)) {
    metric = metrics.length > 0 ? metrics[0] : '';
  } else {
    metric = metrics;
  }
  const yAxisLabel =
    typeof metric === 'string' ? verboseMap[metric] || metric : metric.label;

  const boxPlotValues = data.reduce((r: number[], e: BoxPlotDataRow) => {
    r.push(e.min, e.max, ...e.outliers);

    return r;
  }, []);

  const minBoxPlotValue = Math.min(...boxPlotValues);
  const maxBoxPlotValue = Math.max(...boxPlotValues);
  const valueDomain = [
    minBoxPlotValue - 0.1 * Math.abs(minBoxPlotValue),
    maxBoxPlotValue + 0.1 * Math.abs(maxBoxPlotValue),
  ];

  return {
    data,
    width,
    height,
    encoding: {
      x: {
        field: 'label',
        type: 'nominal',
        scale: {
          type: 'band',
          paddingInner: 0.15,
          paddingOuter: 0.3,
        },
        axis: {
          title: xAxisLabel,
        },
      },
      y: {
        field: 'value',
        type: 'quantitative',
        scale: {
          type: 'linear',
          domain: valueDomain,
        },
        axis: {
          title: yAxisLabel,
          numTicks: 5,
          format: 'SMART_NUMBER',
        },
      },
      color: {
        field: 'label',
        type: 'nominal',
        scale: {
          scheme: colorScheme,
        },
        legend: false,
      },
    },
  };
}

相关信息

superset 源码目录

相关文章

superset index 源码

0  赞