victory-chart
Version:
Chart Component for Victory
101 lines (88 loc) • 3.57 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _flatten = require("lodash/flatten");
var _flatten2 = _interopRequireDefault(_flatten);
var _includes = require("lodash/includes");
var _includes2 = _interopRequireDefault(_includes);
var _isFunction = require("lodash/isFunction");
var _isFunction2 = _interopRequireDefault(_isFunction);
var _victoryCore = require("victory-core");
var _d3Scale = require("d3-scale");
var _d3Scale2 = _interopRequireDefault(_d3Scale);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var supportedScaleStrings = ["linear", "time", "log", "sqrt"];
exports.default = {
getDefaultScale: function getDefaultScale() {
return _d3Scale2.default.scaleLinear();
},
toNewName: function toNewName(scale) {
// d3 scale changed the naming scheme for scale from "linear" -> "scaleLinear" etc.
var capitalize = function capitalize(s) {
return s && s[0].toUpperCase() + s.slice(1);
};
return "scale" + capitalize(scale);
},
validScale: function validScale(scale) {
if (typeof scale === "function") {
return (0, _isFunction2.default)(scale.copy) && (0, _isFunction2.default)(scale.domain) && (0, _isFunction2.default)(scale.range);
} else if (typeof scale === "string") {
return (0, _includes2.default)(supportedScaleStrings, scale);
}
return false;
},
isScaleDefined: function isScaleDefined(props, axis) {
if (!props.scale) {
return false;
} else if (props.scale.x || props.scale.y) {
return props.scale[axis] ? true : false;
}
return true;
},
getScaleFromProps: function getScaleFromProps(props, axis) {
if (!this.isScaleDefined(props, axis)) {
return undefined;
}
var scale = props.scale[axis] || props.scale;
if (this.validScale(scale)) {
return (0, _isFunction2.default)(scale) ? scale : _d3Scale2.default[this.toNewName(scale)]();
}
},
getScaleTypeFromData: function getScaleTypeFromData(props, axis) {
if (!props.data) {
return "linear";
}
var accessor = _victoryCore.Helpers.createAccessor(props[axis]);
var allData = (0, _flatten2.default)(props.data);
var axisData = allData.map(accessor);
return _victoryCore.Collection.containsDates(axisData) ? "time" : "linear";
},
getBaseScale: function getBaseScale(props, axis) {
var scale = this.getScaleFromProps(props, axis);
if (scale) {
return scale;
}
var dataScale = this.getScaleTypeFromData(props, axis);
return _d3Scale2.default[this.toNewName(dataScale)]();
},
getScaleType: function getScaleType(props, axis) {
var scale = this.getScaleFromProps(props, axis);
// if the scale was not given in props, it will be set to linear or time depending on data
if (!scale) {
return this.getScaleTypeFromData(props, axis);
} else if (typeof scale === "string") {
return (0, _includes2.default)(supportedScaleStrings, scale) ? scale : "invalid";
} else if (!this.validScale(scale)) {
return "invalid";
}
var duckTypes = [{ name: "log", method: "base" }, { name: "ordinal", method: "unknown" }, { name: "pow-sqrt", method: "exponent" }, { name: "quantile", method: "quantiles" }, { name: "quantize-threshold", method: "invertExtent" }];
var scaleType = duckTypes.filter(function (type) {
return scale[type.method] !== undefined;
})[0];
if (scaleType) {
return scaleType.name;
}
return this.getScaleTypeFromData(props, axis);
}
};