From bac8ab352c4c775c2244dd10faa039eb0c7c82b5 Mon Sep 17 00:00:00 2001 From: Aleksandr Lesnenko <alxnddr@users.noreply.github.com> Date: Fri, 16 Sep 2022 14:26:58 +0400 Subject: [PATCH] remove unused static chart types (#25440) * remove unused static chart types * add visual tests for single series charts --- .../metabase/internal/pages/StaticVizPage.jsx | 68 ------- .../CategoricalAreaChart.jsx | 171 ------------------ .../CategoricalAreaChart/constants.ts | 22 --- .../components/CategoricalAreaChart/index.js | 1 - .../CategoricalBarChart.jsx | 168 ----------------- .../CategoricalBarChart/constants.ts | 22 --- .../components/CategoricalBarChart/index.js | 1 - .../CategoricalLineChart.jsx | 162 ----------------- .../CategoricalLineChart/constants.ts | 22 --- .../components/CategoricalLineChart/index.js | 1 - .../TimeSeriesAreaChart.jsx | 145 --------------- .../TimeSeriesAreaChart/constants.ts | 21 --- .../components/TimeSeriesAreaChart/index.js | 1 - .../TimeSeriesBarChart/TimeSeriesBarChart.jsx | 142 --------------- .../TimeSeriesBarChart/constants.ts | 26 --- .../components/TimeSeriesBarChart/index.js | 1 - .../TimeSeriesLineChart.jsx | 135 -------------- .../TimeSeriesLineChart/constants.ts | 13 -- .../components/TimeSeriesLineChart/index.js | 1 - .../containers/StaticChart/StaticChart.tsx | 24 --- .../StaticChart/StaticChart.unit.spec.js | 168 ----------------- .../containers/StaticChart/constants.ts | 36 ---- .../line-area-bar-combo.cy.spec.js | 19 ++ .../frontend_shared/static_viz_interface.js | 48 ----- 24 files changed, 19 insertions(+), 1399 deletions(-) delete mode 100644 frontend/src/metabase/static-viz/components/CategoricalAreaChart/CategoricalAreaChart.jsx delete mode 100644 frontend/src/metabase/static-viz/components/CategoricalAreaChart/constants.ts delete mode 100644 frontend/src/metabase/static-viz/components/CategoricalAreaChart/index.js delete mode 100644 frontend/src/metabase/static-viz/components/CategoricalBarChart/CategoricalBarChart.jsx delete mode 100644 frontend/src/metabase/static-viz/components/CategoricalBarChart/constants.ts delete mode 100644 frontend/src/metabase/static-viz/components/CategoricalBarChart/index.js delete mode 100644 frontend/src/metabase/static-viz/components/CategoricalLineChart/CategoricalLineChart.jsx delete mode 100644 frontend/src/metabase/static-viz/components/CategoricalLineChart/constants.ts delete mode 100644 frontend/src/metabase/static-viz/components/CategoricalLineChart/index.js delete mode 100644 frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/TimeSeriesAreaChart.jsx delete mode 100644 frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/constants.ts delete mode 100644 frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/index.js delete mode 100644 frontend/src/metabase/static-viz/components/TimeSeriesBarChart/TimeSeriesBarChart.jsx delete mode 100644 frontend/src/metabase/static-viz/components/TimeSeriesBarChart/constants.ts delete mode 100644 frontend/src/metabase/static-viz/components/TimeSeriesBarChart/index.js delete mode 100644 frontend/src/metabase/static-viz/components/TimeSeriesLineChart/TimeSeriesLineChart.jsx delete mode 100644 frontend/src/metabase/static-viz/components/TimeSeriesLineChart/constants.ts delete mode 100644 frontend/src/metabase/static-viz/components/TimeSeriesLineChart/index.js diff --git a/frontend/src/metabase/internal/pages/StaticVizPage.jsx b/frontend/src/metabase/internal/pages/StaticVizPage.jsx index 081b84affaa..f2fd3be7138 100644 --- a/frontend/src/metabase/internal/pages/StaticVizPage.jsx +++ b/frontend/src/metabase/internal/pages/StaticVizPage.jsx @@ -7,30 +7,6 @@ import { STATIC_CHART_DEFAULT_OPTIONS, } from "metabase/static-viz/containers/StaticChart/constants"; import StaticChart from "metabase/static-viz/containers/StaticChart"; -import { - TIME_SERIES_LINE_CHART_DEFAULT_OPTIONS, - TIME_SERIES_LINE_CHART_TYPE, -} from "../../static-viz/components/TimeSeriesLineChart/constants"; -import { - TIME_SERIES_AREA_CHART_DEFAULT_OPTIONS, - TIME_SERIES_AREA_CHART_TYPE, -} from "../../static-viz/components/TimeSeriesAreaChart/constants"; -import { - TIME_SERIES_BAR_CHART_DEFAULT_OPTIONS, - TIME_SERIES_BAR_CHART_TYPE, -} from "../../static-viz/components/TimeSeriesBarChart/constants"; -import { - CATEGORICAL_LINE_CHART_DEFAULT_OPTIONS, - CATEGORICAL_LINE_CHART_TYPE, -} from "../../static-viz/components/CategoricalLineChart/constants"; -import { - CATEGORICAL_AREA_CHART_DEFAULT_OPTIONS, - CATEGORICAL_AREA_CHART_TYPE, -} from "../../static-viz/components/CategoricalAreaChart/constants"; -import { - CATEGORICAL_BAR_CHART_DEFAULT_OPTIONS, - CATEGORICAL_BAR_CHART_TYPE, -} from "../../static-viz/components/CategoricalBarChart/constants"; import { CATEGORICAL_DONUT_CHART_DEFAULT_OPTIONS, CATEGORICAL_DONUT_CHART_TYPE, @@ -155,50 +131,6 @@ export default function StaticVizPage() { </div> )} </PageSection> - - <PageSection> - <Subhead>Line chart with timeseries data</Subhead> - <StaticChart - type={TIME_SERIES_LINE_CHART_TYPE} - options={TIME_SERIES_LINE_CHART_DEFAULT_OPTIONS} - /> - </PageSection> - <PageSection> - <Subhead>Area chart with timeseries data</Subhead> - <StaticChart - type={TIME_SERIES_AREA_CHART_TYPE} - options={TIME_SERIES_AREA_CHART_DEFAULT_OPTIONS} - /> - </PageSection> - <PageSection> - <Subhead>Bar chart with timeseries data</Subhead> - <StaticChart - type={TIME_SERIES_BAR_CHART_TYPE} - options={TIME_SERIES_BAR_CHART_DEFAULT_OPTIONS} - /> - </PageSection> - - <PageSection> - <Subhead>Line chart with categorical data</Subhead> - <StaticChart - type={CATEGORICAL_LINE_CHART_TYPE} - options={CATEGORICAL_LINE_CHART_DEFAULT_OPTIONS} - /> - </PageSection> - <PageSection> - <Subhead>Area chart with categorical data</Subhead> - <StaticChart - type={CATEGORICAL_AREA_CHART_TYPE} - options={CATEGORICAL_AREA_CHART_DEFAULT_OPTIONS} - /> - </PageSection> - <PageSection> - <Subhead>Bar chart with categorical data</Subhead> - <StaticChart - type={CATEGORICAL_BAR_CHART_TYPE} - options={CATEGORICAL_BAR_CHART_DEFAULT_OPTIONS} - /> - </PageSection> <PageSection> <Subhead>Donut chart with categorical data</Subhead> <StaticChart diff --git a/frontend/src/metabase/static-viz/components/CategoricalAreaChart/CategoricalAreaChart.jsx b/frontend/src/metabase/static-viz/components/CategoricalAreaChart/CategoricalAreaChart.jsx deleted file mode 100644 index 8c8d5e168e9..00000000000 --- a/frontend/src/metabase/static-viz/components/CategoricalAreaChart/CategoricalAreaChart.jsx +++ /dev/null @@ -1,171 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import { AxisBottom, AxisLeft } from "@visx/axis"; -import { GridRows } from "@visx/grid"; -import { scaleBand, scaleLinear } from "@visx/scale"; -import { AreaClosed, LinePath } from "@visx/shape"; -import { Text } from "@visx/text"; -import { - getXTickWidth, - getXTickLabelProps, - getYTickLabelProps, - getYTickWidth, - getRotatedXTickHeight, - getLabelProps, -} from "../../lib/axes"; -import { formatNumber } from "../../lib/numbers"; -import { truncateText } from "../../lib/text"; -import { POSITIONAL_ACCESSORS } from "../../constants/accessors"; - -const propTypes = { - data: PropTypes.array.isRequired, - accessors: PropTypes.shape({ - x: PropTypes.func.isRequired, - y: PropTypes.func.isRequired, - }), - settings: PropTypes.shape({ - x: PropTypes.object, - y: PropTypes.object, - colors: PropTypes.object, - }), - labels: PropTypes.shape({ - left: PropTypes.string, - bottom: PropTypes.string, - }), - getColor: PropTypes.func, -}; - -const layout = { - width: 540, - height: 300, - margin: { - top: 0, - left: 55, - right: 40, - bottom: 40, - }, - font: { - size: 11, - family: "Lato, sans-serif", - }, - colors: { - brand: "#509ee3", - textLight: "#b8bbc3", - textMedium: "#949aab", - }, - barPadding: 0.2, - labelFontWeight: 700, - labelPadding: 12, - maxTickWidth: 100, - areaOpacity: 0.2, - strokeDasharray: "4", -}; - -const CategoricalAreaChart = ({ - data, - accessors = POSITIONAL_ACCESSORS, - settings, - labels, - getColor, -}) => { - const colors = settings?.colors; - const isVertical = data.length > 10; - const xTickWidth = getXTickWidth( - data, - accessors, - layout.maxTickWidth, - layout.font.size, - ); - const xTickHeight = getRotatedXTickHeight(xTickWidth); - const yTickWidth = getYTickWidth(data, accessors, settings, layout.font.size); - const xLabelOffset = xTickHeight + layout.labelPadding + layout.font.size; - const yLabelOffset = yTickWidth + layout.labelPadding; - const xMin = yLabelOffset + layout.font.size * 1.5; - const xMax = layout.width - layout.margin.right; - const yMin = isVertical ? xLabelOffset : layout.margin.bottom; - const yMax = layout.height - yMin; - const innerWidth = xMax - xMin; - const textBaseline = Math.floor(layout.font.size / 2); - const leftLabel = labels?.left; - const bottomLabel = !isVertical ? labels?.bottom : undefined; - const palette = { ...layout.colors, ...colors }; - - const xScale = scaleBand({ - domain: data.map(accessors.x), - range: [xMin, xMax], - round: true, - padding: layout.barPadding, - }); - - const yScale = scaleLinear({ - domain: [0, Math.max(...data.map(accessors.y))], - range: [yMax, 0], - nice: true, - }); - - const getXTickProps = ({ x, y, formattedValue, ...props }) => { - const textWidth = isVertical ? xTickWidth : xScale.bandwidth(); - const truncatedText = truncateText( - formattedValue, - textWidth, - layout.font.size, - ); - const transform = isVertical - ? `rotate(45, ${x} ${y}) translate(-${textBaseline} 0)` - : undefined; - - return { ...props, x, y, transform, children: truncatedText }; - }; - - return ( - <svg width={layout.width} height={layout.height}> - <GridRows - scale={yScale} - left={xMin} - width={innerWidth} - strokeDasharray={layout.strokeDasharray} - /> - <AreaClosed - data={data} - yScale={yScale} - fill={palette.brand} - opacity={layout.areaOpacity} - x={d => xScale(accessors.x(d)) + xScale.bandwidth() / 2} - y={d => yScale(accessors.y(d))} - /> - <AxisLeft - scale={yScale} - left={xMin} - label={leftLabel} - labelOffset={yLabelOffset} - hideTicks - hideAxisLine - labelProps={getLabelProps(layout, getColor)} - tickFormat={value => formatNumber(value, settings?.y)} - tickLabelProps={() => getYTickLabelProps(layout, getColor)} - /> - <LinePath - data={data} - stroke={palette.brand} - strokeWidth={layout.strokeWidth} - x={d => xScale(accessors.x(d)) + xScale.bandwidth() / 2} - y={d => yScale(accessors.y(d))} - /> - <AxisBottom - scale={xScale} - top={yMax} - label={bottomLabel} - numTicks={data.length} - stroke={palette.textLight} - tickStroke={palette.textLight} - labelProps={getLabelProps(layout, getColor)} - tickComponent={props => <Text {...getXTickProps(props)} />} - tickLabelProps={() => getXTickLabelProps(layout, isVertical, getColor)} - /> - </svg> - ); -}; - -CategoricalAreaChart.propTypes = propTypes; - -export default CategoricalAreaChart; diff --git a/frontend/src/metabase/static-viz/components/CategoricalAreaChart/constants.ts b/frontend/src/metabase/static-viz/components/CategoricalAreaChart/constants.ts deleted file mode 100644 index 7c91372f58e..00000000000 --- a/frontend/src/metabase/static-viz/components/CategoricalAreaChart/constants.ts +++ /dev/null @@ -1,22 +0,0 @@ -export const CATEGORICAL_AREA_CHART_TYPE = "categorical/area"; - -export const CATEGORICAL_AREA_CHART_DEFAULT_OPTIONS = { - data: [ - ["Alden Sparks", 70], - ["Areli Guerra", 30], - ["Arturo Hopkins", 80], - ["Beatrice Lane", 120], - ["Brylee Davenport", 100], - ["Cali Nixon", 60], - ["Dane Terrell", 150], - ["Deshawn Rollins", 40], - ["Isabell Bright", 70], - ["Kaya Rowe", 20], - ["Roderick Herman", 50], - ["Ruth Dougherty", 75], - ], - labels: { - left: "Tasks", - bottom: "People", - }, -}; diff --git a/frontend/src/metabase/static-viz/components/CategoricalAreaChart/index.js b/frontend/src/metabase/static-viz/components/CategoricalAreaChart/index.js deleted file mode 100644 index f57673cb6a5..00000000000 --- a/frontend/src/metabase/static-viz/components/CategoricalAreaChart/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./CategoricalAreaChart"; diff --git a/frontend/src/metabase/static-viz/components/CategoricalBarChart/CategoricalBarChart.jsx b/frontend/src/metabase/static-viz/components/CategoricalBarChart/CategoricalBarChart.jsx deleted file mode 100644 index b5231519c86..00000000000 --- a/frontend/src/metabase/static-viz/components/CategoricalBarChart/CategoricalBarChart.jsx +++ /dev/null @@ -1,168 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import { AxisBottom, AxisLeft } from "@visx/axis"; -import { GridRows } from "@visx/grid"; -import { scaleBand, scaleLinear } from "@visx/scale"; -import { Bar } from "@visx/shape"; -import { Text } from "@visx/text"; -import { - getXTickWidth, - getXTickLabelProps, - getYTickLabelProps, - getYTickWidth, - getRotatedXTickHeight, - getLabelProps, -} from "../../lib/axes"; -import { formatNumber } from "../../lib/numbers"; -import { truncateText } from "../../lib/text"; -import { POSITIONAL_ACCESSORS } from "../../constants/accessors"; - -const propTypes = { - data: PropTypes.array.isRequired, - accessors: PropTypes.shape({ - x: PropTypes.func.isRequired, - y: PropTypes.func.isRequired, - }), - settings: PropTypes.shape({ - x: PropTypes.object, - y: PropTypes.object, - colors: PropTypes.object, - }), - labels: PropTypes.shape({ - left: PropTypes.string, - bottom: PropTypes.string, - }), - getColor: PropTypes.func, -}; - -const layout = { - width: 540, - height: 300, - margin: { - top: 0, - left: 55, - right: 40, - bottom: 40, - }, - font: { - size: 11, - family: "Lato, sans-serif", - }, - colors: { - brand: "#509ee3", - textLight: "#b8bbc3", - textMedium: "#949aab", - }, - barPadding: 0.2, - labelFontWeight: 700, - labelPadding: 12, - maxTickWidth: 100, - strokeDasharray: "4", -}; - -const CategoricalBarChart = ({ - data, - accessors = POSITIONAL_ACCESSORS, - settings, - labels, - getColor, -}) => { - const colors = settings?.colors; - const isVertical = data.length > 10; - const xTickWidth = getXTickWidth( - data, - accessors, - layout.maxTickWidth, - layout.font.size, - ); - const xTickHeight = getRotatedXTickHeight(xTickWidth); - const yTickWidth = getYTickWidth(data, accessors, settings, layout.font.size); - const xLabelOffset = xTickHeight + layout.labelPadding + layout.font.size; - const yLabelOffset = yTickWidth + layout.labelPadding; - const xMin = yLabelOffset + layout.font.size * 1.5; - const xMax = layout.width - layout.margin.right; - const yMin = isVertical ? xLabelOffset : layout.margin.bottom; - const yMax = layout.height - yMin; - const innerWidth = xMax - xMin; - const innerHeight = yMax - layout.margin.top; - const textBaseline = Math.floor(layout.font.size / 2); - const leftLabel = labels?.left; - const bottomLabel = !isVertical ? labels?.bottom : undefined; - const palette = { ...layout.colors, ...colors }; - - const xScale = scaleBand({ - domain: data.map(accessors.x), - range: [xMin, xMax], - round: true, - padding: layout.barPadding, - }); - - const yScale = scaleLinear({ - domain: [0, Math.max(...data.map(accessors.y))], - range: [yMax, 0], - nice: true, - }); - - const getBarProps = d => { - const width = xScale.bandwidth(); - const height = innerHeight - yScale(accessors.y(d)); - const x = xScale(accessors.x(d)); - const y = yMax - height; - - return { x, y, width, height, fill: palette.brand }; - }; - - const getXTickProps = ({ x, y, formattedValue, ...props }) => { - const textWidth = isVertical ? xTickWidth : xScale.bandwidth(); - const truncatedText = truncateText( - formattedValue, - textWidth, - layout.font.size, - ); - const transform = isVertical - ? `rotate(45, ${x} ${y}) translate(-${textBaseline} 0)` - : undefined; - - return { ...props, x, y, transform, children: truncatedText }; - }; - - return ( - <svg width={layout.width} height={layout.height}> - <GridRows - scale={yScale} - left={xMin} - width={innerWidth} - strokeDasharray={layout.strokeDasharray} - /> - {data.map((d, index) => ( - <Bar key={index} {...getBarProps(d)} /> - ))} - <AxisLeft - scale={yScale} - left={xMin} - label={leftLabel} - labelOffset={yLabelOffset} - hideTicks - hideAxisLine - labelProps={getLabelProps(layout, getColor)} - tickFormat={value => formatNumber(value, settings?.y)} - tickLabelProps={() => getYTickLabelProps(layout, getColor)} - /> - <AxisBottom - scale={xScale} - top={yMax} - label={bottomLabel} - numTicks={data.length} - stroke={palette.textLight} - tickStroke={palette.textLight} - labelProps={getLabelProps(layout, getColor)} - tickComponent={props => <Text {...getXTickProps(props)} />} - tickLabelProps={() => getXTickLabelProps(layout, isVertical, getColor)} - /> - </svg> - ); -}; - -CategoricalBarChart.propTypes = propTypes; - -export default CategoricalBarChart; diff --git a/frontend/src/metabase/static-viz/components/CategoricalBarChart/constants.ts b/frontend/src/metabase/static-viz/components/CategoricalBarChart/constants.ts deleted file mode 100644 index cba67d6241f..00000000000 --- a/frontend/src/metabase/static-viz/components/CategoricalBarChart/constants.ts +++ /dev/null @@ -1,22 +0,0 @@ -export const CATEGORICAL_BAR_CHART_TYPE = "categorical/bar"; - -export const CATEGORICAL_BAR_CHART_DEFAULT_OPTIONS = { - data: [ - ["Alden Sparks", 70], - ["Areli Guerra", 30], - ["Arturo Hopkins", 80], - ["Beatrice Lane", 120], - ["Brylee Davenport", 100], - ["Cali Nixon", 60], - ["Dane Terrell", 150], - ["Deshawn Rollins", 40], - ["Isabell Bright", 70], - ["Kaya Rowe", 20], - ["Roderick Herman", 50], - ["Ruth Dougherty", 75], - ], - labels: { - left: "Tasks", - bottom: "People", - }, -}; diff --git a/frontend/src/metabase/static-viz/components/CategoricalBarChart/index.js b/frontend/src/metabase/static-viz/components/CategoricalBarChart/index.js deleted file mode 100644 index 74a0f3cb5bc..00000000000 --- a/frontend/src/metabase/static-viz/components/CategoricalBarChart/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./CategoricalBarChart"; diff --git a/frontend/src/metabase/static-viz/components/CategoricalLineChart/CategoricalLineChart.jsx b/frontend/src/metabase/static-viz/components/CategoricalLineChart/CategoricalLineChart.jsx deleted file mode 100644 index a6e46aa3027..00000000000 --- a/frontend/src/metabase/static-viz/components/CategoricalLineChart/CategoricalLineChart.jsx +++ /dev/null @@ -1,162 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import { AxisBottom, AxisLeft } from "@visx/axis"; -import { GridRows } from "@visx/grid"; -import { scaleBand, scaleLinear } from "@visx/scale"; -import { LinePath } from "@visx/shape"; -import { Text } from "@visx/text"; -import { - getXTickWidth, - getXTickLabelProps, - getYTickLabelProps, - getYTickWidth, - getRotatedXTickHeight, - getLabelProps, -} from "../../lib/axes"; -import { formatNumber } from "../../lib/numbers"; -import { truncateText } from "../../lib/text"; -import { POSITIONAL_ACCESSORS } from "../../constants/accessors"; - -const propTypes = { - data: PropTypes.array.isRequired, - accessors: PropTypes.shape({ - x: PropTypes.func.isRequired, - y: PropTypes.func.isRequired, - }), - settings: PropTypes.shape({ - x: PropTypes.object, - y: PropTypes.object, - colors: PropTypes.object, - }), - labels: PropTypes.shape({ - left: PropTypes.string, - bottom: PropTypes.string, - }), - getColor: PropTypes.func, -}; - -const layout = { - width: 540, - height: 300, - margin: { - top: 0, - left: 55, - right: 40, - bottom: 40, - }, - font: { - size: 11, - family: "Lato, sans-serif", - }, - colors: { - brand: "#509ee3", - textLight: "#b8bbc3", - textMedium: "#949aab", - }, - barPadding: 0.2, - labelFontWeight: 700, - labelPadding: 12, - maxTickWidth: 100, - strokeDasharray: "4", -}; - -const CategoricalLineChart = ({ - data, - accessors = POSITIONAL_ACCESSORS, - settings, - labels, - getColor, -}) => { - const colors = settings?.colors; - const isVertical = data.length > 10; - const xTickWidth = getXTickWidth( - data, - accessors, - layout.maxTickWidth, - layout.font.size, - ); - const xTickHeight = getRotatedXTickHeight(xTickWidth); - const yTickWidth = getYTickWidth(data, accessors, settings, layout.font.size); - const xLabelOffset = xTickHeight + layout.labelPadding + layout.font.size; - const yLabelOffset = yTickWidth + layout.labelPadding; - const xMin = yLabelOffset + layout.font.size * 1.5; - const xMax = layout.width - layout.margin.right; - const yMin = isVertical ? xLabelOffset : layout.margin.bottom; - const yMax = layout.height - yMin; - const innerWidth = xMax - xMin; - const textBaseline = Math.floor(layout.font.size / 2); - const leftLabel = labels?.left; - const bottomLabel = !isVertical ? labels?.bottom : undefined; - const palette = { ...layout.colors, ...colors }; - - const xScale = scaleBand({ - domain: data.map(accessors.x), - range: [xMin, xMax], - round: true, - padding: layout.barPadding, - }); - - const yScale = scaleLinear({ - domain: [0, Math.max(...data.map(accessors.y))], - range: [yMax, 0], - nice: true, - }); - - const getXTickProps = ({ x, y, formattedValue, ...props }) => { - const textWidth = isVertical ? xTickWidth : xScale.bandwidth(); - const truncatedText = truncateText( - formattedValue, - textWidth, - layout.font.size, - ); - const transform = isVertical - ? `rotate(45, ${x} ${y}) translate(-${textBaseline} 0)` - : undefined; - - return { ...props, x, y, transform, children: truncatedText }; - }; - - return ( - <svg width={layout.width} height={layout.height}> - <GridRows - scale={yScale} - left={xMin} - width={innerWidth} - strokeDasharray={layout.strokeDasharray} - /> - <LinePath - data={data} - stroke={palette.brand} - strokeWidth={layout.strokeWidth} - x={d => xScale(accessors.x(d)) + xScale.bandwidth() / 2} - y={d => yScale(accessors.y(d))} - /> - <AxisLeft - scale={yScale} - left={xMin} - label={leftLabel} - labelOffset={yLabelOffset} - hideTicks - hideAxisLine - labelProps={getLabelProps(layout, getColor)} - tickFormat={value => formatNumber(value, settings?.y)} - tickLabelProps={() => getYTickLabelProps(layout, getColor)} - /> - <AxisBottom - scale={xScale} - top={yMax} - label={bottomLabel} - numTicks={data.length} - stroke={palette.textLight} - tickStroke={palette.textLight} - labelProps={getLabelProps(layout, getColor)} - tickComponent={props => <Text {...getXTickProps(props)} />} - tickLabelProps={() => getXTickLabelProps(layout, isVertical, getColor)} - /> - </svg> - ); -}; - -CategoricalLineChart.propTypes = propTypes; - -export default CategoricalLineChart; diff --git a/frontend/src/metabase/static-viz/components/CategoricalLineChart/constants.ts b/frontend/src/metabase/static-viz/components/CategoricalLineChart/constants.ts deleted file mode 100644 index 6c173d09c46..00000000000 --- a/frontend/src/metabase/static-viz/components/CategoricalLineChart/constants.ts +++ /dev/null @@ -1,22 +0,0 @@ -export const CATEGORICAL_LINE_CHART_TYPE = "categorical/line"; - -export const CATEGORICAL_LINE_CHART_DEFAULT_OPTIONS = { - data: [ - ["Alden Sparks", 70], - ["Areli Guerra", 30], - ["Arturo Hopkins", 80], - ["Beatrice Lane", 120], - ["Brylee Davenport", 100], - ["Cali Nixon", 60], - ["Dane Terrell", 150], - ["Deshawn Rollins", 40], - ["Isabell Bright", 70], - ["Kaya Rowe", 20], - ["Roderick Herman", 50], - ["Ruth Dougherty", 75], - ], - labels: { - left: "Tasks", - bottom: "People", - }, -}; diff --git a/frontend/src/metabase/static-viz/components/CategoricalLineChart/index.js b/frontend/src/metabase/static-viz/components/CategoricalLineChart/index.js deleted file mode 100644 index c6ab45b493b..00000000000 --- a/frontend/src/metabase/static-viz/components/CategoricalLineChart/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./CategoricalLineChart"; diff --git a/frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/TimeSeriesAreaChart.jsx b/frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/TimeSeriesAreaChart.jsx deleted file mode 100644 index e3b6db55623..00000000000 --- a/frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/TimeSeriesAreaChart.jsx +++ /dev/null @@ -1,145 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import { scaleLinear, scaleBand } from "@visx/scale"; -import { GridRows } from "@visx/grid"; -import { AxisBottom, AxisLeft } from "@visx/axis"; -import { AreaClosed, LinePath } from "@visx/shape"; -import { - getLabelProps, - getXTickLabelProps, - getYTickLabelProps, - getYTickWidth, -} from "../../lib/axes"; -import { formatDate } from "../../lib/dates"; -import { formatNumber } from "../../lib/numbers"; -import { sortTimeSeries } from "../../lib/sort"; -import { DATE_ACCESSORS } from "../../constants/accessors"; - -const propTypes = { - data: PropTypes.array.isRequired, - accessors: PropTypes.shape({ - x: PropTypes.func, - y: PropTypes.func, - }), - settings: PropTypes.shape({ - x: PropTypes.object, - y: PropTypes.object, - colors: PropTypes.object, - }), - labels: PropTypes.shape({ - left: PropTypes.string, - bottom: PropTypes.string, - }), - getColor: PropTypes.func, -}; - -const layout = { - width: 540, - height: 300, - margin: { - top: 0, - left: 55, - right: 40, - bottom: 40, - }, - font: { - size: 11, - family: "Lato, sans-serif", - }, - colors: { - brand: "#509ee3", - brandLight: "#DDECFA", - textLight: "#b8bbc3", - textMedium: "#949aab", - }, - numTicks: 5, - strokeWidth: 2, - labelFontWeight: 700, - labelPadding: 12, - areaOpacity: 0.2, - strokeDasharray: "4", -}; - -const TimeSeriesAreaChart = ({ - data, - accessors = DATE_ACCESSORS, - settings, - labels, - getColor, -}) => { - data = sortTimeSeries(data); - const colors = settings?.colors; - const yTickWidth = getYTickWidth(data, accessors, settings, layout.font.size); - const yLabelOffset = yTickWidth + layout.labelPadding; - const xMin = yLabelOffset + layout.font.size * 1.5; - const xMax = layout.width - layout.margin.right; - const yMax = layout.height - layout.margin.bottom; - const innerWidth = xMax - xMin; - const leftLabel = labels?.left; - const bottomLabel = labels?.bottom; - const palette = { ...layout.colors, ...colors }; - - const xScale = scaleBand({ - domain: data.map(accessors.x), - range: [xMin, xMax], - round: true, - }); - - const yScale = scaleLinear({ - domain: [0, Math.max(...data.map(accessors.y))], - range: [yMax, 0], - nice: true, - }); - - return ( - <svg width={layout.width} height={layout.height}> - <GridRows - scale={yScale} - left={xMin} - width={innerWidth} - strokeDasharray={layout.strokeDasharray} - /> - <AreaClosed - data={data} - yScale={yScale} - fill={palette.brand} - opacity={layout.areaOpacity} - x={d => xScale(accessors.x(d)) + xScale.bandwidth() / 2} - y={d => yScale(accessors.y(d))} - /> - <LinePath - data={data} - stroke={palette.brand} - strokeWidth={layout.strokeWidth} - x={d => xScale(accessors.x(d)) + xScale.bandwidth() / 2} - y={d => yScale(accessors.y(d))} - /> - <AxisLeft - scale={yScale} - left={xMin} - label={leftLabel} - labelOffset={yLabelOffset} - hideTicks - hideAxisLine - labelProps={getLabelProps(layout, getColor)} - tickFormat={value => formatNumber(value, settings?.y)} - tickLabelProps={() => getYTickLabelProps(layout, getColor)} - /> - <AxisBottom - scale={xScale} - top={yMax} - label={bottomLabel} - numTicks={layout.numTicks} - stroke={palette.textLight} - tickStroke={palette.textLight} - labelProps={getLabelProps(layout, getColor)} - tickFormat={value => formatDate(value, settings?.x)} - tickLabelProps={() => getXTickLabelProps(layout, false, getColor)} - /> - </svg> - ); -}; - -TimeSeriesAreaChart.propTypes = propTypes; - -export default TimeSeriesAreaChart; diff --git a/frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/constants.ts b/frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/constants.ts deleted file mode 100644 index 0e22c3b2f7c..00000000000 --- a/frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/constants.ts +++ /dev/null @@ -1,21 +0,0 @@ -export const TIME_SERIES_AREA_CHART_TYPE = "timeseries/area"; - -export const TIME_SERIES_AREA_CHART_DEFAULT_OPTIONS = { - data: [ - ["2020-01-10", 10], - ["2020-06-10", 60], - ["2020-12-10", 80], - ], - settings: { - x: { - date_style: "MMM", - }, - }, - labels: { - left: "Count", - bottom: "Created At", - }, - colors: { - brand: "#88BF4D", - }, -}; diff --git a/frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/index.js b/frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/index.js deleted file mode 100644 index 97b1d21fca2..00000000000 --- a/frontend/src/metabase/static-viz/components/TimeSeriesAreaChart/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./TimeSeriesAreaChart"; diff --git a/frontend/src/metabase/static-viz/components/TimeSeriesBarChart/TimeSeriesBarChart.jsx b/frontend/src/metabase/static-viz/components/TimeSeriesBarChart/TimeSeriesBarChart.jsx deleted file mode 100644 index 158c65b93fe..00000000000 --- a/frontend/src/metabase/static-viz/components/TimeSeriesBarChart/TimeSeriesBarChart.jsx +++ /dev/null @@ -1,142 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import { AxisBottom, AxisLeft } from "@visx/axis"; -import { GridRows } from "@visx/grid"; -import { scaleBand, scaleLinear } from "@visx/scale"; -import { Bar } from "@visx/shape"; -import { - getLabelProps, - getXTickLabelProps, - getYTickLabelProps, - getYTickWidth, -} from "../../lib/axes"; -import { formatDate } from "../../lib/dates"; -import { formatNumber } from "../../lib/numbers"; -import { sortTimeSeries } from "../../lib/sort"; -import { DATE_ACCESSORS } from "../../constants/accessors"; - -const propTypes = { - data: PropTypes.array.isRequired, - accessors: PropTypes.shape({ - x: PropTypes.func.isRequired, - y: PropTypes.func.isRequired, - }), - settings: PropTypes.shape({ - x: PropTypes.object, - y: PropTypes.object, - colors: PropTypes.object, - }), - labels: PropTypes.shape({ - left: PropTypes.string, - bottom: PropTypes.string, - }), - getColor: PropTypes.func, -}; - -const layout = { - width: 540, - height: 300, - margin: { - top: 0, - left: 55, - right: 40, - bottom: 40, - }, - font: { - size: 11, - family: "Lato, sans-serif", - }, - colors: { - brand: "#509ee3", - textLight: "#b8bbc3", - textMedium: "#949aab", - }, - numTicks: 5, - barPadding: 0.2, - labelFontWeight: 700, - labelPadding: 12, - strokeDasharray: "4", -}; - -const TimeSeriesBarChart = ({ - data, - accessors = DATE_ACCESSORS, - settings, - labels, - getColor, -}) => { - data = sortTimeSeries(data); - const colors = settings?.colors; - const yTickWidth = getYTickWidth(data, accessors, settings, layout.font.size); - const yLabelOffset = yTickWidth + layout.labelPadding; - const xMin = yLabelOffset + layout.font.size * 1.5; - const xMax = layout.width - layout.margin.right; - const yMax = layout.height - layout.margin.bottom; - const innerWidth = xMax - xMin; - const innerHeight = yMax - layout.margin.top; - const leftLabel = labels?.left; - const bottomLabel = labels?.bottom; - const palette = { ...layout.colors, ...colors }; - - const xScale = scaleBand({ - domain: data.map(accessors.x), - range: [xMin, xMax], - round: true, - padding: layout.barPadding, - }); - - const yScale = scaleLinear({ - domain: [0, Math.max(...data.map(accessors.y))], - range: [yMax, 0], - nice: true, - }); - - const getBarProps = d => { - const width = xScale.bandwidth(); - const height = innerHeight - yScale(accessors.y(d)); - const x = xScale(accessors.x(d)); - const y = yMax - height; - - return { x, y, width, height, fill: palette.brand }; - }; - - return ( - <svg width={layout.width} height={layout.height}> - <GridRows - scale={yScale} - left={xMin} - width={innerWidth} - strokeDasharray={layout.strokeDasharray} - /> - {data.map((d, index) => ( - <Bar key={index} {...getBarProps(d)} /> - ))} - <AxisLeft - scale={yScale} - left={xMin} - label={leftLabel} - labelOffset={yLabelOffset} - hideTicks - hideAxisLine - labelProps={getLabelProps(layout, getColor)} - tickFormat={value => formatNumber(value, settings?.y)} - tickLabelProps={() => getYTickLabelProps(layout, getColor)} - /> - <AxisBottom - scale={xScale} - top={yMax} - label={bottomLabel} - numTicks={layout.numTicks} - stroke={palette.textLight} - tickStroke={palette.textLight} - labelProps={getLabelProps(layout, getColor)} - tickFormat={value => formatDate(value, settings?.x)} - tickLabelProps={() => getXTickLabelProps(layout, false, getColor)} - /> - </svg> - ); -}; - -TimeSeriesBarChart.propTypes = propTypes; - -export default TimeSeriesBarChart; diff --git a/frontend/src/metabase/static-viz/components/TimeSeriesBarChart/constants.ts b/frontend/src/metabase/static-viz/components/TimeSeriesBarChart/constants.ts deleted file mode 100644 index a15964b7484..00000000000 --- a/frontend/src/metabase/static-viz/components/TimeSeriesBarChart/constants.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const TIME_SERIES_BAR_CHART_TYPE = "timeseries/bar"; - -export const TIME_SERIES_BAR_CHART_DEFAULT_OPTIONS = { - data: [ - ["2020-10-21", 20], - ["2020-10-22", 30], - ["2020-10-23", 25], - ["2020-10-24", 10], - ["2020-10-25", 15], - ], - settings: { - x: { - date_style: "MM/DD/YYYY", - }, - y: { - number_style: "currency", - currency: "USD", - currency_style: "symbol", - decimals: 0, - }, - }, - labels: { - left: "Price", - bottom: "Created At", - }, -}; diff --git a/frontend/src/metabase/static-viz/components/TimeSeriesBarChart/index.js b/frontend/src/metabase/static-viz/components/TimeSeriesBarChart/index.js deleted file mode 100644 index b105a05e679..00000000000 --- a/frontend/src/metabase/static-viz/components/TimeSeriesBarChart/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./TimeSeriesBarChart"; diff --git a/frontend/src/metabase/static-viz/components/TimeSeriesLineChart/TimeSeriesLineChart.jsx b/frontend/src/metabase/static-viz/components/TimeSeriesLineChart/TimeSeriesLineChart.jsx deleted file mode 100644 index 7d720b3f8c8..00000000000 --- a/frontend/src/metabase/static-viz/components/TimeSeriesLineChart/TimeSeriesLineChart.jsx +++ /dev/null @@ -1,135 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import { scaleLinear, scaleBand } from "@visx/scale"; -import { GridRows } from "@visx/grid"; -import { AxisBottom, AxisLeft } from "@visx/axis"; -import { LinePath } from "@visx/shape"; -import { - getXTickLabelProps, - getYTickWidth, - getYTickLabelProps, - getLabelProps, -} from "../../lib/axes"; -import { formatDate } from "../../lib/dates"; -import { formatNumber } from "../../lib/numbers"; -import { sortTimeSeries } from "../../lib/sort"; -import { DATE_ACCESSORS } from "../../constants/accessors"; - -const propTypes = { - data: PropTypes.array.isRequired, - accessors: PropTypes.shape({ - x: PropTypes.func, - y: PropTypes.func, - }), - settings: PropTypes.shape({ - x: PropTypes.object, - y: PropTypes.object, - colors: PropTypes.object, - }), - labels: PropTypes.shape({ - left: PropTypes.string, - bottom: PropTypes.string, - }), - getColor: PropTypes.func, -}; - -const layout = { - width: 540, - height: 300, - margin: { - top: 0, - left: 55, - right: 40, - bottom: 40, - }, - font: { - size: 11, - family: "Lato, sans-serif", - }, - colors: { - brand: "#509ee3", - textLight: "#b8bbc3", - textMedium: "#949aab", - }, - numTicks: 5, - labelFontWeight: 700, - labelPadding: 12, - strokeWidth: 2, - strokeDasharray: "4", -}; - -const TimeSeriesLineChart = ({ - data, - accessors = DATE_ACCESSORS, - settings, - labels, - getColor, -}) => { - data = sortTimeSeries(data); - const colors = settings?.colors; - const yTickWidth = getYTickWidth(data, accessors, settings, layout.font.size); - const yLabelOffset = yTickWidth + layout.labelPadding; - const xMin = yLabelOffset + layout.font.size * 1.5; - const xMax = layout.width - layout.margin.right; - const yMax = layout.height - layout.margin.bottom; - const innerWidth = xMax - xMin; - const leftLabel = labels?.left; - const bottomLabel = labels?.bottom; - const palette = { ...layout.colors, ...colors }; - - const xScale = scaleBand({ - domain: data.map(accessors.x), - range: [xMin, xMax], - round: true, - }); - - const yScale = scaleLinear({ - domain: [0, Math.max(...data.map(accessors.y))], - range: [yMax, 0], - nice: true, - }); - - return ( - <svg width={layout.width} height={layout.height}> - <GridRows - scale={yScale} - left={xMin} - width={innerWidth} - strokeDasharray={layout.strokeDasharray} - /> - <LinePath - data={data} - stroke={palette.brand} - strokeWidth={layout.strokeWidth} - x={d => xScale(accessors.x(d)) + xScale.bandwidth() / 2} - y={d => yScale(accessors.y(d))} - /> - <AxisLeft - scale={yScale} - left={xMin} - label={leftLabel} - labelOffset={yLabelOffset} - hideTicks - hideAxisLine - labelProps={getLabelProps(layout, getColor)} - tickFormat={value => formatNumber(value, settings?.y)} - tickLabelProps={() => getYTickLabelProps(layout, getColor)} - /> - <AxisBottom - scale={xScale} - top={yMax} - label={bottomLabel} - numTicks={layout.numTicks} - stroke={palette.textLight} - tickStroke={palette.textLight} - labelProps={getLabelProps(layout, getColor)} - tickFormat={value => formatDate(value, settings?.x)} - tickLabelProps={() => getXTickLabelProps(layout, false, getColor)} - /> - </svg> - ); -}; - -TimeSeriesLineChart.propTypes = propTypes; - -export default TimeSeriesLineChart; diff --git a/frontend/src/metabase/static-viz/components/TimeSeriesLineChart/constants.ts b/frontend/src/metabase/static-viz/components/TimeSeriesLineChart/constants.ts deleted file mode 100644 index b29045effa7..00000000000 --- a/frontend/src/metabase/static-viz/components/TimeSeriesLineChart/constants.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const TIME_SERIES_LINE_CHART_TYPE = "timeseries/line"; - -export const TIME_SERIES_LINE_CHART_DEFAULT_OPTIONS = { - data: [ - ["2020-01-10", 10], - ["2020-06-10", 60], - ["2020-12-10", 80], - ], - labels: { - left: "Count", - bottom: "Created At", - }, -}; diff --git a/frontend/src/metabase/static-viz/components/TimeSeriesLineChart/index.js b/frontend/src/metabase/static-viz/components/TimeSeriesLineChart/index.js deleted file mode 100644 index d23115fed8d..00000000000 --- a/frontend/src/metabase/static-viz/components/TimeSeriesLineChart/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./TimeSeriesLineChart"; diff --git a/frontend/src/metabase/static-viz/containers/StaticChart/StaticChart.tsx b/frontend/src/metabase/static-viz/containers/StaticChart/StaticChart.tsx index 334a3ee2bb4..f023616b482 100644 --- a/frontend/src/metabase/static-viz/containers/StaticChart/StaticChart.tsx +++ b/frontend/src/metabase/static-viz/containers/StaticChart/StaticChart.tsx @@ -1,21 +1,9 @@ import React from "react"; import { createColorGetter } from "metabase/static-viz/lib/colors"; -import CategoricalAreaChart from "../../components/CategoricalAreaChart"; -import { CATEGORICAL_AREA_CHART_TYPE } from "../../components/CategoricalAreaChart/constants"; -import CategoricalBarChart from "../../components/CategoricalBarChart"; -import { CATEGORICAL_BAR_CHART_TYPE } from "../../components/CategoricalBarChart/constants"; import CategoricalDonutChart from "../../components/CategoricalDonutChart"; import { CATEGORICAL_DONUT_CHART_TYPE } from "../../components/CategoricalDonutChart/constants"; -import CategoricalLineChart from "../../components/CategoricalLineChart"; -import { CATEGORICAL_LINE_CHART_TYPE } from "../../components/CategoricalLineChart/constants"; import CategoricalWaterfallChart from "../../components/CategoricalWaterfallChart"; import { CATEGORICAL_WATERFALL_CHART_TYPE } from "../../components/CategoricalWaterfallChart/constants"; -import TimeSeriesAreaChart from "../../components/TimeSeriesAreaChart"; -import { TIME_SERIES_AREA_CHART_TYPE } from "../../components/TimeSeriesAreaChart/constants"; -import TimeSeriesBarChart from "../../components/TimeSeriesBarChart"; -import { TIME_SERIES_BAR_CHART_TYPE } from "../../components/TimeSeriesBarChart/constants"; -import TimeSeriesLineChart from "../../components/TimeSeriesLineChart"; -import { TIME_SERIES_LINE_CHART_TYPE } from "../../components/TimeSeriesLineChart/constants"; import TimeSeriesWaterfallChart from "../../components/TimeSeriesWaterfallChart"; import { TIME_SERIES_WATERFALL_CHART_TYPE } from "../../components/TimeSeriesWaterfallChart/constants"; import ProgressBar from "../../components/ProgressBar"; @@ -31,22 +19,10 @@ const StaticChart = ({ type, options }: StaticChartProps) => { const chartProps = { ...options, getColor }; switch (type) { - case CATEGORICAL_AREA_CHART_TYPE: - return <CategoricalAreaChart {...chartProps} />; - case CATEGORICAL_BAR_CHART_TYPE: - return <CategoricalBarChart {...chartProps} />; case CATEGORICAL_DONUT_CHART_TYPE: return <CategoricalDonutChart {...chartProps} />; - case CATEGORICAL_LINE_CHART_TYPE: - return <CategoricalLineChart {...chartProps} />; case CATEGORICAL_WATERFALL_CHART_TYPE: return <CategoricalWaterfallChart {...chartProps} />; - case TIME_SERIES_AREA_CHART_TYPE: - return <TimeSeriesAreaChart {...chartProps} />; - case TIME_SERIES_BAR_CHART_TYPE: - return <TimeSeriesBarChart {...chartProps} />; - case TIME_SERIES_LINE_CHART_TYPE: - return <TimeSeriesLineChart {...chartProps} />; case TIME_SERIES_WATERFALL_CHART_TYPE: return <TimeSeriesWaterfallChart {...chartProps} />; case PROGRESS_BAR_TYPE: diff --git a/frontend/src/metabase/static-viz/containers/StaticChart/StaticChart.unit.spec.js b/frontend/src/metabase/static-viz/containers/StaticChart/StaticChart.unit.spec.js index 2aae7c07c77..9ca7ae02570 100644 --- a/frontend/src/metabase/static-viz/containers/StaticChart/StaticChart.unit.spec.js +++ b/frontend/src/metabase/static-viz/containers/StaticChart/StaticChart.unit.spec.js @@ -3,96 +3,6 @@ import { render, screen } from "@testing-library/react"; import StaticChart from "./StaticChart"; describe("StaticChart", () => { - it("should render categorical/line", () => { - render( - <StaticChart - type="categorical/line" - options={{ - data: [ - ["Gadget", 20], - ["Widget", 31], - ], - settings: { - y: { - number_style: "currency", - currency: "USD", - currency_style: "symbol", - }, - }, - labels: { - left: "Count", - bottom: "Category", - }, - }} - />, - ); - - screen.getByText("Gadget"); - screen.getByText("Widget"); - screen.getAllByText("Count"); - screen.getAllByText("Category"); - }); - - it("should render categorical/area", () => { - render( - <StaticChart - type="categorical/area" - options={{ - data: [ - ["Gadget", 20], - ["Widget", 31], - ], - settings: { - y: { - number_style: "currency", - currency: "USD", - currency_style: "symbol", - }, - }, - labels: { - left: "Count", - bottom: "Category", - }, - }} - />, - ); - - screen.getByText("Gadget"); - screen.getByText("Widget"); - screen.getAllByText("Count"); - screen.getAllByText("Category"); - }); - - it("should render categorical/bar", () => { - render( - <StaticChart - type="categorical/bar" - options={{ - data: [ - ["Gadget", 20], - ["Widget", 31], - ], - settings: { - y: { - number_style: "currency", - currency: "USD", - currency_style: "symbol", - }, - }, - labels: { - left: "Count", - bottom: "Category", - }, - }} - />, - ); - - screen.getByText("Gadget"); - screen.getByText("Widget"); - screen.getAllByText("Count"); - screen.getAllByText("Category"); - }); - it("should render categorical/donut", () => { render( <StaticChart @@ -120,82 +30,4 @@ describe("StaticChart", () => { screen.getByText("$5,100.00"); screen.getAllByText("TOTAL"); }); - - it("should render timeseries/line", () => { - render( - <StaticChart - type="timeseries/line" - options={{ - data: [ - ["2010-11-07", 20], - ["2020-11-08", 30], - ], - settings: { - x: { - date_style: "dddd", - }, - }, - labels: { - left: "Count", - bottom: "Time", - }, - }} - />, - ); - - screen.getAllByText("Count"); - screen.getAllByText("Time"); - }); - - it("should render timeseries/area", () => { - render( - <StaticChart - type="timeseries/area" - options={{ - data: [ - ["2010-11-07", 20], - ["2020-11-08", 30], - ], - settings: { - x: { - date_style: "MMM", - }, - }, - labels: { - left: "Count", - bottom: "Time", - }, - }} - />, - ); - - screen.getAllByText("Count"); - screen.getAllByText("Time"); - }); - - it("should render timeseries/bar", () => { - render( - <StaticChart - type="timeseries/bar" - options={{ - data: [ - ["2010-11-07", 20], - ["2020-11-08", 30], - ], - settings: { - x: { - date_style: "dddd", - }, - }, - labels: { - left: "Count", - bottom: "Time", - }, - }} - />, - ); - - screen.getAllByText("Count"); - screen.getAllByText("Time"); - }); }); diff --git a/frontend/src/metabase/static-viz/containers/StaticChart/constants.ts b/frontend/src/metabase/static-viz/containers/StaticChart/constants.ts index fff4f864376..189d86d257f 100644 --- a/frontend/src/metabase/static-viz/containers/StaticChart/constants.ts +++ b/frontend/src/metabase/static-viz/containers/StaticChart/constants.ts @@ -1,35 +1,11 @@ -import { - CATEGORICAL_AREA_CHART_DEFAULT_OPTIONS, - CATEGORICAL_AREA_CHART_TYPE, -} from "../../components/CategoricalAreaChart/constants"; -import { - CATEGORICAL_BAR_CHART_DEFAULT_OPTIONS, - CATEGORICAL_BAR_CHART_TYPE, -} from "../../components/CategoricalBarChart/constants"; import { CATEGORICAL_DONUT_CHART_DEFAULT_OPTIONS, CATEGORICAL_DONUT_CHART_TYPE, } from "../../components/CategoricalDonutChart/constants"; -import { - CATEGORICAL_LINE_CHART_DEFAULT_OPTIONS, - CATEGORICAL_LINE_CHART_TYPE, -} from "../../components/CategoricalLineChart/constants"; import { CATEGORICAL_WATERFALL_CHART_DEFAULT_OPTIONS, CATEGORICAL_WATERFALL_CHART_TYPE, } from "../../components/CategoricalWaterfallChart/constants"; -import { - TIME_SERIES_AREA_CHART_DEFAULT_OPTIONS, - TIME_SERIES_AREA_CHART_TYPE, -} from "../../components/TimeSeriesAreaChart/constants"; -import { - TIME_SERIES_BAR_CHART_DEFAULT_OPTIONS, - TIME_SERIES_BAR_CHART_TYPE, -} from "../../components/TimeSeriesBarChart/constants"; -import { - TIME_SERIES_LINE_CHART_DEFAULT_OPTIONS, - TIME_SERIES_LINE_CHART_TYPE, -} from "../../components/TimeSeriesLineChart/constants"; import { TIME_SERIES_WATERFALL_CHART_DEFAULT_OPTIONS, TIME_SERIES_WATERFALL_CHART_TYPE, @@ -48,14 +24,8 @@ import { } from "../../components/FunnelChart/constants"; export const STATIC_CHART_TYPES = [ - CATEGORICAL_AREA_CHART_TYPE, - CATEGORICAL_BAR_CHART_TYPE, CATEGORICAL_DONUT_CHART_TYPE, - CATEGORICAL_LINE_CHART_TYPE, CATEGORICAL_WATERFALL_CHART_TYPE, - TIME_SERIES_AREA_CHART_TYPE, - TIME_SERIES_BAR_CHART_TYPE, - TIME_SERIES_LINE_CHART_TYPE, TIME_SERIES_WATERFALL_CHART_TYPE, PROGRESS_BAR_TYPE, LINE_AREA_BAR_CHART_TYPE, @@ -63,14 +33,8 @@ export const STATIC_CHART_TYPES = [ ] as const; export const STATIC_CHART_DEFAULT_OPTIONS = [ - CATEGORICAL_AREA_CHART_DEFAULT_OPTIONS, - CATEGORICAL_BAR_CHART_DEFAULT_OPTIONS, CATEGORICAL_DONUT_CHART_DEFAULT_OPTIONS, - CATEGORICAL_LINE_CHART_DEFAULT_OPTIONS, CATEGORICAL_WATERFALL_CHART_DEFAULT_OPTIONS, - TIME_SERIES_AREA_CHART_DEFAULT_OPTIONS, - TIME_SERIES_BAR_CHART_DEFAULT_OPTIONS, - TIME_SERIES_LINE_CHART_DEFAULT_OPTIONS, TIME_SERIES_WATERFALL_CHART_DEFAULT_OPTIONS, PROGRESS_BAR_DEFAULT_DATA_1, LINE_AREA_BAR_DEFAULT_OPTIONS_1, diff --git a/frontend/test/metabase-visual/static-visualizations/line-area-bar-combo.cy.spec.js b/frontend/test/metabase-visual/static-visualizations/line-area-bar-combo.cy.spec.js index b8f2fc0daa0..d720e5ec1f2 100644 --- a/frontend/test/metabase-visual/static-visualizations/line-area-bar-combo.cy.spec.js +++ b/frontend/test/metabase-visual/static-visualizations/line-area-bar-combo.cy.spec.js @@ -28,6 +28,7 @@ describe("static visualizations", () => { cy.createDashboardWithQuestions({ dashboardName, questions: [ + createOneDimensionOneMetricQuestion(visualizationType), createOneMetricTwoDimensionsQuestion(visualizationType), createOneDimensionTwoMetricsQuestion(visualizationType), ], @@ -44,6 +45,24 @@ describe("static visualizations", () => { }); }); +function createOneDimensionOneMetricQuestion(display) { + return { + name: `${display} one dimension one metric`, + query: { + "source-table": ORDERS_ID, + aggregation: [["count"]], + breakout: [["field", ORDERS.CREATED_AT, { "temporal-unit": "month" }]], + }, + visualization_settings: { + "graph.dimensions": ["CREATED_AT"], + "graph.metrics": ["count"], + "graph.show_values": true, + }, + display: display, + database: SAMPLE_DB_ID, + }; +} + function createOneDimensionTwoMetricsQuestion(display) { return { name: `${display} one dimension two metrics`, diff --git a/resources/frontend_shared/static_viz_interface.js b/resources/frontend_shared/static_viz_interface.js index 97dc555c2af..c6a7b3855e9 100644 --- a/resources/frontend_shared/static_viz_interface.js +++ b/resources/frontend_shared/static_viz_interface.js @@ -14,30 +14,6 @@ function toJSMap(m) { return o; } -function timeseries_line(data, labels, settings) { - return StaticViz.RenderChart("timeseries/line", { - data: toJSArray(data), - labels: toJSMap(labels), - settings: JSON.parse(settings), - }); -} - -function timeseries_bar(data, labels, settings) { - return StaticViz.RenderChart("timeseries/bar", { - data: toJSArray(data), - labels: toJSMap(labels), - settings: JSON.parse(settings), - }); -} - -function timeseries_area(data, labels, settings) { - return StaticViz.RenderChart("timeseries/area", { - data: toJSArray(data), - labels: toJSMap(labels), - settings: JSON.parse(settings), - }); -} - function combo_chart(series, settings, colors) { // Thinking of combo as similar to multiple, although they're different in BE return StaticViz.RenderChart("combo-chart", { @@ -63,30 +39,6 @@ function funnel(data, settings) { }); } -function categorical_bar(data, labels, settings) { - return StaticViz.RenderChart("categorical/bar", { - data: toJSArray(data), - labels: toJSMap(labels), - settings: JSON.parse(settings), - }); -} - -function categorical_area(data, labels, settings) { - return StaticViz.RenderChart("categorical/area", { - data: toJSArray(data), - labels: toJSMap(labels), - settings: JSON.parse(settings), - }); -} - -function categorical_line(data, labels, settings) { - return StaticViz.RenderChart("categorical/line", { - data: toJSArray(data), - labels: toJSMap(labels), - settings: JSON.parse(settings), - }); -} - function categorical_donut(rows, colors) { return StaticViz.RenderChart("categorical/donut", { data: toJSArray(rows), -- GitLab