From 83f4097e87a9a4ff2b2ce36848daacfe4ec96e07 Mon Sep 17 00:00:00 2001 From: Alexander Lesnenko <alxnddr@users.noreply.github.com> Date: Wed, 5 Jan 2022 00:18:19 +0100 Subject: [PATCH] fix field filter missing schema metadata (#19536) --- .../template_tags/TagEditorParam.jsx | 31 +++++++----- .../native/reproductions/19451.cy.spec.js | 49 +++++++++++++++++++ 2 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 frontend/test/metabase/scenarios/native/reproductions/19451.cy.spec.js diff --git a/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx b/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx index 5c212cba8df..50bef268da7 100644 --- a/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx +++ b/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx @@ -5,6 +5,7 @@ import _ from "underscore"; import { connect } from "react-redux"; import { Link } from "react-router"; +import Schemas from "metabase/entities/schemas"; import Toggle from "metabase/components/Toggle"; import InputBlurChange from "metabase/components/InputBlurChange"; import Select, { Option } from "metabase/components/Select"; @@ -163,19 +164,23 @@ export default class TagEditorParam extends Component { {(!hasSelectedDimensionField || (hasSelectedDimensionField && fieldMetadataLoaded)) && ( - <SchemaTableAndFieldDataSelector - databases={databases} - selectedDatabaseId={database ? database.id : null} - selectedTableId={table ? table.id : null} - selectedFieldId={ - hasSelectedDimensionField ? tag.dimension[1] : null - } - setFieldFn={fieldId => this.setDimension(fieldId)} - className="AdminSelect flex align-center" - isInitiallyOpen={!tag.dimension} - triggerIconSize={12} - renderAsSelect={true} - /> + <Schemas.Loader id={table?.schema?.id}> + {() => ( + <SchemaTableAndFieldDataSelector + databases={databases} + selectedDatabaseId={database ? database.id : null} + selectedTableId={table ? table.id : null} + selectedFieldId={ + hasSelectedDimensionField ? tag.dimension[1] : null + } + setFieldFn={fieldId => this.setDimension(fieldId)} + className="AdminSelect flex align-center" + isInitiallyOpen={!tag.dimension} + triggerIconSize={12} + renderAsSelect={true} + /> + )} + </Schemas.Loader> )} </div> )} diff --git a/frontend/test/metabase/scenarios/native/reproductions/19451.cy.spec.js b/frontend/test/metabase/scenarios/native/reproductions/19451.cy.spec.js new file mode 100644 index 00000000000..2c25c186b93 --- /dev/null +++ b/frontend/test/metabase/scenarios/native/reproductions/19451.cy.spec.js @@ -0,0 +1,49 @@ +import { restore } from "__support__/e2e/cypress"; +import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset"; + +const { PRODUCTS } = SAMPLE_DATASET; + +const question = { + name: "19451", + native: { + query: "select count(*) from products where {{filter}}", + "template-tags": { + filter: { + id: "1b33304a-18ea-cc77-083a-b5225954f200", + name: "filter", + "display-name": "Filter", + type: "dimension", + dimension: ["field", PRODUCTS.ID, null], + "widget-type": "id", + default: null, + }, + }, + }, + display: "scalar", +}; + +describe("issue 19451", () => { + beforeEach(() => { + restore(); + cy.signInAsAdmin(); + + cy.createNativeQuestion(question).then(({ body: { id } }) => { + cy.intercept("POST", `/api/card/${id}/query`).as("cardQuery"); + + cy.visit(`/question/${id}`); + cy.wait("@cardQuery"); + }); + }); + + it("question field filter shows all tables from a selected database (metabase#19451)", () => { + cy.findByText("Open Editor").click(); + cy.icon("variable").click(); + cy.findByText("Products").click(); + cy.icon("chevronleft").click(); + + cy.findByText("Products"); + cy.findByText("Orders"); + cy.findByText("People"); + cy.findByText("Reviews"); + }); +}); -- GitLab