From 5bdde140a7b9165ebbedab07e301876589e0bcd8 Mon Sep 17 00:00:00 2001
From: Dalton <daltojohnso@users.noreply.github.com>
Date: Thu, 16 Jun 2022 08:50:20 -0700
Subject: [PATCH] Refactor card parameter utils (#23063)

Fix unit tests

Update name to match dashboard util fn name
---
 frontend/src/metabase-lib/lib/Question.ts     |  4 ++--
 .../src/metabase/parameters/utils/cards.ts    | 21 +++++++++++--------
 .../public/containers/PublicQuestion.jsx      | 11 +++-------
 .../actions/core/parameterUtils.ts            |  7 ++-----
 .../containers/QuestionEmbedWidget.jsx        |  7 ++-----
 .../src/metabase/query_builder/selectors.js   |  8 ++-----
 .../metabase-lib/lib/Question.unit.spec.js    |  8 -------
 7 files changed, 23 insertions(+), 43 deletions(-)

diff --git a/frontend/src/metabase-lib/lib/Question.ts b/frontend/src/metabase-lib/lib/Question.ts
index c3ea7619005..a32d4ff42d0 100644
--- a/frontend/src/metabase-lib/lib/Question.ts
+++ b/frontend/src/metabase-lib/lib/Question.ts
@@ -33,7 +33,7 @@ import {
 } from "metabase/lib/dataset";
 import { isTransientId } from "metabase/meta/Card";
 import {
-  getValueAndFieldIdPopulatedParametersFromCard,
+  getCardUiParameters,
   remapParameterValuesToTemplateTags,
 } from "metabase/parameters/utils/cards";
 import { fieldFilterParameterToMBQLFilter } from "metabase/parameters/utils/mbql";
@@ -1161,7 +1161,7 @@ class QuestionInner {
 
   // TODO: Fix incorrect Flow signature
   parameters(): ParameterObject[] {
-    return getValueAndFieldIdPopulatedParametersFromCard(
+    return getCardUiParameters(
       this.card(),
       this.metadata(),
       this._parameterValues,
diff --git a/frontend/src/metabase/parameters/utils/cards.ts b/frontend/src/metabase/parameters/utils/cards.ts
index feeadb84f68..c9982bf55d0 100644
--- a/frontend/src/metabase/parameters/utils/cards.ts
+++ b/frontend/src/metabase/parameters/utils/cards.ts
@@ -10,7 +10,7 @@ import {
   getValuePopulatedParameters,
   hasParameterValue,
 } from "metabase/parameters/utils/parameter-values";
-import { ParameterWithTarget } from "metabase/parameters/types";
+import { ParameterWithTarget, UiParameter } from "metabase/parameters/types";
 import { Parameter, ParameterTarget } from "metabase-types/types/Parameter";
 import { Card } from "metabase-types/types/Card";
 import { TemplateTag } from "metabase-types/types/Query";
@@ -89,12 +89,12 @@ export function getParametersFromCard(
   return getTemplateTagParameters(tags);
 }
 
-export function getValueAndFieldIdPopulatedParametersFromCard(
+export function getCardUiParameters(
   card: Card,
   metadata: Metadata,
   parameterValues: { [key: string]: any } = {},
   parameters = getParametersFromCard(card),
-) {
+): UiParameter[] {
   if (!card) {
     return [];
   }
@@ -109,12 +109,15 @@ export function getValueAndFieldIdPopulatedParametersFromCard(
       | ParameterTarget
       | undefined = (parameter as ParameterWithTarget).target;
     const field = getParameterTargetField(target, metadata, question);
-    return {
-      ...parameter,
-      fields: field == null ? [] : [field],
-      field_id: field?.id,
-      hasOnlyFieldTargets: field != null,
-    };
+    if (field) {
+      return {
+        ...parameter,
+        fields: [field],
+        hasOnlyFieldTargets: true,
+      };
+    }
+
+    return { ...parameter };
   });
 }
 
diff --git a/frontend/src/metabase/public/containers/PublicQuestion.jsx b/frontend/src/metabase/public/containers/PublicQuestion.jsx
index 129bdaac12e..4df96df9d53 100644
--- a/frontend/src/metabase/public/containers/PublicQuestion.jsx
+++ b/frontend/src/metabase/public/containers/PublicQuestion.jsx
@@ -16,8 +16,8 @@ import {
 } from "metabase/parameters/utils/parameter-values";
 import { applyParameters } from "metabase/meta/Card";
 import {
-  getValueAndFieldIdPopulatedParametersFromCard,
   getParametersFromCard,
+  getCardUiParameters,
 } from "metabase/parameters/utils/cards";
 
 import {
@@ -88,7 +88,7 @@ class PublicQuestion extends Component {
         this.props.addFields(card.param_fields);
       }
 
-      const parameters = getValueAndFieldIdPopulatedParametersFromCard(
+      const parameters = getCardUiParameters(
         card,
         metadata,
         {},
@@ -190,12 +190,7 @@ class PublicQuestion extends Component {
 
     const parameters =
       card &&
-      getValueAndFieldIdPopulatedParametersFromCard(
-        card,
-        metadata,
-        {},
-        card.parameters || undefined,
-      );
+      getCardUiParameters(card, metadata, {}, card.parameters || undefined);
 
     return (
       <EmbedFrame
diff --git a/frontend/src/metabase/query_builder/actions/core/parameterUtils.ts b/frontend/src/metabase/query_builder/actions/core/parameterUtils.ts
index 42ca4ee48b4..f284fe30d8c 100644
--- a/frontend/src/metabase/query_builder/actions/core/parameterUtils.ts
+++ b/frontend/src/metabase/query_builder/actions/core/parameterUtils.ts
@@ -7,7 +7,7 @@ import { DashboardApi } from "metabase/services";
 import { setErrorPage } from "metabase/redux/app";
 import { getMetadata } from "metabase/selectors/metadata";
 
-import { getValueAndFieldIdPopulatedParametersFromCard } from "metabase/parameters/utils/cards";
+import { getCardUiParameters } from "metabase/parameters/utils/cards";
 import { hasMatchingParameters } from "metabase/parameters/utils/dashboards";
 import { getParameterValuesByIdFromQueryParams } from "metabase/parameters/utils/parameter-values";
 
@@ -100,10 +100,7 @@ export function getParameterValuesForQuestion({
   queryParams?: QueryParams;
   metadata: Metadata;
 }) {
-  const parameters = getValueAndFieldIdPopulatedParametersFromCard(
-    card,
-    metadata,
-  );
+  const parameters = getCardUiParameters(card, metadata);
   return getParameterValuesByIdFromQueryParams(
     parameters,
     queryParams,
diff --git a/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx b/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx
index ebfe6eb4546..4bffa93bd15 100644
--- a/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx
+++ b/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx
@@ -11,7 +11,7 @@ import EmbedModalContent from "metabase/public/components/widgets/EmbedModalCont
 import * as Urls from "metabase/lib/urls";
 import MetabaseSettings from "metabase/lib/settings";
 import * as MetabaseAnalytics from "metabase/lib/analytics";
-import { getValueAndFieldIdPopulatedParametersFromCard } from "metabase/parameters/utils/cards";
+import { getCardUiParameters } from "metabase/parameters/utils/cards";
 import { getMetadata } from "metabase/selectors/metadata";
 
 import {
@@ -64,10 +64,7 @@ class QuestionEmbedWidget extends Component {
         className={className}
         resource={card}
         resourceType="question"
-        resourceParameters={getValueAndFieldIdPopulatedParametersFromCard(
-          card,
-          metadata,
-        )}
+        resourceParameters={getCardUiParameters(card, metadata)}
         onCreatePublicLink={() => createPublicLink(card)}
         onDisablePublicLink={() => deletePublicLink(card)}
         onUpdateEnableEmbedding={enableEmbedding =>
diff --git a/frontend/src/metabase/query_builder/selectors.js b/frontend/src/metabase/query_builder/selectors.js
index 7c7b6b7b8be..d9de10bd0fe 100644
--- a/frontend/src/metabase/query_builder/selectors.js
+++ b/frontend/src/metabase/query_builder/selectors.js
@@ -12,7 +12,7 @@ import {
   getVisualizationTransformed,
 } from "metabase/visualizations";
 import { getComputedSettingsForSeries } from "metabase/visualizations/lib/settings/visualization";
-import { getValueAndFieldIdPopulatedParametersFromCard } from "metabase/parameters/utils/cards";
+import { getCardUiParameters } from "metabase/parameters/utils/cards";
 import { normalizeParameterValue } from "metabase/parameters/utils/parameter-values";
 import { isPK } from "metabase/lib/schema_metadata";
 import Utils from "metabase/lib/utils";
@@ -237,11 +237,7 @@ export const getDatabaseFields = createSelector(
 export const getParameters = createSelector(
   [getCard, getMetadata, getParameterValues],
   (card, metadata, parameterValues) =>
-    getValueAndFieldIdPopulatedParametersFromCard(
-      card,
-      metadata,
-      parameterValues,
-    ),
+    getCardUiParameters(card, metadata, parameterValues),
 );
 
 const getLastRunDatasetQuery = createSelector(
diff --git a/frontend/test/metabase-lib/lib/Question.unit.spec.js b/frontend/test/metabase-lib/lib/Question.unit.spec.js
index a6b88009cef..3530aa4d13a 100644
--- a/frontend/test/metabase-lib/lib/Question.unit.spec.js
+++ b/frontend/test/metabase-lib/lib/Question.unit.spec.js
@@ -1067,7 +1067,6 @@ describe("Question", () => {
       expect(question.parameters()).toEqual([
         {
           default: undefined,
-          field_id: 1,
           fields: [
             {
               id: 1,
@@ -1082,9 +1081,6 @@ describe("Question", () => {
         },
         {
           default: undefined,
-          field_id: undefined,
-          fields: [],
-          hasOnlyFieldTargets: false,
           id: "aaa",
           name: "Bar",
           slug: "bar",
@@ -1122,16 +1118,12 @@ describe("Question", () => {
           target: ["dimension", ["field", 1, null]],
           value: "abc",
           fields: [{ id: 1 }],
-          field_id: 1,
           hasOnlyFieldTargets: true,
         },
         {
           type: "category",
           name: "bar",
           id: "bar_id",
-          fields: [],
-          field_id: undefined,
-          hasOnlyFieldTargets: false,
         },
       ]);
     });
-- 
GitLab