@hackoregon/component-library
Version:
Official repo for Hack Oregon React component library
136 lines (103 loc) • 4.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createSizeScale = exports.createColorScale = exports.updateQuantileScale = exports.updateEqualScale = void 0;
var _d = require("d3");
var _mapStyles = _interopRequireDefault(require("./mapStyles"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
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; } }
var white = "#fff";
var convertToRGB = function convertToRGB(colorArray) {
return colorArray.map(function (d) {
return (0, _d.color)(d) ? (0, _d.color)(d) : (0, _d.color)(white);
}).map(function (d) {
return [d.r, d.g, d.b];
});
};
var createRange = function createRange(civicColor, colorRange) {
if (colorRange.length) {
if ((0, _d.color)(colorRange[0])) {
return convertToRGB(colorRange);
}
return colorRange;
}
if (civicColor && _mapStyles["default"][civicColor]) {
return _mapStyles["default"][civicColor];
}
return _mapStyles["default"].earth;
};
var createEqualScale = function createEqualScale() {
return (0, _d.scaleQuantize)();
};
var updateEqualScale = function updateEqualScale(featuresData, equalScale, civicColorSelection, equalDomain, equalRange, field) {
var colorFieldName = field.color;
var domain = equalDomain.length ? equalDomain : (0, _d.extent)(featuresData, function (d) {
return +d.properties[colorFieldName];
});
var range = createRange(civicColorSelection, equalRange);
return equalScale.domain(domain).range(range).nice();
};
exports.updateEqualScale = updateEqualScale;
var createQuantileScale = function createQuantileScale() {
return (0, _d.scaleQuantile)();
};
var updateQuantileScale = function updateQuantileScale(featuresData, quantileScale, civicColorSelection, quantileRange, field) {
var colorFieldName = field.color;
var domain = featuresData.map(function (d) {
return +d.properties[colorFieldName];
}).reduce(function (a, c) {
return a.indexOf(c) === -1 ? [].concat(_toConsumableArray(a), [c]) : a;
}, []);
var colorRange = quantileRange.length ? quantileRange : _mapStyles["default"][civicColorSelection] ? _mapStyles["default"][civicColorSelection] : _mapStyles["default"].earth;
return quantileScale.domain(domain).range(colorRange);
};
exports.updateQuantileScale = updateQuantileScale;
var createThresholdScale = function createThresholdScale(civicColorSelection, categories, customColors) {
var range = createRange(civicColorSelection, customColors);
return (0, _d.scaleThreshold)().domain(categories).range(range);
};
var createDiscreteScale = function createDiscreteScale(categories, colorRange) {
var range = createRange("", colorRange);
return (0, _d.scaleOrdinal)().domain(categories).range(range).unknown([255, 255, 255, 128]);
};
var createColorScale = function createColorScale(colorSelection) {
var scaleType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var dataRange = arguments.length > 2 ? arguments[2] : undefined;
var colorRange = arguments.length > 3 ? arguments[3] : undefined;
var colorScaleType = scaleType.color;
if (scaleType && colorScaleType === "equal") {
return createEqualScale();
}
if (scaleType && colorScaleType === "quantile") {
return createQuantileScale();
}
if (scaleType && colorScaleType === "threshold") {
return createThresholdScale(colorSelection, dataRange, colorRange);
}
if (scaleType && colorScaleType === "ordinal") {
return createDiscreteScale(dataRange, colorRange);
}
return function () {
return _mapStyles["default"][colorSelection];
};
};
exports.createColorScale = createColorScale;
var createSizeScale = function createSizeScale(width) {
var scaleType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var fieldName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var areaScaleType = scaleType.area;
var areaFieldName = fieldName.area;
if (scaleType && areaScaleType === "circle area") {
return function (feature) {
return Math.sqrt(feature.properties[areaFieldName] / Math.PI);
};
}
return function () {
return width;
};
};
exports.createSizeScale = createSizeScale;