Skip to content
Snippets Groups Projects
Unverified Commit ce48b30e authored by Anton Kulyk's avatar Anton Kulyk Committed by GitHub
Browse files

Revert graph settings sync change (#44535)

* Skip repro for 10493

* Add repro for 44532

* Remove `ensureMetricsAndDimensions`
parent fa192d94
No related branches found
No related tags found
No related merge requests found
...@@ -30,6 +30,7 @@ import { ...@@ -30,6 +30,7 @@ import {
echartsContainer, echartsContainer,
newButton, newButton,
appBar, appBar,
openProductsTable,
} from "e2e/support/helpers"; } from "e2e/support/helpers";
const { ORDERS, ORDERS_ID, PRODUCTS } = SAMPLE_DATABASE; const { ORDERS, ORDERS_ID, PRODUCTS } = SAMPLE_DATABASE;
...@@ -636,7 +637,7 @@ describe("issue 42957", () => { ...@@ -636,7 +637,7 @@ describe("issue 42957", () => {
}); });
}); });
describe("issue 10493", () => { describe.skip("issue 10493", () => {
beforeEach(() => { beforeEach(() => {
restore(); restore();
cy.intercept("POST", "/api/dataset").as("dataset"); cy.intercept("POST", "/api/dataset").as("dataset");
...@@ -776,3 +777,87 @@ describe("issue 44415", () => { ...@@ -776,3 +777,87 @@ describe("issue 44415", () => {
}); });
}); });
}); });
describe("issue 44532", () => {
beforeEach(() => {
restore();
cy.signInAsAdmin();
openProductsTable();
});
it("should update chart metrics and dimensions with each added breakout (metabase #44532)", () => {
summarize();
rightSidebar()
.findByRole("listitem", { name: "Category" })
.button("Add dimension")
.click();
cy.wait("@dataset");
echartsContainer().within(() => {
cy.findByText("Count").should("exist"); // y-axis
cy.findByText("Category").should("exist"); // x-axis
// x-axis values
cy.findByText("Doohickey").should("exist");
cy.findByText("Gadget").should("exist");
cy.findByText("Gizmo").should("exist");
cy.findByText("Widget").should("exist");
});
rightSidebar()
.findByRole("listitem", { name: "Created At" })
.button("Add dimension")
.click();
cy.wait("@dataset");
cy.findByLabelText("Legend").within(() => {
cy.findByText("Doohickey").should("exist");
cy.findByText("Gadget").should("exist");
cy.findByText("Gizmo").should("exist");
cy.findByText("Widget").should("exist");
});
echartsContainer().within(() => {
cy.findByText("Count").should("exist"); // y-axis
cy.findByText("Created At").should("exist"); // x-axis
// x-axis values
cy.findByText("January 2023").should("exist");
cy.findByText("January 2024").should("exist");
cy.findByText("January 2025").should("exist");
// previous x-axis values
cy.findByText("Doohickey").should("not.exist");
cy.findByText("Gadget").should("not.exist");
cy.findByText("Gizmo").should("not.exist");
cy.findByText("Widget").should("not.exist");
});
rightSidebar().button("Done").click();
cy.wait("@dataset");
cy.findByLabelText("Legend").within(() => {
cy.findByText("Doohickey").should("exist");
cy.findByText("Gadget").should("exist");
cy.findByText("Gizmo").should("exist");
cy.findByText("Widget").should("exist");
});
echartsContainer().within(() => {
cy.findByText("Count").should("exist"); // y-axis
cy.findByText("Created At").should("exist"); // x-axis
// x-axis values
cy.findByText("January 2023").should("exist");
cy.findByText("January 2024").should("exist");
cy.findByText("January 2025").should("exist");
// previous x-axis values
cy.findByText("Doohickey").should("not.exist");
cy.findByText("Gadget").should("not.exist");
cy.findByText("Gizmo").should("not.exist");
cy.findByText("Widget").should("not.exist");
});
});
});
...@@ -128,15 +128,6 @@ export function getDefaultSize(display: string) { ...@@ -128,15 +128,6 @@ export function getDefaultSize(display: string) {
return visualization?.defaultSize; return visualization?.defaultSize;
} }
export function hasGraphDataSettings(display: string) {
const visualization = visualizations.get(display);
const settingDefinitions = visualization?.settings ?? {};
return (
"graph.dimensions" in settingDefinitions &&
"graph.metrics" in settingDefinitions
);
}
// removes columns with `remapped_from` property and adds a `remapping` to the appropriate column // removes columns with `remapped_from` property and adds a `remapping` to the appropriate column
export const extractRemappedColumns = (data: DatasetData) => { export const extractRemappedColumns = (data: DatasetData) => {
const cols: RemappingHydratedDatasetColumn[] = data.cols.map(col => ({ const cols: RemappingHydratedDatasetColumn[] = data.cols.map(col => ({
......
import { isNotNull } from "metabase/lib/types";
import {
getMaxDimensionsSupported,
getMaxMetricsSupported,
hasGraphDataSettings,
} from "metabase/visualizations";
import { import {
findColumnIndexesForColumnSettings, findColumnIndexesForColumnSettings,
findColumnSettingIndexesForColumns, findColumnSettingIndexesForColumns,
...@@ -15,8 +9,6 @@ import type { ...@@ -15,8 +9,6 @@ import type {
VisualizationSettings, VisualizationSettings,
} from "metabase-types/api"; } from "metabase-types/api";
import { getSingleSeriesDimensionsAndMetrics } from "./utils";
export function syncVizSettingsWithSeries( export function syncVizSettingsWithSeries(
settings: VisualizationSettings, settings: VisualizationSettings,
_series?: Series | null, _series?: Series | null,
...@@ -36,71 +28,12 @@ export function syncVizSettingsWithSeries( ...@@ -36,71 +28,12 @@ export function syncVizSettingsWithSeries(
series, series,
previousSeries, previousSeries,
); );
if (hasGraphDataSettings(series.card.display)) {
newSettings = ensureMetricsAndDimensions(
newSettings,
series,
previousSeries,
);
}
} }
} }
return newSettings; return newSettings;
} }
function ensureMetricsAndDimensions(
settings: VisualizationSettings,
series: SingleSeries,
previousSeries: SingleSeries,
) {
const hasExplicitGraphDataSettings =
"graph.dimensions" in settings || "graph.metrics" in settings;
if (hasExplicitGraphDataSettings) {
return settings;
}
const nextSettings = { ...settings };
const availableColumnNames = series.data.cols.map(col => col.name);
const maxDimensions = getMaxDimensionsSupported(series.card.display);
const maxMetrics = getMaxMetricsSupported(series.card.display);
const { dimensions: currentDimensions, metrics: currentMetrics } =
getSingleSeriesDimensionsAndMetrics(series, maxDimensions, maxMetrics);
const { dimensions: previousDimensions, metrics: previousMetrics } =
getSingleSeriesDimensionsAndMetrics(
previousSeries,
maxDimensions,
maxMetrics,
);
const dimensions =
currentDimensions.filter(isNotNull).length > 0
? currentDimensions
: previousDimensions.filter((columnName: string) =>
availableColumnNames.includes(columnName),
);
const metrics =
currentMetrics.filter(isNotNull).length > 0
? currentMetrics
: previousMetrics.filter((columnName: string) =>
availableColumnNames.includes(columnName),
);
if (dimensions.length > 0) {
nextSettings["graph.dimensions"] = dimensions;
}
if (metrics.length > 0) {
nextSettings["graph.metrics"] = metrics;
}
return nextSettings;
}
function syncTableColumnSettings( function syncTableColumnSettings(
settings: VisualizationSettings, settings: VisualizationSettings,
{ data }: SingleSeries, { data }: SingleSeries,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment