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