diff --git a/frontend/src/metabase/lib/schema_metadata.js b/frontend/src/metabase/lib/schema_metadata.js index 8434f3923288e5239808146be87b04c6d7f81ebb..ef9232dd9e4f5f2fe2cbba0c4185b8c128acf8d2 100644 --- a/frontend/src/metabase/lib/schema_metadata.js +++ b/frontend/src/metabase/lib/schema_metadata.js @@ -111,7 +111,7 @@ export const isMetric = (col) => (col && col.source !== "breakout") && isSumm export const isNumericBaseType = (field) => isa(field && field.base_type, TYPE.Number); // ZipCode, ID, etc derive from Number but should not be formatted as numbers -export const isNumber = (field) => (field.special_type == null || field.special_type === TYPE.Number); +export const isNumber = (field) => field && isNumericBaseType(field) && (field.special_type == null || field.special_type === TYPE.Number); export const isCoordinate = (field) => isa(field && field.special_type, TYPE.Coordinate); export const isLatitude = (field) => isa(field && field.special_type, TYPE.Latitude); @@ -472,7 +472,7 @@ export function addValidOperatorsToFields(table) { for (let field of table.fields) { field.valid_operators = getOperators(field, table); } - table.aggregation_options = getAggregators(table); + table.aggregation_options = getAggregatorsWithFields(table); table.breakout_options = getBreakouts(table.fields); return table; } diff --git a/frontend/src/metabase/query_builder/AggregationWidget.jsx b/frontend/src/metabase/query_builder/AggregationWidget.jsx index ea5e4b3d33d28c0d51be19e743488c781f0d5a26..c8369eb0e2dbeccd330d19b8f295364428e7910a 100644 --- a/frontend/src/metabase/query_builder/AggregationWidget.jsx +++ b/frontend/src/metabase/query_builder/AggregationWidget.jsx @@ -7,7 +7,7 @@ import Popover from "metabase/components/Popover.jsx"; import Query from "metabase/lib/query"; import { AggregationClause } from "metabase/lib/query"; -import { getAggregator, getAggregatorsWithFields } from "metabase/lib/schema_metadata"; +import { getAggregator } from "metabase/lib/schema_metadata"; import cx from "classnames"; import _ from "underscore"; @@ -31,17 +31,6 @@ export default class AggregationWidget extends Component { updateAggregation: PropTypes.func.isRequired }; - - componentWillMount() { - this.componentWillReceiveProps(this.props); - } - - componentWillReceiveProps(newProps) { - this.setState({ - availableAggregations: getAggregatorsWithFields(newProps.tableMetadata) - }); - } - setAggregation(aggregation) { this.props.updateAggregation(aggregation); } @@ -104,7 +93,7 @@ export default class AggregationWidget extends Component { > <AggregationPopover aggregation={aggregation} - availableAggregations={this.state.availableAggregations} + availableAggregations={tableMetadata.aggregation_options} tableMetadata={tableMetadata} customFields={this.props.customFields} onCommitAggregation={this.setAggregation} diff --git a/frontend/test/unit/lib/formatting.spec.js b/frontend/test/unit/lib/formatting.spec.js index 5d858815cd728e9bb7f8c25f4caf99a53180de9b..2bcb641077f0196a2fc239ba8589081cd39dbbd5 100644 --- a/frontend/test/unit/lib/formatting.spec.js +++ b/frontend/test/unit/lib/formatting.spec.js @@ -24,15 +24,18 @@ describe('formatting', () => { }); describe("formatValue", () => { + it("should format numbers with null column", () => { + expect(formatValue(12345)).toEqual("12345"); + }); it("should format numbers with commas", () => { - expect(formatValue(12345, { column: { special_type: TYPE.Number }})).toEqual("12,345"); + expect(formatValue(12345, { column: { base_type: TYPE.Number, special_type: TYPE.Number }})).toEqual("12,345"); }); it("should format zip codes without commas", () => { - expect(formatValue(12345, { column: { special_type: TYPE.ZipCode }})).toEqual("12345"); + expect(formatValue(12345, { column: { base_type: TYPE.Number, special_type: TYPE.ZipCode }})).toEqual("12345"); }); it("should format latitude and longitude columns correctly", () => { - expect(formatValue(37.7749, { column: { special_type: TYPE.Latitude }})).toEqual("37.77490000"); - expect(formatValue(-122.4194, { column: { special_type: TYPE.Longitude }})).toEqual("-122.41940000"); + expect(formatValue(37.7749, { column: { base_type: TYPE.Number, special_type: TYPE.Latitude }})).toEqual("37.77490000"); + expect(formatValue(-122.4194, { column: { base_type: TYPE.Number, special_type: TYPE.Longitude }})).toEqual("-122.41940000"); }); }); });