@hackoregon/component-library
Version:
Official repo for Hack Oregon React component library
116 lines (93 loc) • 4.29 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 { scaleQuantize, scaleThreshold, scaleOrdinal, scaleQuantile, extent, color as d3Color } from "d3";
import CIVIC_MAP_COLORS from "./mapStyles";
var white = "#fff";
var convertToRGB = function convertToRGB(colorArray) {
return colorArray.map(function (d) {
return d3Color(d) ? d3Color(d) : d3Color(white);
}).map(function (d) {
return [d.r, d.g, d.b];
});
};
var createRange = function createRange(civicColor, colorRange) {
if (colorRange.length) {
if (d3Color(colorRange[0])) {
return convertToRGB(colorRange);
}
return colorRange;
}
if (civicColor && CIVIC_MAP_COLORS[civicColor]) {
return CIVIC_MAP_COLORS[civicColor];
}
return CIVIC_MAP_COLORS.earth;
};
var createEqualScale = function createEqualScale() {
return scaleQuantize();
};
export var updateEqualScale = function updateEqualScale(featuresData, equalScale, civicColorSelection, equalDomain, equalRange, field) {
var colorFieldName = field.color;
var domain = equalDomain.length ? equalDomain : extent(featuresData, function (d) {
return +d.properties[colorFieldName];
});
var range = createRange(civicColorSelection, equalRange);
return equalScale.domain(domain).range(range).nice();
};
var createQuantileScale = function createQuantileScale() {
return scaleQuantile();
};
export 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 : CIVIC_MAP_COLORS[civicColorSelection] ? CIVIC_MAP_COLORS[civicColorSelection] : CIVIC_MAP_COLORS.earth;
return quantileScale.domain(domain).range(colorRange);
};
var createThresholdScale = function createThresholdScale(civicColorSelection, categories, customColors) {
var range = createRange(civicColorSelection, customColors);
return scaleThreshold().domain(categories).range(range);
};
var createDiscreteScale = function createDiscreteScale(categories, colorRange) {
var range = createRange("", colorRange);
return scaleOrdinal().domain(categories).range(range).unknown([255, 255, 255, 128]);
};
export 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 CIVIC_MAP_COLORS[colorSelection];
};
};
export 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;
};
};