UNPKG

victory-chart

Version:
101 lines (88 loc) 3.57 kB
"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); } };