@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
108 lines • 5.06 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
// (C) 2019-2020 GoodData Corporation
var geoChartColor_1 = require("./geoChartColor");
var geoChart_1 = require("../../../constants/geoChart");
var utils_1 = require("../../../helpers/utils");
function transformPushpinDataSource(dataSourceProps) {
var config = dataSourceProps.config, geoData = dataSourceProps.geoData, colorStrategy = dataSourceProps.colorStrategy;
var _a = (config || {}).points, geoPointsConfig = _a === void 0 ? {} : _a;
var color = geoData.color, location = geoData.location, segment = geoData.segment, size = geoData.size, tooltipText = geoData.tooltipText;
var locationNameTitle = tooltipText ? tooltipText.name : "";
var colorTitle = color ? color.name : "";
var sizeTitle = size ? size.name : "";
var segmentTitle = segment ? segment.name : "";
var hasLocation = location !== undefined;
var hasTooltip = tooltipText !== undefined;
var hasSegment = segment !== undefined;
var hasSize = size !== undefined;
var hasColor = color !== undefined;
var locationData = hasLocation ? location.data : [];
var locationNameData = hasTooltip ? tooltipText.data : [];
var segmentData = hasSegment ? segment.data : [];
var segmentUris = hasSegment ? segment.uris : [];
var sizeData = hasSize ? size.data : [];
var _b = utils_1.getMinMax(sizeData), minSizeFromData = _b.min, maxSizeFromData = _b.max;
var colorData = hasColor ? color.data : [];
var sizeFormat = hasSize ? size.format : "";
var colorFormat = hasColor ? color.format : "";
var pushpinColors = geoChartColor_1.getPushpinColors(colorData, segmentData, colorStrategy);
var features = locationData.reduce(function (result, coordinates, index) {
if (!coordinates) {
return result;
}
var lat = coordinates.lat, lng = coordinates.lng;
var pushpinSize = hasSize
? calculateSizeInPixel(sizeData[index], minSizeFromData, maxSizeFromData, geoPointsConfig)
: geoChart_1.PUSHPIN_SIZE_OPTIONS_MAP.min.default;
var colorValue = hasColor ? colorData[index] : undefined;
var segmentValue = segmentData[index];
var segmentUri = segmentUris[index];
var pushpinColor = pushpinColors[index] || pushpinColors[0] || {};
return result.concat([
{
type: "Feature",
geometry: {
type: "Point",
coordinates: [lng, lat],
},
properties: {
pushpinSize: pushpinSize,
locationName: {
title: locationNameTitle,
value: locationNameData[index],
},
locationIndex: index,
color: __assign({}, pushpinColor, { title: colorTitle, value: colorValue, format: colorFormat }),
size: {
title: sizeTitle,
value: sizeData[index],
format: sizeFormat,
},
segment: {
title: segmentTitle,
value: segmentValue,
uri: segmentUri,
},
},
},
]);
}, []);
return features;
}
// transform data value to pushpin size in pixel
var calculateSizeInPixel = function (dataValue, minSize, maxSize, geoPointsConfig) {
if (minSize === maxSize || dataValue === null) {
return geoChart_1.PUSHPIN_SIZE_OPTIONS_MAP.min.default;
}
var _a = geoPointsConfig || {}, _b = _a.minSize, minSizeFromConfig = _b === void 0 ? "default" : _b, _c = _a.maxSize, maxSizeFromConfig = _c === void 0 ? "default" : _c;
var minSizeInPixel = geoChart_1.PUSHPIN_SIZE_OPTIONS_MAP.min[minSizeFromConfig];
var maxSizeInPixel = geoChart_1.PUSHPIN_SIZE_OPTIONS_MAP.max[maxSizeFromConfig];
return ((dataValue - minSize) * (maxSizeInPixel - minSizeInPixel)) / (maxSize - minSize) + minSizeInPixel;
};
exports.createPushpinDataSource = function (dataSourceProps) {
var hasClustering = dataSourceProps.hasClustering;
var source = {
type: "geojson",
data: {
type: "FeatureCollection",
features: transformPushpinDataSource(dataSourceProps),
},
};
if (hasClustering) {
return __assign({}, source, { cluster: true, clusterMaxZoom: geoChart_1.DEFAULT_CLUSTER_MAX_ZOOM, clusterRadius: geoChart_1.DEFAULT_CLUSTER_RADIUS });
}
return source;
};
//# sourceMappingURL=geoChartDataSource.js.map