diff --git a/e2e/test/scenarios/dashboard-cards/dashboard-drill.cy.spec.js b/e2e/test/scenarios/dashboard-cards/dashboard-drill.cy.spec.js index 3a1bb938bdcb5271197af09f43012c81ae2a3cad..8081c248be8645e6f0da30b9ba62e81107274132 100644 --- a/e2e/test/scenarios/dashboard-cards/dashboard-drill.cy.spec.js +++ b/e2e/test/scenarios/dashboard-cards/dashboard-drill.cy.spec.js @@ -644,6 +644,42 @@ describe("scenarios > dashboard > dashboard drill", () => { }); }); + it("should keep card's display when doing zoom drill-through from dashboard (metabase#38307)", () => { + cy.intercept("POST", "/api/dataset").as("dataset"); + cy.intercept("/api/dashboard/*/dashcard/*/card/*/query").as( + "dashcardQuery", + ); + + const questionDetails = { + name: "38307", + query: { + "source-table": REVIEWS_ID, + aggregation: [["count"]], + breakout: [["field", REVIEWS.CREATED_AT, { "temporal-unit": "month" }]], + }, + display: "bar", + }; + + const dashboardDetails = { + name: "38307", + }; + + cy.createQuestionAndDashboard({ questionDetails, dashboardDetails }).then( + ({ body: { dashboard_id } }) => { + visitDashboard(dashboard_id); + + // click the first bar on the card's graph and do a zoom drill-through + cy.get(".bar").eq(0).click({ force: true }); + cy.findByText("See this month by week").click(); + + cy.wait("@dataset"); + + // check that the display is still a bar chart by checking that a .bar element exists + cy.get(".bar").should("exist"); + }, + ); + }); + it("should not hide custom formatting when click behavior is enabled (metabase#14597)", () => { const columnKey = JSON.stringify(["name", "MY_NUMBER"]); const questionSettings = { diff --git a/frontend/src/metabase/querying/utils/drills/zoom-in-binning-drill/zoom-in-binning-drill.ts b/frontend/src/metabase/querying/utils/drills/zoom-in-binning-drill/zoom-in-binning-drill.ts index da753280b6bdba80dfee45320994596fa454b955..8764246631c45ce19b47fa640b9dbcc43c2b44be 100644 --- a/frontend/src/metabase/querying/utils/drills/zoom-in-binning-drill/zoom-in-binning-drill.ts +++ b/frontend/src/metabase/querying/utils/drills/zoom-in-binning-drill/zoom-in-binning-drill.ts @@ -5,8 +5,10 @@ import type * as Lib from "metabase-lib"; export const zoomInBinningDrill: Drill<Lib.ZoomDrillThruInfo> = ({ drill, + clicked, applyDrill, }) => { + const isDashboard = clicked?.extraData?.dashboard != null; return [ { name: "zoom-in.binning", @@ -14,7 +16,12 @@ export const zoomInBinningDrill: Drill<Lib.ZoomDrillThruInfo> = ({ section: "zoom", icon: "zoom_in", buttonType: "horizontal", - question: () => applyDrill(drill).setDefaultDisplay(), + question: () => { + const question = applyDrill(drill); + return isDashboard + ? question.lockDisplay() + : question.setDefaultDisplay(); + }, }, ]; }; diff --git a/frontend/src/metabase/querying/utils/drills/zoom-in-timeseries-drill/zoom-in-timeseries-drill.ts b/frontend/src/metabase/querying/utils/drills/zoom-in-timeseries-drill/zoom-in-timeseries-drill.ts index 6734cf69b1feb373b5afbd059dae359d3ae92c88..1b673f59f994f86f5afd9d35f280c795f2581b88 100644 --- a/frontend/src/metabase/querying/utils/drills/zoom-in-timeseries-drill/zoom-in-timeseries-drill.ts +++ b/frontend/src/metabase/querying/utils/drills/zoom-in-timeseries-drill/zoom-in-timeseries-drill.ts @@ -4,18 +4,23 @@ import type * as Lib from "metabase-lib"; export const zoomInTimeseriesDrill: Drill<Lib.ZoomTimeseriesDrillThruInfo> = ({ drill, drillInfo, + clicked, applyDrill, }) => { - const { displayName } = drillInfo; - + const isDashboard = clicked?.extraData?.dashboard != null; return [ { name: "zoom-in.timeseries", - title: displayName, + title: drillInfo.displayName, section: "zoom", icon: "zoom_in", buttonType: "horizontal", - question: () => applyDrill(drill).setDefaultDisplay(), + question: () => { + const question = applyDrill(drill); + return isDashboard + ? question.lockDisplay() + : question.setDefaultDisplay(); + }, }, ]; };