diff --git a/e2e/test/scenarios/dashboard/reproductions/12926-editing-dashboards-doesnt-cancel-running-queries.cy.spec.js b/e2e/test/scenarios/dashboard/reproductions/12926-editing-dashboards-doesnt-cancel-running-queries.cy.spec.js index 852ae5e5c0b7a3bdeb603858e46a53fa1eff758e..9074e19c81125051bc960772357dc272fb0b9eae 100644 --- a/e2e/test/scenarios/dashboard/reproductions/12926-editing-dashboards-doesnt-cancel-running-queries.cy.spec.js +++ b/e2e/test/scenarios/dashboard/reproductions/12926-editing-dashboards-doesnt-cancel-running-queries.cy.spec.js @@ -1,8 +1,10 @@ import { + addTextBox, editDashboard, getDashboardCard, openQuestionsSidebar, popover, + removeDashboardCard, restore, saveDashboard, setFilter, @@ -74,6 +76,20 @@ describe("issue 12926", () => { getDashboardCard().findByText(queryResult); }); + + it("should not break virtual cards (metabase#35545)", () => { + cy.createDashboard().then(({ body: { id: dashboardId } }) => { + visitDashboard(dashboardId); + }); + + addTextBox("Text card content"); + + removeDashboardCard(); + + undo(); + + getDashboardCard().findByText("Text card content"); + }); }); describe("saving a dashboard that retriggers a non saved query (negative id)", () => { diff --git a/frontend/src/metabase/dashboard/actions/cards.js b/frontend/src/metabase/dashboard/actions/cards.js index 524567bd216c0380f7e6a7104e2ab18916eac5b7..1a92d7b9eb7d0beeeae7bf5536d95e6fe4ee7c47 100644 --- a/frontend/src/metabase/dashboard/actions/cards.js +++ b/frontend/src/metabase/dashboard/actions/cards.js @@ -13,6 +13,7 @@ import { createCard } from "metabase/lib/card"; import { getVisualizationRaw } from "metabase/visualizations"; import { trackCardCreated } from "../analytics"; import { getDashCardById } from "../selectors"; +import { isVirtualDashCard } from "../utils"; import { ADD_CARD_TO_DASH, REMOVE_CARD_FROM_DASH, @@ -77,7 +78,9 @@ export const undoRemoveCardFromDashboard = createThunkAction( const dashcard = getDashCardById(getState(), dashcardId); const card = dashcard.card; - dispatch(fetchCardData(card, dashcard)); + if (!isVirtualDashCard(dashcard)) { + dispatch(fetchCardData(card, dashcard)); + } return { dashcardId }; },