victory-chart
Version:
Chart Component for Victory
165 lines (140 loc) • 5.49 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _isFunction = require("lodash/isFunction");
var _isFunction2 = _interopRequireDefault(_isFunction);
var _includes = require("lodash/includes");
var _includes2 = _interopRequireDefault(_includes);
var _without = require("lodash/without");
var _without2 = _interopRequireDefault(_without);
var _range = require("lodash/range");
var _range2 = _interopRequireDefault(_range);
var _scale = require("../../helpers/scale");
var _scale2 = _interopRequireDefault(_scale);
var _axis = require("../../helpers/axis");
var _axis2 = _interopRequireDefault(_axis);
var _domain = require("../../helpers/domain");
var _domain2 = _interopRequireDefault(_domain);
var _victoryCore = require("victory-core");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = {
// exposed for use by VictoryChart
getDomain: function getDomain(props, axis) {
if (axis && axis !== this.getAxis(props)) {
return undefined;
}
if (props.domain) {
return props.domain;
} else if (props.tickValues) {
return _domain2.default.getDomainFromTickValues(props);
}
return undefined;
},
// exposed for use by VictoryChart
getAxis: function getAxis(props, flipped) {
if (props.orientation) {
var vertical = { top: "x", bottom: "x", left: "y", right: "y" };
return vertical[props.orientation];
}
var axisType = props.dependentAxis ? "dependent" : "independent";
var flippedAxis = { dependent: "x", independent: "y" };
var normalAxis = { independent: "x", dependent: "y" };
return flipped ? flippedAxis[axisType] : normalAxis[axisType];
},
// exposed for use by VictoryChart
getScale: function getScale(props) {
var axis = this.getAxis(props);
var scale = _scale2.default.getBaseScale(props, axis);
var domain = this.getDomain(props) || scale.domain();
scale.range(_victoryCore.Helpers.getRange(props, axis));
scale.domain(domain);
return scale;
},
getTicks: function getTicks(props, scale) {
if (props.tickValues) {
if (_axis2.default.stringTicks(props)) {
return (0, _range2.default)(1, props.tickValues.length + 1);
}
return props.tickValues;
} else if (scale.ticks && (0, _isFunction2.default)(scale.ticks)) {
var ticks = scale.ticks(props.tickCount);
if (props.crossAxis) {
return (0, _includes2.default)(ticks, 0) ? (0, _without2.default)(ticks, 0) : ticks;
}
return ticks;
}
return scale.domain();
},
getTickFormat: function getTickFormat(props, tickProps) {
var scale = tickProps.scale;
var ticks = tickProps.ticks;
if (props.tickFormat && (0, _isFunction2.default)(props.tickFormat)) {
return props.tickFormat;
} else if (props.tickFormat && Array.isArray(props.tickFormat)) {
return function (x, index) {
return props.tickFormat[index];
};
} else if (_axis2.default.stringTicks(props)) {
return function (x, index) {
return props.tickValues[index];
};
} else if (scale.tickFormat && (0, _isFunction2.default)(scale.tickFormat)) {
return scale.tickFormat(ticks.length);
} else {
return function (x) {
return x;
};
}
},
getLabelPadding: function getLabelPadding(props, style) {
var labelStyle = style.axisLabel;
if (typeof labelStyle.padding !== "undefined" && labelStyle.padding !== null) {
return labelStyle.padding;
}
var isVertical = _axis2.default.isVertical(props);
// TODO: magic numbers
return props.label ? labelStyle.fontSize * (isVertical ? 2.3 : 1.6) : 0;
},
getOffset: function getOffset(props, style) {
var padding = _victoryCore.Helpers.getPadding(props);
var isVertical = _axis2.default.isVertical(props);
var orientation = props.orientation || (props.dependentAxis ? "left" : "bottom");
var labelPadding = this.getLabelPadding(props, style);
var xPadding = orientation === "right" ? padding.right : padding.left;
var yPadding = orientation === "top" ? padding.top : padding.bottom;
var fontSize = style.axisLabel.fontSize;
var offsetX = props.offsetX || xPadding;
var offsetY = props.offsetY || yPadding;
var totalPadding = fontSize + 2 * style.ticks.size + labelPadding;
var minimumPadding = 1.2 * fontSize; // TODO: magic numbers
var x = isVertical ? totalPadding : minimumPadding;
var y = isVertical ? minimumPadding : totalPadding;
return {
x: offsetX || x,
y: offsetY || y
};
},
getTransform: function getTransform(props, layoutProps) {
var offset = layoutProps.offset;
var orientation = layoutProps.orientation;
var translate = {
top: [0, offset.y],
bottom: [0, props.height - offset.y],
left: [offset.x, 0],
right: [props.width - offset.x, 0]
}[orientation];
return "translate(" + translate[0] + ", " + translate[1] + ")";
},
getTickPosition: function getTickPosition(style, orientation, isVertical) {
var orientationSign = { top: -1, left: -1, right: 1, bottom: 1 };
var tickSpacing = style.size + style.padding;
var sign = orientationSign[orientation];
return {
x: isVertical ? sign * tickSpacing : 0,
x2: isVertical ? sign * style.size : 0,
y: isVertical ? 0 : sign * tickSpacing,
y2: isVertical ? 0 : sign * style.size
};
}
};