const guessVisualization = ( card: CardObject, tableMetadata: Table, existingDisplay: ?string = null, ) => { const query = Card.getQuery(card); if (!query) { return; } const aggregations = Query.getAggregations(query); const breakoutFields = Query.getBreakouts(query).map( breakout => (Q.getFieldTarget(breakout, tableMetadata) || {}).field, ); if (aggregations.length === 0 && breakoutFields.length === 0) { card.display = "table"; } else if (aggregations.length === 1 && breakoutFields.length === 0) { card.display = "scalar"; } else if (aggregations.length === 1 && breakoutFields.length === 1) { if (isState(breakoutFields[0])) { card.display = "map"; card.visualization_settings["map.type"] = "region"; card.visualization_settings["map.region"] = "us_states"; } else if (isCountry(breakoutFields[0])) { card.display = "map"; card.visualization_settings["map.type"] = "region"; card.visualization_settings["map.region"] = "world_countries"; } else if (isDate(breakoutFields[0])) { card.display = getLineAreaBarDisplay("line", existingDisplay); } else { card.display = getLineAreaBarDisplay("bar", existingDisplay); } } else if (aggregations.length === 1 && breakoutFields.length === 2) { if (!VISUALIZATIONS_TWO_BREAKOUTS.has(card.display)) { if (isDate(breakoutFields[0])) { card.display = getLineAreaBarDisplay("line", existingDisplay); } else if (_.all(breakoutFields, isCoordinate)) { card.display = "map"; card.visualization_settings["map.type"] = "grid"; } else { card.display = "bar"; } } } else { console.warn("Couldn't guess visualization", card); card.display = "table"; } };
it("should return multiple aggregations", () => { expect(Query.getAggregations({ "aggregation": [["count"], ["sum", 1]] })).toEqual([["count"], ["sum", 1]]); })
it("should return a single aggregation", () => { expect(Query.getAggregations({ "aggregation": [["count"]] })).toEqual([["count"]]); expect(Query.getAggregations({ "aggregation": ["count"] })).toEqual([["count"]]); // deprecated })
it("should return an empty list for bare rows", () => { expect(Query.getAggregations({})).toEqual([]); expect(Query.getAggregations({ "aggregation": [["rows"]] })).toEqual([]); expect(Query.getAggregations({ "aggregation": ["rows"] })).toEqual([]); // deprecated })