From 734a053967ba3631ca1c173a750f338e4a3a2ff3 Mon Sep 17 00:00:00 2001 From: Tom Robinson <tlrobinson@gmail.com> Date: Wed, 12 Sep 2018 13:05:51 -0700 Subject: [PATCH] Move graph specific settings functions to settings/graph.js --- .../metabase/visualizations/lib/settings.js | 64 +---------------- .../visualizations/lib/settings/graph.js | 71 +++++++++++++++++-- 2 files changed, 68 insertions(+), 67 deletions(-) diff --git a/frontend/src/metabase/visualizations/lib/settings.js b/frontend/src/metabase/visualizations/lib/settings.js index 2331906775d..669a75cf376 100644 --- a/frontend/src/metabase/visualizations/lib/settings.js +++ b/frontend/src/metabase/visualizations/lib/settings.js @@ -5,12 +5,10 @@ import { getChartTypeFromData, DIMENSION_DIMENSION_METRIC, DIMENSION_METRIC, - DIMENSION_METRIC_METRIC, - getColumnCardinality, getFriendlyName, } from "./utils"; -import { isDate, isMetric, isDimension } from "metabase/lib/schema_metadata"; +import { isMetric, isDimension } from "metabase/lib/schema_metadata"; import ChartSettingInput from "metabase/visualizations/components/settings/ChartSettingInput.jsx"; import ChartSettingInputGroup from "metabase/visualizations/components/settings/ChartSettingInputGroup.jsx"; @@ -36,66 +34,6 @@ const WIDGETS = { colors: ChartSettingColorsPicker, }; -export function getDefaultColumns(series) { - if (series[0].card.display === "scatter") { - return getDefaultScatterColumns(series); - } else { - return getDefaultLineAreaBarColumns(series); - } -} - -function getDefaultScatterColumns([{ data: { cols, rows } }]) { - let dimensions = cols.filter(isDimension); - let metrics = cols.filter(isMetric); - if (dimensions.length === 2 && metrics.length < 2) { - return { - dimensions: [dimensions[0].name], - metrics: [dimensions[1].name], - bubble: metrics.length === 1 ? metrics[0].name : null, - }; - } else { - return { - dimensions: [null], - metrics: [null], - bubble: null, - }; - } -} - -function getDefaultLineAreaBarColumns([{ data: { cols, rows } }]) { - let type = getChartTypeFromData(cols, rows, false); - if (type === DIMENSION_DIMENSION_METRIC) { - let dimensions = [cols[0], cols[1]]; - if (isDate(dimensions[1]) && !isDate(dimensions[0])) { - // if the series dimension is a date but the axis dimension is not then swap them - dimensions.reverse(); - } else if ( - getColumnCardinality(cols, rows, 1) > getColumnCardinality(cols, rows, 0) - ) { - // if the series dimension is higher cardinality than the axis dimension then swap them - dimensions.reverse(); - } - return { - dimensions: dimensions.map(col => col.name), - metrics: [cols[2].name], - }; - } else if (type === DIMENSION_METRIC) { - return { - dimensions: [cols[0].name], - metrics: [cols[1].name], - }; - } else if (type === DIMENSION_METRIC_METRIC) { - return { - dimensions: [cols[0].name], - metrics: cols.slice(1).map(col => col.name), - }; - } - return { - dimensions: [null], - metrics: [null], - }; -} - export function getDefaultDimensionAndMetric([{ data }]) { const type = data && getChartTypeFromData(data.cols, data.rows, false); if (type === DIMENSION_METRIC) { diff --git a/frontend/src/metabase/visualizations/lib/settings/graph.js b/frontend/src/metabase/visualizations/lib/settings/graph.js index 93e865edf94..d527fc366df 100644 --- a/frontend/src/metabase/visualizations/lib/settings/graph.js +++ b/frontend/src/metabase/visualizations/lib/settings/graph.js @@ -4,16 +4,19 @@ import { isMetric, isNumeric, isAny, + isDate, } from "metabase/lib/schema_metadata"; import { t } from "c-3po"; -import { - getDefaultColumns, - getOptionFromColumn, -} from "metabase/visualizations/lib/settings"; +import { getOptionFromColumn } from "metabase/visualizations/lib/settings"; import { columnsAreValid, getCardColors, getFriendlyName, + getChartTypeFromData, + getColumnCardinality, + DIMENSION_DIMENSION_METRIC, + DIMENSION_METRIC, + DIMENSION_METRIC_METRIC, } from "metabase/visualizations/lib/utils"; import { dimensionIsNumeric } from "metabase/visualizations/lib/numeric"; import { dimensionIsTimeseries } from "metabase/visualizations/lib/timeseries"; @@ -40,6 +43,66 @@ function getSeriesTitles(series, vizSettings) { ); } +export function getDefaultColumns(series) { + if (series[0].card.display === "scatter") { + return getDefaultScatterColumns(series); + } else { + return getDefaultLineAreaBarColumns(series); + } +} + +function getDefaultScatterColumns([{ data: { cols, rows } }]) { + let dimensions = cols.filter(isDimension); + let metrics = cols.filter(isMetric); + if (dimensions.length === 2 && metrics.length < 2) { + return { + dimensions: [dimensions[0].name], + metrics: [dimensions[1].name], + bubble: metrics.length === 1 ? metrics[0].name : null, + }; + } else { + return { + dimensions: [null], + metrics: [null], + bubble: null, + }; + } +} + +function getDefaultLineAreaBarColumns([{ data: { cols, rows } }]) { + let type = getChartTypeFromData(cols, rows, false); + if (type === DIMENSION_DIMENSION_METRIC) { + let dimensions = [cols[0], cols[1]]; + if (isDate(dimensions[1]) && !isDate(dimensions[0])) { + // if the series dimension is a date but the axis dimension is not then swap them + dimensions.reverse(); + } else if ( + getColumnCardinality(cols, rows, 1) > getColumnCardinality(cols, rows, 0) + ) { + // if the series dimension is higher cardinality than the axis dimension then swap them + dimensions.reverse(); + } + return { + dimensions: dimensions.map(col => col.name), + metrics: [cols[2].name], + }; + } else if (type === DIMENSION_METRIC) { + return { + dimensions: [cols[0].name], + metrics: [cols[1].name], + }; + } else if (type === DIMENSION_METRIC_METRIC) { + return { + dimensions: [cols[0].name], + metrics: cols.slice(1).map(col => col.name), + }; + } + return { + dimensions: [null], + metrics: [null], + }; +} + export const GRAPH_DATA_SETTINGS = { "graph._dimension_filter": { getDefault: ([{ card }]) => -- GitLab