diff --git a/frontend/src/metabase-lib/order_by.unit.spec.ts b/frontend/src/metabase-lib/order_by.unit.spec.ts index 5782a713c7017fbce2e8b4ff9fcae48085485801..fd6e41481dc7fba8294559ee1e9b7aa3ce9cc2de 100644 --- a/frontend/src/metabase-lib/order_by.unit.spec.ts +++ b/frontend/src/metabase-lib/order_by.unit.spec.ts @@ -20,6 +20,7 @@ describe("order by", () => { expect.objectContaining({ name: "ID", displayName: "ID", + longDisplayName: "ID", effectiveType: "type/BigInteger", semanticType: "type/PK", isCalculated: false, @@ -29,6 +30,7 @@ describe("order by", () => { table: { name: "ORDERS", displayName: "Orders", + longDisplayName: "Orders", isSourceTable: true, }, }), @@ -42,6 +44,7 @@ describe("order by", () => { expect.objectContaining({ name: "TITLE", displayName: "Title", + longDisplayName: "Products → Title", effectiveType: "type/Text", semanticType: "type/Title", isCalculated: false, @@ -51,6 +54,7 @@ describe("order by", () => { table: { name: "PRODUCTS", displayName: "Products", + longDisplayName: "Products", isSourceTable: false, }, }), diff --git a/src/metabase/lib/metadata/calculation.cljc b/src/metabase/lib/metadata/calculation.cljc index 7eb912ffcc854862be26e71990dc56301671cc94..51be1ec7a1b3c9789689a26acaee25cd3c2cd20a 100644 --- a/src/metabase/lib/metadata/calculation.cljc +++ b/src/metabase/lib/metadata/calculation.cljc @@ -255,6 +255,7 @@ (mr/register! ::display-info [:map [:display-name :string] + [:long-display-name {:optional true} :string] ;; for things that have a Table, e.g. a Field [:table {:optional true} [:maybe [:ref ::display-info]]] ;; these are derived from the `:lib/source`/`:metabase.lib.metadata/column-source`, but instead of using that value @@ -308,6 +309,8 @@ ;; TODO -- not 100% convinced the FE should actually have access to `:name`, can't it use `:display-name` ;; everywhere? Determine whether or not this is the case. (select-keys x-metadata [:name :display-name :semantic-type]) + (when-let [long-display-name (display-name query stage-number x :long)] + {:long-display-name long-display-name}) ;; don't return `:base-type`, FE should just use `:effective-type` everywhere and not even need to know ;; `:base-type` exists. (when-let [effective-type ((some-fn :effective-type :base-type) x-metadata)] diff --git a/test/metabase/lib/metadata/calculation_test.cljc b/test/metabase/lib/metadata/calculation_test.cljc index f7e03bc6187a916b1163989601c1316dc637a513..4348678aa86eae9c1a3ba69c22fb848cc68a1821 100644 --- a/test/metabase/lib/metadata/calculation_test.cljc +++ b/test/metabase/lib/metadata/calculation_test.cljc @@ -14,3 +14,11 @@ "TOTAL"]))] (is (= "Venues, Sorted by Total ascending" (lib.metadata.calculation/suggested-name query)))))) + +(deftest ^:parallel long-display-name-test + (let [query (lib/query-for-table-name meta/metadata-provider "VENUES") + results (->> query + lib.metadata.calculation/visible-columns + (map (comp :long-display-name #(lib/display-info query 0 %))))] + (is (= ["ID" "Name" "Category ID" "Latitude" "Longitude" "Price" "Categories → ID" "Categories → Name"] + results))))