From d55fe541989eb03fe6cacf3782f30631b4c50edc Mon Sep 17 00:00:00 2001 From: Krist Wongsuphasawat Date: Mon, 30 Sep 2019 16:57:35 -0700 Subject: [PATCH] refactor: remove unused code (#8300) --- superset/assets/package.json | 1 - .../spec/javascripts/modules/colors_spec.jsx | 47 ------- .../spec/javascripts/modules/geo_spec.jsx | 42 ------ .../spec/javascripts/modules/sandbox_spec.jsx | 32 ----- .../spec/javascripts/modules/time_spec.js | 99 -------------- .../spec/javascripts/modules/utils_spec.jsx | 8 -- .../components/controls/ViewportControl.jsx | 11 +- superset/assets/src/explore/controls.jsx | 4 +- superset/assets/src/modules/colors.js | 27 ---- superset/assets/src/modules/geo.js | 57 -------- superset/assets/src/modules/sandbox.js | 51 ------- superset/assets/src/modules/time.js | 124 ------------------ superset/assets/src/modules/utils.js | 10 -- 13 files changed, 11 insertions(+), 502 deletions(-) delete mode 100644 superset/assets/spec/javascripts/modules/colors_spec.jsx delete mode 100644 superset/assets/spec/javascripts/modules/geo_spec.jsx delete mode 100644 superset/assets/spec/javascripts/modules/sandbox_spec.jsx delete mode 100644 superset/assets/spec/javascripts/modules/time_spec.js delete mode 100644 superset/assets/src/modules/colors.js delete mode 100644 superset/assets/src/modules/geo.js delete mode 100644 superset/assets/src/modules/sandbox.js delete mode 100644 superset/assets/src/modules/time.js diff --git a/superset/assets/package.json b/superset/assets/package.json index 2787cc7cb..657b8c6c1 100644 --- a/superset/assets/package.json +++ b/superset/assets/package.json @@ -144,7 +144,6 @@ "redux-undo": "^1.0.0-beta9-9-7", "regenerator-runtime": "^0.13.3", "shortid": "^2.2.6", - "underscore": "^1.8.3", "urijs": "^1.18.10" }, "devDependencies": { diff --git a/superset/assets/spec/javascripts/modules/colors_spec.jsx b/superset/assets/spec/javascripts/modules/colors_spec.jsx deleted file mode 100644 index b4a02de52..000000000 --- a/superset/assets/spec/javascripts/modules/colors_spec.jsx +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { hexToRGB } from '../../../src/modules/colors'; - -describe('hexToRGB', () => { - it('is a function', () => { - expect(typeof hexToRGB).toBe('function'); - }); - - it('hexToRGB converts properly', () => { - expect(hexToRGB('#FFFFFF')).toEqual(expect.arrayContaining([255, 255, 255, 255])); - expect(hexToRGB('#000000')).toEqual(expect.arrayContaining([0, 0, 0, 255])); - expect(hexToRGB('#FF0000')).toEqual(expect.arrayContaining([255, 0, 0, 255])); - expect(hexToRGB('#00FF00')).toEqual(expect.arrayContaining([0, 255, 0, 255])); - expect(hexToRGB('#0000FF')).toEqual(expect.arrayContaining([0, 0, 255, 255])); - }); - - it('works with falsy values', () => { - expect(hexToRGB()).toEqual([0, 0, 0, 255]); - /* eslint-disable quotes */ - [false, 0, -0, 0.0, '', "", ``, null, undefined, NaN].forEach((value) => { - expect(hexToRGB(value)).toEqual(expect.arrayContaining([0, 0, 0, 255])); - }); - }); - - it('takes and alpha argument', () => { - expect(hexToRGB('#FF0000', 128)).toEqual(expect.arrayContaining([255, 0, 0, 128])); - expect(hexToRGB('#000000', 100)).toEqual(expect.arrayContaining([0, 0, 0, 100])); - expect(hexToRGB('#ffffff', 0)).toEqual(expect.arrayContaining([255, 255, 255, 0])); - }); -}); diff --git a/superset/assets/spec/javascripts/modules/geo_spec.jsx b/superset/assets/spec/javascripts/modules/geo_spec.jsx deleted file mode 100644 index da985d8b3..000000000 --- a/superset/assets/spec/javascripts/modules/geo_spec.jsx +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { unitToRadius } from '../../../src/modules/geo'; - -const METER_TO_MILE = 1609.34; - -describe('unitToRadius', () => { - it('converts to square meters', () => { - expect(unitToRadius('square_m', 4 * Math.PI)).toBe(2); - }); - it('converts to square kilometers', () => { - expect(unitToRadius('square_km', 25 * Math.PI)).toBe(5000); - }); - it('converts to radius meters', () => { - expect(unitToRadius('radius_m', 1000)).toBe(1000); - }); - it('converts to radius km', () => { - expect(unitToRadius('radius_km', 1)).toBe(1000); - }); - it('converts to radius miles', () => { - expect(unitToRadius('radius_miles', 1)).toBe(METER_TO_MILE); - }); - it('converts to square miles', () => { - expect(unitToRadius('square_miles', 25 * Math.PI)).toBe(5000 * (METER_TO_MILE / 1000)); - }); -}); diff --git a/superset/assets/spec/javascripts/modules/sandbox_spec.jsx b/superset/assets/spec/javascripts/modules/sandbox_spec.jsx deleted file mode 100644 index 92ac6ddf9..000000000 --- a/superset/assets/spec/javascripts/modules/sandbox_spec.jsx +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import sandboxedEval from '../../../src/modules/sandbox'; - -describe('sandboxedEval', () => { - it('works like a basic eval', () => { - expect(sandboxedEval('100')).toBe(100); - expect(sandboxedEval('v => v * 2')(5)).toBe(10); - }); - it('d3 is in context and works', () => { - expect(sandboxedEval("l => _.find(l, s => s === 'bar')")(['foo', 'bar'])).toBe('bar'); - }); - it('passes context as expected', () => { - expect(sandboxedEval('foo', { foo: 'bar' })).toBe('bar'); - }); -}); diff --git a/superset/assets/spec/javascripts/modules/time_spec.js b/superset/assets/spec/javascripts/modules/time_spec.js deleted file mode 100644 index e419f0c1c..000000000 --- a/superset/assets/spec/javascripts/modules/time_spec.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import moment from 'moment'; -import { getPlaySliderParams, truncate } from '../../../src/modules/time'; - -describe('truncate', () => { - it('truncates timestamps', () => { - const timestamp = moment('2018-03-03T03:03:03.333'); - const isoDurations = [ - // basic units - [moment.duration('PT1S'), moment('2018-03-03T03:03:03')], - [moment.duration('PT1M'), moment('2018-03-03T03:03:00')], - [moment.duration('PT1H'), moment('2018-03-03T03:00:00')], - [moment.duration('P1D'), moment('2018-03-03T00:00:00')], - [moment.duration('P1M'), moment('2018-03-01T00:00:00')], - [moment.duration('P1Y'), moment('2018-01-01T00:00:00')], - - // durations that are multiples - [moment.duration('PT2H'), moment('2018-03-03T02:00:00')], - [moment.duration('P2D'), moment('2018-03-03T00:00:00')], - ]; - let result; - isoDurations.forEach(([step, expected]) => { - result = truncate(timestamp, step); - expect(result.format()).toBe(expected.format()); - }); - }); -}); - -describe('getPlaySliderParams', () => { - it('is a function', () => { - expect(typeof getPlaySliderParams).toBe('function'); - }); - - it('handles durations', () => { - const timestamps = [ - moment('2018-01-01T00:00:00'), - moment('2018-01-02T00:00:00'), - moment('2018-01-03T00:00:00'), - moment('2018-01-04T00:00:00'), - moment('2018-01-05T00:00:00'), - moment('2018-01-06T00:00:00'), - moment('2018-01-07T00:00:00'), - moment('2018-01-08T00:00:00'), - moment('2018-01-09T00:00:00'), - moment('2018-01-10T00:00:00'), - ].map(d => parseInt(d.format('x'), 10)); - const { start, end, getStep, values, disabled } = getPlaySliderParams(timestamps, 'P2D'); - expect(moment(start).format()).toBe(moment('2018-01-01T00:00:00').format()); - expect(moment(end).format()).toBe(moment('2018-01-11T00:00:00').format()); - expect(getStep(start)).toBe(2 * 24 * 60 * 60 * 1000); - expect(values.map(v => moment(v).format())).toEqual([ - moment('2018-01-01T00:00:00').format(), - moment('2018-01-03T00:00:00').format(), - ]); - expect(disabled).toBe(false); - }); - - it('handles intervals', () => { - const timestamps = [ - moment('2018-01-01T00:00:00'), - moment('2018-01-02T00:00:00'), - moment('2018-01-03T00:00:00'), - moment('2018-01-04T00:00:00'), - moment('2018-01-05T00:00:00'), - moment('2018-01-06T00:00:00'), - moment('2018-01-07T00:00:00'), - moment('2018-01-08T00:00:00'), - moment('2018-01-09T00:00:00'), - moment('2018-01-10T00:00:00'), - ].map(d => parseInt(d.format('x'), 10)); - // 1970-01-03 was a Saturday - const { start, end, getStep, values, disabled } = getPlaySliderParams(timestamps, 'P1W/1970-01-03T00:00:00Z'); - expect(moment(start).format()).toBe(moment('2017-12-30T00:00:00Z').format()); // Saturday - expect(moment(end).format()).toBe(moment('2018-01-13T00:00:00Z').format()); // Saturday - expect(getStep(start)).toBe(7 * 24 * 60 * 60 * 1000); - expect(values.map(v => moment(v).format())).toEqual([ - moment('2017-12-30T00:00:00Z').format(), - moment('2018-01-06T00:00:00Z').format(), - ]); - expect(disabled).toBe(false); - }); -}); diff --git a/superset/assets/spec/javascripts/modules/utils_spec.jsx b/superset/assets/spec/javascripts/modules/utils_spec.jsx index d030cda59..842f54b50 100644 --- a/superset/assets/spec/javascripts/modules/utils_spec.jsx +++ b/superset/assets/spec/javascripts/modules/utils_spec.jsx @@ -19,7 +19,6 @@ import { formatSelectOptionsForRange, mainMetric, - roundDecimal, } from '../../../src/modules/utils'; describe('utils', () => { @@ -66,11 +65,4 @@ describe('utils', () => { expect(mainMetric(metrics)).toBe('foo'); }); }); - describe('roundDecimal', () => { - it('rounding method to limit the number of decimal digits', () => { - expect(roundDecimal(1.139, 2)).toBe(1.14); - expect(roundDecimal(1.13929, 3)).toBe(1.139); - expect(roundDecimal(1.13929)).toBe(1); - }); - }); }); diff --git a/superset/assets/src/explore/components/controls/ViewportControl.jsx b/superset/assets/src/explore/components/controls/ViewportControl.jsx index f3d762884..b7c06be82 100644 --- a/superset/assets/src/explore/components/controls/ViewportControl.jsx +++ b/superset/assets/src/explore/components/controls/ViewportControl.jsx @@ -23,7 +23,14 @@ import { decimal2sexagesimal } from 'geolib'; import TextControl from './TextControl'; import ControlHeader from '../ControlHeader'; -import { defaultViewport } from '../../../modules/geo'; + +export const DEFAULT_VIEWPORT = { + longitude: 6.85236157047845, + latitude: 31.222656842808707, + zoom: 1, + bearing: 0, + pitch: 0, +}; const PARAMS = [ 'longitude', @@ -49,7 +56,7 @@ const propTypes = { const defaultProps = { onChange: () => {}, default: { type: 'fix', value: 5 }, - value: defaultViewport, + value: DEFAULT_VIEWPORT, }; export default class ViewportControl extends React.Component { diff --git a/superset/assets/src/explore/controls.jsx b/superset/assets/src/explore/controls.jsx index 05d7f8eea..8f06ae617 100644 --- a/superset/assets/src/explore/controls.jsx +++ b/superset/assets/src/explore/controls.jsx @@ -66,9 +66,9 @@ import { mainMetric, } from '../modules/utils'; import * as v from './validators'; -import { defaultViewport } from '../modules/geo'; import ColumnOption from '../components/ColumnOption'; import OptionDescription from '../components/OptionDescription'; +import { DEFAULT_VIEWPORT } from '../explore/components/controls/ViewportControl'; const categoricalSchemeRegistry = getCategoricalSchemeRegistry(); const sequentialSchemeRegistry = getSequentialSchemeRegistry(); @@ -1866,7 +1866,7 @@ export const controls = { renderTrigger: false, description: t('Parameters related to the view and perspective on the map'), // default is whole world mostly centered - default: defaultViewport, + default: DEFAULT_VIEWPORT, // Viewport changes shouldn't prompt user to re-run query dontRefreshOnChange: true, }, diff --git a/superset/assets/src/modules/colors.js b/superset/assets/src/modules/colors.js deleted file mode 100644 index 6b0f72af7..000000000 --- a/superset/assets/src/modules/colors.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { rgb } from 'd3-color'; - -export function hexToRGB(hex, alpha = 255) { - if (!hex) { - return [0, 0, 0, alpha]; - } - const { r, g, b } = rgb(hex); - return [r, g, b, alpha]; -} diff --git a/superset/assets/src/modules/geo.js b/superset/assets/src/modules/geo.js deleted file mode 100644 index 7dce24e97..000000000 --- a/superset/assets/src/modules/geo.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { roundDecimal } from '../modules/utils'; - -export const defaultViewport = { - longitude: 6.85236157047845, - latitude: 31.222656842808707, - zoom: 1, - bearing: 0, - pitch: 0, -}; - -const METER_TO_MILE = 1609.34; - -export function unitToRadius(unit, num) { - if (unit === 'square_m') { - return Math.sqrt(num / Math.PI); - } else if (unit === 'radius_m') { - return num; - } else if (unit === 'radius_km') { - return num * 1000; - } else if (unit === 'radius_miles') { - return num * METER_TO_MILE; - } else if (unit === 'square_km') { - return Math.sqrt(num / Math.PI) * 1000; - } else if (unit === 'square_miles') { - return Math.sqrt(num / Math.PI) * METER_TO_MILE; - } - return null; -} - -export const EARTH_CIRCUMFERENCE_KM = 40075.16; -export const MILES_PER_KM = 1.60934; - -export function kmToPixels(kilometers, latitude, zoomLevel) { - // Algorithm from: https://wiki.openstreetmap.org/wiki/Zoom_levels - const latitudeRad = latitude * (Math.PI / 180); - // Seems like the zoomLevel is off by one - const kmPerPixel = (EARTH_CIRCUMFERENCE_KM * Math.cos(latitudeRad)) / Math.pow(2, zoomLevel + 9); - return roundDecimal(kilometers / kmPerPixel, 2); -} diff --git a/superset/assets/src/modules/sandbox.js b/superset/assets/src/modules/sandbox.js deleted file mode 100644 index 7c2e77b05..000000000 --- a/superset/assets/src/modules/sandbox.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// A safe alternative to JS's eval -import vm from 'vm'; -import _ from 'underscore'; -import * as d3array from 'd3-array'; -import * as colors from './colors'; - -// Objects exposed here should be treated like a public API -// if `underscore` had backwards incompatible changes in a future release, we'd -// have to be careful about bumping the library as those changes could break user charts -const GLOBAL_CONTEXT = { - console, - _, - colors, - d3array, -}; - -// Copied/modified from https://github.com/hacksparrow/safe-eval/blob/master/index.js -export default function sandboxedEval(code, context, opts) { - const sandbox = {}; - const resultKey = 'SAFE_EVAL_' + Math.floor(Math.random() * 1000000); - sandbox[resultKey] = {}; - const codeToEval = resultKey + '=' + code; - const sandboxContext = { ...GLOBAL_CONTEXT, ...context }; - Object.keys(sandboxContext).forEach(function (key) { - sandbox[key] = sandboxContext[key]; - }); - try { - vm.runInNewContext(codeToEval, sandbox, opts); - return sandbox[resultKey]; - } catch (error) { - return () => error; - } -} diff --git a/superset/assets/src/modules/time.js b/superset/assets/src/modules/time.js deleted file mode 100644 index 3d4466f3c..000000000 --- a/superset/assets/src/modules/time.js +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import moment from 'moment'; - - -// array with the minimum values of each part of a timestamp -- note that -// months are zero-indexed in Javascript -const truncatePartTo = [ - 1, // year - 0, // month - 1, // day - 0, // hour - 0, // minute - 0, // second - 0, // millisecond -]; - - -export function truncate(timestamp, step) { - /* - * Truncate timestamp down to duration resolution. - */ - const lowerBound = moment(timestamp).subtract(step); - const explodedTimestamp = timestamp.toArray(); - const explodedLowerBound = lowerBound.toArray(); - - const firstDiffIndex = explodedTimestamp - .map((part, i) => (explodedLowerBound[i] !== part)) - .indexOf(true); - const dateParts = explodedTimestamp.map((part, i) => { - if (i === firstDiffIndex) { - // truncate down to closest `truncatePartTo[i] + n * step` - const difference = part - explodedLowerBound[i]; - return part - ((part - truncatePartTo[i]) % difference); - } else if (i < firstDiffIndex || firstDiffIndex === -1) { - return part; - } - return truncatePartTo[i]; - }); - - return moment(dateParts); -} - -function getStepSeconds(step, start) { - /* Return number of seconds in a step. - * - * The step might be ambigous, eg, "1 month" has a variable number of - * seconds, which is why we need to know the start time. - */ - const startMillliseconds = parseInt(moment(start).format('x'), 10); - const endMilliseconds = parseInt(moment(start).add(step).format('x'), 10); - return endMilliseconds - startMillliseconds; -} - -export const getPlaySliderParams = function (timestamps, timeGrain) { - const minTimestamp = moment(Math.min(...timestamps)); - const maxTimestamp = moment(Math.max(...timestamps)); - let step; - let reference; - - if (timeGrain.indexOf('/') !== -1) { - // Here, time grain is a time interval instead of a simple duration, either - // `reference/duration` or `duration/reference`. We need to parse the - // duration and make sure that start and end are in the right places. For - // example, if `reference` is a Saturday and `duration` is 1 week (P1W) - // then both start and end should be Saturdays. - const parts = timeGrain.split('/', 2); - if (parts[0].endsWith('Z')) { // ISO string - reference = moment(parts[0]); - step = moment.duration(parts[1]); - } else { - reference = moment(parts[1]); - step = moment.duration(parts[0]); - } - } else { - step = moment.duration(timeGrain); - reference = truncate(minTimestamp, step); - } - - // find the largest `reference + n * step` smaller than the minimum timestamp - const start = moment(reference); - while (start < minTimestamp) { - start.add(step); - } - while (start > minTimestamp) { - start.subtract(step); - } - - // find the smallest `reference + n * step` larger than the maximum timestamp - const end = moment(reference); - while (end > maxTimestamp) { - end.subtract(step); - } - while (end < maxTimestamp) { - end.add(step); - } - - const values = timeGrain != null ? [start, moment(start).add(step)] : [start, end]; - const disabled = timestamps.every(timestamp => timestamp === null); - - return { - start: parseInt(start.format('x'), 10), - end: parseInt(end.format('x'), 10), - getStep: getStepSeconds.bind(this, step), - values: values.map(v => parseInt(v.format('x'), 10)), - disabled, - }; -}; diff --git a/superset/assets/src/modules/utils.js b/superset/assets/src/modules/utils.js index 1e5f311c3..25e0a013f 100644 --- a/superset/assets/src/modules/utils.js +++ b/superset/assets/src/modules/utils.js @@ -86,13 +86,3 @@ export function mainMetric(savedMetrics) { } return metric; } - -export function roundDecimal(number, precision) { - let roundedNumber; - if (precision) { - roundedNumber = Math.round(number * (precision = Math.pow(10, precision))) / precision; - } else { - roundedNumber = Math.round(number); - } - return roundedNumber; -}