Skip to content

Commit

Permalink
injectZeros should be applied per value axis
Browse files Browse the repository at this point in the history
  • Loading branch information
ppisljar committed Nov 3, 2016
1 parent 1226445 commit fb81bcb
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 58 deletions.
28 changes: 4 additions & 24 deletions src/ui/public/vislib/components/zero_injection/inject_zeros.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import _ from 'lodash';
import VislibComponentsZeroInjectionOrderedXKeysProvider from 'ui/vislib/components/zero_injection/ordered_x_keys';
import VislibComponentsZeroInjectionZeroFilledArrayProvider from 'ui/vislib/components/zero_injection/zero_filled_array';
import VislibComponentsZeroInjectionZeroFillDataArrayProvider from 'ui/vislib/components/zero_injection/zero_fill_data_array';
export default function ZeroInjectionUtilService(Private) {

const orderXValues = Private(VislibComponentsZeroInjectionOrderedXKeysProvider);
const createZeroFilledArray = Private(VislibComponentsZeroInjectionZeroFilledArrayProvider);
const zeroFillDataArray = Private(VislibComponentsZeroInjectionZeroFillDataArrayProvider);

Expand All @@ -19,30 +17,12 @@ export default function ZeroInjectionUtilService(Private) {
* and injects zeros where needed.
*/

function getDataArray(obj) {
if (obj.rows) {
return obj.rows;
} else if (obj.columns) {
return obj.columns;
} else if (obj.series) {
return [obj];
}
}

return function (obj) {
if (!_.isObject(obj) || !obj.rows && !obj.columns && !obj.series) {
throw new TypeError('ZeroInjectionUtilService expects an object with a series, rows, or columns key');
}

const keys = orderXValues(obj);
const arr = getDataArray(obj);

arr.forEach(function (object) {
object.series.forEach(function (series) {
const zeroArray = createZeroFilledArray(keys);
const keys = _(obj).map('values').flatten().map('x').uniq().sort().value();//orderXValues(obj);

series.values = zeroFillDataArray(zeroArray, series.values);
});
obj.forEach(function (series) {
const zeroArray = createZeroFilledArray(keys);
series.values = zeroFillDataArray(zeroArray, series.values);
});

return obj;
Expand Down
4 changes: 2 additions & 2 deletions src/ui/public/vislib/lib/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -290,8 +290,8 @@ export default function DataFactory(Private) {
* @method injectZeros
* @returns {Object} Data object with zeros injected
*/
injectZeros() {
return injectZeros(this.data);
injectZeros(data) {
return injectZeros(data);
};

/**
Expand Down
9 changes: 2 additions & 7 deletions src/ui/public/vislib/lib/vis_config.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import _ from 'lodash';
import VisTypesProvider from 'ui/vislib/lib/types';
import VislibLibDataProvider from 'ui/vislib/lib/data';
import VislibComponentsZeroInjectionInjectZerosProvider from 'ui/vislib/components/zero_injection/inject_zeros';


export default function VisConfigFactory(Private) {

const Data = Private(VislibLibDataProvider);
const injectZeros = Private(VislibComponentsZeroInjectionInjectZerosProvider);
const visTypes = Private(VisTypesProvider);
const defaults = {
style: {
Expand All @@ -20,11 +19,7 @@ export default function VisConfigFactory(Private) {

class VisConfig {
constructor(visConfigArgs, data, uiState) {
if (visConfigArgs.zeroFill || ['area', 'histogram'].includes(visConfigArgs.type)) {
this.data = new Data(injectZeros(data), uiState);
} else {
this.data = new Data(data, uiState);
}
this.data = new Data(data, uiState);

const typeDefaults = visTypes[visConfigArgs.type](visConfigArgs, this.data);
this._values = _.defaultsDeep({}, typeDefaults, defaults);
Expand Down
26 changes: 1 addition & 25 deletions src/ui/public/vislib/visualizations/point_series.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export default function PointSeriesFactory(Private) {
matchingSeries.push(series[i]);
}
});
return matchingSeries;
return this.handler.data.injectZeros(matchingSeries);
};

stackData(data) {
Expand All @@ -68,30 +68,6 @@ export default function PointSeriesFactory(Private) {
return stackedData;
};

mapData(data, chart) {
const seriesConfig = chart.seriesConfig;
// todo: should stack or not should be defined per series
const shouldStack = seriesConfig.mode === 'stacked';

return _.map(data.values, val => {
const valueAxis = seriesConfig.valueAxis || chart.handler.valueAxes[0].id;
let y0 = 0;
if (shouldStack) {
if (!this.stackedData[valueAxis]) this.stackedData[valueAxis] = {};
y0 = this.stackedData[valueAxis][val.x] ? this.stackedData[valueAxis][val.x] : 0;
this.stackedData[valueAxis][val.x] = y0 + val.y;
}
return {
label: data.label,
x: val.x,
y: val.y,
y0: y0,
z: val.z,
_input: val
};
});
};

addClipPath(svg, width, height) {
// Prevents circles from being clipped at the top of the chart
const startX = 0;
Expand Down

0 comments on commit fb81bcb

Please sign in to comment.