diff --git a/frontend/src/metabase/visualizations/components/PinMap.jsx b/frontend/src/metabase/visualizations/components/PinMap.jsx index bec0d65f4249637c30baf303c08ed3d9fd1fdbb3..496756109f23aae0c378e1663398ca211b517da4 100644 --- a/frontend/src/metabase/visualizations/components/PinMap.jsx +++ b/frontend/src/metabase/visualizations/components/PinMap.jsx @@ -132,9 +132,13 @@ export default class PinMap extends Component { ]); // only use points with numeric coordinates & metric - const validPoints = allPoints.map( - ([lat, lng, metric]) => lat != null && lng != null && metric != null, - ); + const validPoints = allPoints.map(([lat, lng, metric]) => { + if (settings["map.type"] === "pin") { + return lat != null && lng != null; + } + + return lat != null && lng != null && metric != null; + }); const points = allPoints.filter((_, i) => validPoints[i]); const updatedRows = rows.filter((_, i) => validPoints[i]); diff --git a/frontend/src/metabase/visualizations/components/PinMap.unit.spec.js b/frontend/src/metabase/visualizations/components/PinMap.unit.spec.js index ed73b523b4eb970ce915098b740d5a4a9dfef151..3f9a2128d82cfcc36ec28246a33f5c8cb49c9afe 100644 --- a/frontend/src/metabase/visualizations/components/PinMap.unit.spec.js +++ b/frontend/src/metabase/visualizations/components/PinMap.unit.spec.js @@ -1,7 +1,7 @@ import PinMap from "metabase/visualizations/components/PinMap"; describe("PinMap", () => { - it("should filter out rows with null values", () => { + it("should filter out rows with null values in either the lat, long, or metric column", () => { const onUpdateWarnings = jest.fn(); const data = { cols: ["lat", "lng", "metric"].map(name => ({ name })), @@ -28,4 +28,38 @@ describe("PinMap", () => { "We filtered out 3 row(s) containing null values.", ]); }); + + it("should filter out rows only if the lat or long values are null for pin maps", () => { + const onUpdateWarnings = jest.fn(); + const data = { + cols: ["lat", "lng", "metric"].map(name => ({ name })), + rows: [ + [null, 0, 0], + [0, null, 0], + [0, 0, null], + [1, 2, null], + [0, 0, 0], + ], + }; + const props = { + settings: { + "map.latitude_column": "lat", + "map.longitude_column": "lng", + "map.metric_column": "metric", + "map.type": "pin", + }, + series: [{ data }], + onUpdateWarnings, + }; + const { points } = new PinMap(props)._getPoints(props); + + expect(points).toEqual([ + [0, 0, null], + [1, 2, null], + [0, 0, 0], + ]); + expect(onUpdateWarnings.mock.calls[0][0]).toEqual([ + "We filtered out 2 row(s) containing null values.", + ]); + }); });