From 7036aa8fa2ff17ce389e950d470c97fed7582892 Mon Sep 17 00:00:00 2001
From: Dalton <daltojohnso@users.noreply.github.com>
Date: Tue, 11 Oct 2022 10:00:01 -0400
Subject: [PATCH] Fix scripting error in model metadata sidebar (#25758)

* Fix scripting error in model metadata sidebar

* Default to card's result_metadata col if we can't find it in the query metadata

* Look at virtual card table for column metadataa
---
 .../components/DatasetEditor/DatasetEditor.jsx       | 12 ++++++++++--
 .../DatasetFieldMetadataSidebar.jsx                  |  4 +++-
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetEditor.jsx b/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetEditor.jsx
index 21b03c76363..6cc2c8f15a1 100644
--- a/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetEditor.jsx
+++ b/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetEditor.jsx
@@ -186,6 +186,10 @@ function DatasetEditor(props) {
   );
 
   const fields = useMemo(() => {
+    const virtualCardTable = dataset.table();
+    const virtualCardColumns = (virtualCardTable?.fields ?? []).map(field =>
+      field.column(),
+    );
     // Columns in results_metadata contain all the necessary metadata
     // orderedColumns contain properly sorted columns, but they only contain field names and refs.
     // Normally, columns in results_metadata are ordered too,
@@ -199,9 +203,13 @@ function DatasetEditor(props) {
       return columns;
     }
     return orderedColumns
-      .map(col => columns.find(c => isSameField(c.field_ref, col.fieldRef)))
+      .map(
+        col =>
+          columns.find(c => isSameField(c.field_ref, col.fieldRef)) ||
+          virtualCardColumns.find(c => isSameField(c.field_ref, col.fieldRef)),
+      )
       .filter(Boolean);
-  }, [orderedColumns, result]);
+  }, [dataset, orderedColumns, result?.data?.results_metadata?.columns]);
 
   const isEditingQuery = datasetEditorTab === "query";
   const isEditingMetadata = datasetEditorTab === "metadata";
diff --git a/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetFieldMetadataSidebar/DatasetFieldMetadataSidebar.jsx b/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetFieldMetadataSidebar/DatasetFieldMetadataSidebar.jsx
index e591edbe851..ba939ee5983 100644
--- a/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetFieldMetadataSidebar/DatasetFieldMetadataSidebar.jsx
+++ b/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetFieldMetadataSidebar/DatasetFieldMetadataSidebar.jsx
@@ -153,7 +153,9 @@ function DatasetFieldMetadataSidebar({
       setShouldAnimateFieldChange(true);
       // setTimeout is required as form fields are rerendered pretty frequently
       setTimeout(() => {
-        displayNameInputRef.current?.select?.();
+        if (_.isFunction(displayNameInputRef.current?.select)) {
+          displayNameInputRef.current.select();
+        }
       });
     }
   }, [field, previousField]);
-- 
GitLab