diff --git a/e2e/test/scenarios/question-reproductions/reproductions-3.cy.spec.js b/e2e/test/scenarios/question-reproductions/reproductions-3.cy.spec.js index 5b48ac298c32ca3441449a042d8a332199755475..97594181b359523657b5567a996a0b3bf3ac4df0 100644 --- a/e2e/test/scenarios/question-reproductions/reproductions-3.cy.spec.js +++ b/e2e/test/scenarios/question-reproductions/reproductions-3.cy.spec.js @@ -2079,6 +2079,52 @@ describe("issue 45452", () => { }); }); +describe("issue 41612", () => { + beforeEach(() => { + restore(); + cy.signInAsAdmin(); + cy.intercept("POST", "/api/card").as("createQuestion"); + }); + + it("should not ignore chart viz settings when viewing raw results as a table (metabase#41612)", () => { + visitQuestionAdhoc( + { + display: "line", + dataset_query: { + type: "query", + database: SAMPLE_DB_ID, + query: { + aggregation: [["count"]], + breakout: [ + [ + "field", + ORDERS.CREATED_AT, + { "base-type": "type/DateTime", "temporal-unit": "month" }, + ], + ], + "source-table": ORDERS_ID, + }, + }, + }, + { visitQuestion: true }, + ); + + queryBuilderMain().findByLabelText("Switch to data").click(); + queryBuilderHeader().button("Save").click(); + modal().button("Save").click(); + + cy.wait("@createQuestion").then(xhr => { + const card = xhr.request.body; + expect(card.visualization_settings["graph.metrics"]).to.deep.equal([ + "count", + ]); + expect(card.visualization_settings["graph.dimensions"]).to.deep.equal([ + "CREATED_AT", + ]); + }); + }); +}); + function expectNoScrollbarContainer(element) { const hasScrollbarContainer = element.scrollHeight <= element.clientHeight && diff --git a/enterprise/frontend/src/embedding-sdk/lib/interactive-question/run-question-on-query-change.ts b/enterprise/frontend/src/embedding-sdk/lib/interactive-question/run-question-on-query-change.ts index b2aa3344e0e37717ee423fb8976b730f739fa4df..af661345910b62e7c4bb486ec3cd0906b2085461 100644 --- a/enterprise/frontend/src/embedding-sdk/lib/interactive-question/run-question-on-query-change.ts +++ b/enterprise/frontend/src/embedding-sdk/lib/interactive-question/run-question-on-query-change.ts @@ -47,7 +47,6 @@ export const runQuestionOnQueryChangeSdk = question: nextQuestion, queryResult: queryResults?.[0], datasetQuery: undefined, - showRawTable: false, }); const questionPivotResult = computeQuestionPivotTable({ diff --git a/frontend/src/metabase/query_builder/selectors.js b/frontend/src/metabase/query_builder/selectors.js index 8a7abfa5b77e0d6412b114efb3f74dc6cf5db6ed..90d61f2cb050938e703971721e53963181d5b7ae 100644 --- a/frontend/src/metabase/query_builder/selectors.js +++ b/frontend/src/metabase/query_builder/selectors.js @@ -713,14 +713,35 @@ export const getShouldShowUnsavedChangesWarning = createSelector( * Returns the card and query results data in a format that `Visualization.jsx` expects */ export const getRawSeries = createSelector( - [getQuestion, getQueryResults, getLastRunDatasetQuery, getIsShowingRawTable], - (question, results, lastRunDatasetQuery, isShowingRawTable) => { - return createRawSeries({ + [ + getQuestion, + getFirstQueryResult, + getLastRunDatasetQuery, + getIsShowingRawTable, + ], + (question, queryResult, lastRunDatasetQuery, isShowingRawTable) => { + const rawSeries = createRawSeries({ question, - queryResult: results?.[0], + queryResult, datasetQuery: lastRunDatasetQuery, - showRawTable: isShowingRawTable, }); + if (isShowingRawTable && rawSeries?.length > 0) { + const [{ card, data }] = rawSeries; + return [ + { + card: { + ...card, + display: "table", + visualization_settings: { + ...card.visualization_settings, + "table.pivot": false, + }, + }, + data, + }, + ]; + } + return rawSeries; }, ); @@ -1103,7 +1124,16 @@ export function getEmbeddedParameterVisibility(state, slug) { } export const getSubmittableQuestion = (state, question) => { - const series = getTransformedSeries(state); + const rawSeries = createRawSeries({ + question: getQuestion(state), + queryResult: getFirstQueryResult(state), + datasetQuery: getLastRunDatasetQuery(state), + }); + + const series = rawSeries + ? getVisualizationTransformed(extractRemappings(rawSeries)).series + : null; + const resultsMetadata = getResultsMetadata(state); const isResultDirty = getIsResultDirty(state); diff --git a/frontend/src/metabase/query_builder/utils.ts b/frontend/src/metabase/query_builder/utils.ts index 8104861fbd33749f045e9c5bfa4fde69f62ed0f7..52d4904b9b07f6fc48233cee432ca98dc98e50a1 100644 --- a/frontend/src/metabase/query_builder/utils.ts +++ b/frontend/src/metabase/query_builder/utils.ts @@ -149,17 +149,8 @@ export const createRawSeries = (options: { question: Question; queryResult: any; datasetQuery?: any; - showRawTable?: boolean; }): Series => { - const { question, queryResult, datasetQuery, showRawTable = false } = options; - - let display = question && question.display(); - let settings = question && question.settings(); - - if (showRawTable) { - display = "table"; - settings = { "table.pivot": false }; - } + const { question, queryResult, datasetQuery } = options; // we want to provide the visualization with a card containing the latest // "display", "visualization_settings", etc, (to ensure the correct visualization is shown) @@ -169,9 +160,6 @@ export const createRawSeries = (options: { { card: { ...question.card(), - display: display, - visualization_settings: settings, - ...(datasetQuery && { dataset_query: datasetQuery }), }, data: queryResult && queryResult.data,