diff --git a/e2e/test/scenarios/dashboard-cards/dashboard-card-reproductions.cy.spec.js b/e2e/test/scenarios/dashboard-cards/dashboard-card-reproductions.cy.spec.js index 2c0f813d98121d36746fc0ac4d04cbcb3d2f3f3d..05ce44c9ca3251b119429c0ead2a87faa968f318 100644 --- a/e2e/test/scenarios/dashboard-cards/dashboard-card-reproductions.cy.spec.js +++ b/e2e/test/scenarios/dashboard-cards/dashboard-card-reproductions.cy.spec.js @@ -6,6 +6,7 @@ import { assertDescendantNotOverflowsContainer, assertIsEllipsified, assertIsNotEllipsified, + createNativeQuestionAndDashboard, createQuestion, cypressWaitAll, echartsContainer, @@ -1872,3 +1873,81 @@ describe("issue 48878", () => { cy.wait("@fetchCard"); } }); + +describe("issue 46318", () => { + const query = `SELECT 'group_1' AS main_group, 'sub_group_1' AS sub_group, 111 AS value_sum, 'group_1__sub_group_1' AS group_name +UNION ALL +SELECT 'group_1', 'sub_group_2', 68, 'group_1__sub_group_2' +UNION ALL +SELECT 'group_2', 'sub_group_1', 79, 'group_2__sub_group_1' +UNION ALL +SELECT 'group_2', 'sub_group_2', 52, 'group_2__sub_group_2'; +`; + + beforeEach(() => { + restore(); + cy.signInAsAdmin(); + + createNativeQuestionAndDashboard({ + questionDetails: { + name: "46318", + native: { query }, + display: "row", + visualization_settings: { + "graph.dimensions": ["MAIN_GROUP", "SUB_GROUP"], + "graph.series_order_dimension": null, + "graph.series_order": null, + "graph.metrics": ["VALUE_SUM"], + }, + }, + }).then(response => { + visitDashboard(response.body.dashboard_id); + }); + + editDashboard(); + getDashboardCard().realHover().icon("click").click(); + cy.get("aside").within(() => { + cy.findByText("Go to a custom destination").click(); + cy.findByText("URL").click(); + }); + modal().within(() => { + cy.findByPlaceholderText("e.g. http://acme.com/id/{{user_id}}").type( + "http://localhost:4000/?q={{group_name}}", + { parseSpecialCharSequences: false }, + ); + cy.button("Done").click(); + }); + saveDashboard(); + }); + + it("passes values from unused columns of row visualization to click behavior (metabase#46318)", () => { + cy.findAllByRole("graphics-symbol").eq(0).click(); + cy.location("href").should( + "eq", + "http://localhost:4000/?q=group_1__sub_group_1", + ); + + cy.go("back"); + + cy.findAllByRole("graphics-symbol").eq(2).click(); // intentionally eq(2), not eq(1) - that's how row viz works + cy.location("href").should( + "eq", + "http://localhost:4000/?q=group_1__sub_group_2", + ); + + cy.go("back"); + + cy.findAllByRole("graphics-symbol").eq(1).click(); // intentionally eq(1), not eq(2) - that's how row viz works + cy.location("href").should( + "eq", + "http://localhost:4000/?q=group_2__sub_group_1", + ); + cy.go("back"); + + cy.findAllByRole("graphics-symbol").eq(3).click(); + cy.location("href").should( + "eq", + "http://localhost:4000/?q=group_2__sub_group_2", + ); + }); +}); diff --git a/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.ts b/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.ts index 710c1673afd2e35d38a219fdbab04433376e3e5c..cc0805df75017cb5f1ab4808a15f1c533b144dfb 100644 --- a/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.ts +++ b/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.ts @@ -51,7 +51,11 @@ const getMetricColumnData = ( }); }; -const getColumnData = (columns: ColumnDescriptor[], datum: GroupedDatum) => { +const getColumnData = ( + columns: ColumnDescriptor[], + datum: GroupedDatum, + seriesIndex: number, +) => { return columns .map(columnDescriptor => { const { column, index } = columnDescriptor; @@ -66,8 +70,7 @@ const getColumnData = (columns: ColumnDescriptor[], datum: GroupedDatum) => { value = formatNullable(metricSum); } else { - const distinctValues = new Set(datum.rawRows.map(row => row[index])); - value = distinctValues.size === 1 ? datum.rawRows[0][index] : null; + value = datum.rawRows[seriesIndex][index]; } return value != null @@ -84,6 +87,7 @@ const getColumnData = (columns: ColumnDescriptor[], datum: GroupedDatum) => { const getColumnsData = ( chartColumns: CartesianChartColumns, series: Series<GroupedDatum, unknown>, + seriesIndex: number, datum: GroupedDatum, datasetColumns: DatasetColumn[], visualizationSettings: VisualizationSettings, @@ -121,7 +125,7 @@ const getColumnsData = ( datasetColumns, ); - data.push(...getColumnData(otherColumnsDescriptiors, datum)); + data.push(...getColumnData(otherColumnsDescriptiors, datum, seriesIndex)); return data; }; @@ -131,10 +135,11 @@ export const getClickData = ( chartColumns: CartesianChartColumns, datasetColumns: DatasetColumn[], ): ClickObject => { - const { series, datum } = bar; + const { series, seriesIndex, datum } = bar; const data = getColumnsData( chartColumns, series, + seriesIndex, datum, datasetColumns, visualizationSettings, @@ -299,6 +304,7 @@ export const getHoverData = ( const data = getColumnsData( chartColumns, bar.series, + bar.seriesIndex, bar.datum, datasetColumns, settings,