@hackoregon/component-library
Version:
Official repo for Hack Oregon React component library
104 lines (98 loc) • 3.74 kB
JavaScript
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
import React from "react";
import PropTypes from "prop-types";
import { VictoryGroup, VictoryScatter } from "victory";
import GradientLine from "./GradientLine";
import GradientBox from "./GradientBox";
var colorScales = {
"default": ["#ffffff", "#19B7AA"],
thermal: ["#ffffd2", "#ffefac", "#fee296", "#fec375", "#fd9b54", "#fc6443", "#e63638", "#c51f40", "#8f1f40"],
space: ["#f8fcfd", "#e4eff6", "#c8dae9", "#abc7df", "#9da6cd", "#9081bc", "#9d5daa", "#972e8f", "#6b2866"],
ocean: ["#ffffe1", "#effac1", "#ceedc2", "#8cd5c6", "#4fc1cc", "#28a1c8", "#3e76b3", "#4752a2", "#2d4070"],
planet: ["#f8f6fa", "#ece6f1", "#dcc4df", "#d4a4cf", "#e87bbc", "#f0479b", "#ab3271", "#ab2861", "#812844"],
earth: ["#fff8fc", "#f027f2", "#d7d8e9", "#b2c7e0", "#ab6d5", "#4ba1c8", "#28959b", "#288373", "#286356"]
};
var GradientScale = function GradientScale(_ref) {
var width = _ref.width,
height = _ref.height,
domain = _ref.domain,
primary = _ref.primary,
_ref$secondary = _ref.secondary,
secondary = _ref$secondary === void 0 ? [] : _ref$secondary,
_ref$colorScale = _ref.colorScale,
colorScale = _ref$colorScale === void 0 ? "default" : _ref$colorScale;
var data = [].concat(_toConsumableArray(secondary.map(function (num) {
return {
x: num,
y: 0,
type: "secondary"
};
})), [{
x: primary,
y: 0,
type: "primary"
}]);
return React.createElement("div", null, React.createElement("svg", {
style: {
position: "absolute"
},
height: "0",
width: "0"
}, React.createElement("defs", null, colorScales[colorScale].length === 2 ? React.createElement("linearGradient", {
id: "myGradient"
}, React.createElement("stop", {
offset: "0%",
stopColor: colorScales[colorScale][0]
}), React.createElement("stop", {
offset: "100%",
stopColor: colorScales[colorScale][colorScales[colorScale].length - 1]
})) : React.createElement("linearGradient", {
id: "myGradient"
}, React.createElement("stop", {
offset: "0%",
stopColor: "white"
}), colorScales[colorScale].map(function (color, index) {
return React.createElement("stop", {
offset: "".concat(index * 9.09 + 9.09, "%"),
stopColor: color
});
}), React.createElement("stop", {
offset: "100%",
stopColor: "black"
})))), React.createElement(VictoryGroup, {
padding: {
top: 10,
bottom: 10
},
domain: {
x: domain,
y: [0, 1]
},
height: height,
width: width
}, React.createElement(GradientBox, {
padding: 0,
fill: "url(#myGradient)"
}), React.createElement(VictoryScatter, {
data: data,
dataComponent: React.createElement(GradientLine, null)
}), React.createElement(VictoryScatter, {
data: data,
dataComponent: React.createElement(GradientLine, null)
})));
};
GradientScale.propTypes = {
width: PropTypes.number,
height: PropTypes.number,
domain: PropTypes.arrayOf(PropTypes.number).isRequired,
primary: PropTypes.number.isRequired,
secondary: PropTypes.arrayOf(PropTypes.number)
};
GradientScale.defaultProps = {
width: 500,
height: 100
};
export default GradientScale;