UNPKG

@gooddata/react-components

Version:

GoodData.UI - A powerful JavaScript library for building analytical applications

108 lines 5.06 kB
"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