diff --git a/frontend/src/metabase-lib/viz/display.ts b/frontend/src/metabase-lib/viz/display.ts index b82c5c3df1f86f66512a0db750a7e802dacb9063..ca3bba2dda42044605df49e6b11473c7eb11645a 100644 --- a/frontend/src/metabase-lib/viz/display.ts +++ b/frontend/src/metabase-lib/viz/display.ts @@ -99,10 +99,23 @@ export const defaultDisplay = (query: Lib.Query): DefaultDisplay => { return Lib.isCoordinate(column); }); if (areBreakoutsCoordinates) { + const binningOne = Lib.binning(breakouts[0]); + const binningTwo = Lib.binning(breakouts[1]); + const areBothBinned = binningOne !== null && binningTwo !== null; + + if (areBothBinned) { + return { + display: "map", + settings: { + "map.type": "grid", + }, + }; + } + return { display: "map", settings: { - "map.type": "grid", + "map.type": "pin", }, }; } diff --git a/frontend/src/metabase-lib/viz/display.unit.spec.ts b/frontend/src/metabase-lib/viz/display.unit.spec.ts index e60e8fa0595b91978c29ae79e86fd66e06b88048..a6585e9879f10d3b47fc40cf12fa095774b56484 100644 --- a/frontend/src/metabase-lib/viz/display.unit.spec.ts +++ b/frontend/src/metabase-lib/viz/display.unit.spec.ts @@ -182,7 +182,32 @@ describe("defaultDisplay", () => { expect(defaultDisplay(query)).toEqual({ display: "line" }); }); - it("returns 'map' display for queries with 1 aggregation and 2 breakouts by coordinates", () => { + it("returns 'map' display with 'grid' type for queries with 1 aggregation and 2 binned breakouts by coordinates", () => { + const query = createQueryWithClauses({ + aggregations: [{ operatorName: "count" }], + breakouts: [ + { + columnName: "LATITUDE", + tableName: "PEOPLE", + binningStrategyName: "Auto bin", + }, + { + columnName: "LONGITUDE", + tableName: "PEOPLE", + binningStrategyName: "Auto bin", + }, + ], + }); + + expect(defaultDisplay(query)).toEqual({ + display: "map", + settings: { + "map.type": "grid", + }, + }); + }); + + it("returns 'map' display with 'pin' type for queries with 1 aggregation and 2 un-binned breakouts by coordinates", () => { const query = createQueryWithClauses({ aggregations: [{ operatorName: "count" }], breakouts: [ @@ -194,7 +219,28 @@ describe("defaultDisplay", () => { expect(defaultDisplay(query)).toEqual({ display: "map", settings: { - "map.type": "grid", + "map.type": "pin", + }, + }); + }); + + it("returns 'map' display with 'pin' type for queries with 1 aggregation and 2 breakouts by coordinates - 1 binned, 1 unbinned", () => { + const query = createQueryWithClauses({ + aggregations: [{ operatorName: "count" }], + breakouts: [ + { + columnName: "LATITUDE", + tableName: "PEOPLE", + binningStrategyName: "Auto bin", + }, + { columnName: "LONGITUDE", tableName: "PEOPLE" }, + ], + }); + + expect(defaultDisplay(query)).toEqual({ + display: "map", + settings: { + "map.type": "pin", }, }); });