@daphneb/phonereporting
Version:
171 lines (129 loc) • 5.62 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _react = require('react');
var _d2 = require('d3');
var _d3 = _interopRequireDefault(_d2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var number = _react.PropTypes.number;
var DefaultScalesMixin = {
propTypes: {
barPadding: number
},
getDefaultProps: function getDefaultProps() {
return {
barPadding: 0.5
};
},
componentWillMount: function componentWillMount() {
this._makeScales(this.props);
},
componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
this._makeScales(nextProps);
},
_makeScales: function _makeScales(props) {
var xScale = props.xScale;
var xIntercept = props.xIntercept;
var yScale = props.yScale;
var yIntercept = props.yIntercept;
if (!xScale) {
var _makeXScale = this._makeXScale(props);
var _makeXScale2 = _slicedToArray(_makeXScale, 2);
this._xScale = _makeXScale2[0];
this._xIntercept = _makeXScale2[1];
} else {
var _ref = [xScale, xIntercept];
this._xScale = _ref[0];
this._xIntercept = _ref[1];
}
if (!yScale) {
var _makeYScale = this._makeYScale(props);
var _makeYScale2 = _slicedToArray(_makeYScale, 2);
this._yScale = _makeYScale2[0];
this._yIntercept = _makeYScale2[1];
} else {
var _ref2 = [yScale, yIntercept];
this._yScale = _ref2[0];
this._yIntercept = _ref2[1];
}
},
_makeXScale: function _makeXScale(props) {
var x = props.x;
var values = props.values;
var data = this._data;
if (typeof x(values(data[0])[0]) === 'number') {
return this._makeLinearXScale(props);
} else if (typeof x(values(data[0])[0]).getMonth === 'function') {
return this._makeTimeXScale(props);
} else {
return this._makeOrdinalXScale(props);
}
},
_makeLinearXScale: function _makeLinearXScale(props) {
var x = props.x;
var values = props.values;
var data = this._data;
var extentsData = data.map(function (stack) {
return values(stack).map(function (e) {
return x(e);
});
});
var extents = _d3.default.extent(Array.prototype.concat.apply([], extentsData));
var scale = _d3.default.scale.linear().domain(extents).range([0, this._innerWidth]);
var zero = _d3.default.max([0, scale.domain()[0]]);
var xIntercept = scale(zero);
return [scale, xIntercept];
},
_makeOrdinalXScale: function _makeOrdinalXScale(props) {
var x = props.x;
var values = props.values;
var barPadding = props.barPadding;
var scale = _d3.default.scale.ordinal().domain(values(this._data[0]).map(function (e) {
return x(e);
})).rangeRoundBands([0, this._innerWidth], barPadding);
return [scale, 0];
},
_makeTimeXScale: function _makeTimeXScale(props) {
var x = props.x;
var values = props.values;
var minDate = _d3.default.min(values(this._data[0]), x);
var maxDate = _d3.default.max(values(this._data[0]), x);
var scale = _d3.default.time.scale().domain([minDate, maxDate]).range([0, this._innerWidth]);
return [scale, 0];
},
_makeYScale: function _makeYScale(props) {
var y = props.y;
var values = props.values;
var data = this._data;
if (typeof y(values(data[0])[0]) === 'number') {
return this._makeLinearYScale(props);
} else {
return this._makeOrdinalYScale(props);
}
},
_makeLinearYScale: function _makeLinearYScale(props) {
var y = props.y;
var y0 = props.y0;
var values = props.values;
var groupedBars = props.groupedBars;
var extentsData = this._data.map(function (stack) {
return values(stack).map(function (e) {
return groupedBars ? y(e) : y0(e) + y(e);
});
});
var extents = _d3.default.extent(Array.prototype.concat.apply([], extentsData));
extents = [_d3.default.min([0, extents[0]]), extents[1]];
var scale = _d3.default.scale.linear().domain(extents).range([this._innerHeight, 0]);
var zero = _d3.default.max([0, scale.domain()[0]]);
var yIntercept = scale(zero);
return [scale, yIntercept];
},
_makeOrdinalYScale: function _makeOrdinalYScale() {
var scale = _d3.default.scale.ordinal().range([this._innerHeight, 0]);
var yIntercept = scale(0);
return [scale, yIntercept];
}
};
exports.default = DefaultScalesMixin;