@impargo/react-here-maps
Version:
React.js HERE Maps component
91 lines • 8.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultClusteringOptions = void 0;
var react_1 = require("react");
var context_1 = require("./context");
var get_marker_icon_1 = __importDefault(require("./utils/get-marker-icon"));
exports.defaultClusteringOptions = {
/**
* Maximum radius of the neighborhood.
*/
eps: 32,
/**
* Minimum weight of points required to form a cluster (default weight for a cluster point is 1).
*/
minWeight: 2,
};
function createTheme(getBitmapForCluster, getBitmapForPoint) {
return {
getClusterPresentation: function (cluster) {
var clusterPoints = [];
cluster.forEachDataPoint(function (point) { return clusterPoints.push(point.getData()); });
return new H.map.Marker(cluster.getPosition(), {
data: clusterPoints,
icon: (0, get_marker_icon_1.default)(getBitmapForCluster(clusterPoints)),
max: cluster.getMaxZoom(),
min: cluster.getMinZoom(),
});
},
getNoisePresentation: function (point) {
var data = point.getData();
return new H.map.Marker(point.getPosition(), {
data: data,
icon: (0, get_marker_icon_1.default)(getBitmapForPoint(data)),
min: point.getMinZoom(),
});
},
};
}
function pointToDatapoint(point) {
return new H.clustering.DataPoint(point.lat, point.lng, null, point.data);
}
/**
* A component that can automatically cluster a group of datapoints.
*/
function Cluster(_a) {
var points = _a.points, _b = _a.clusteringOptions, clusteringOptions = _b === void 0 ? exports.defaultClusteringOptions : _b, getBitmapForCluster = _a.getBitmapForCluster, getBitmapForPoint = _a.getBitmapForPoint, onClusterClick = _a.onClusterClick, onPointClick = _a.onPointClick;
var map = (0, react_1.useContext)(context_1.HEREMapContext).map;
var onClusterClickRef = (0, react_1.useRef)(onClusterClick);
onClusterClickRef.current = onClusterClick;
var onPointClickRef = (0, react_1.useRef)(onPointClick);
onPointClickRef.current = onPointClick;
var theme = (0, react_1.useMemo)(function () { return createTheme(getBitmapForCluster, getBitmapForPoint); }, [getBitmapForCluster, getBitmapForPoint]);
var datapoints = (0, react_1.useMemo)(function () { return points.map(pointToDatapoint); }, [points]);
var onClick = (0, react_1.useCallback)(function (evt) {
var e = evt;
var data = e.target.getData();
if (Array.isArray(data)) {
onClusterClickRef.current(data, e);
}
else {
onPointClickRef.current(data, e);
}
}, []);
var clusteredDataProvider = (0, react_1.useMemo)(function () {
var provider = new H.clustering.Provider(datapoints, {
clusteringOptions: clusteringOptions,
theme: theme,
});
provider.addEventListener('tap', onClick);
return provider;
}, [clusteringOptions, onClick]);
(0, react_1.useEffect)(function () {
clusteredDataProvider.setTheme(theme);
}, [theme, clusteredDataProvider]);
(0, react_1.useEffect)(function () {
clusteredDataProvider.setDataPoints(datapoints);
}, [datapoints, clusteredDataProvider]);
(0, react_1.useEffect)(function () {
var layer = new H.map.layer.ObjectLayer(clusteredDataProvider);
map === null || map === void 0 ? void 0 : map.addLayer(layer);
return function () {
map === null || map === void 0 ? void 0 : map.removeLayer(layer);
};
}, [map, clusteredDataProvider]);
return null;
}
exports.default = Cluster;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2x1c3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DbHVzdGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwrQkFBMkU7QUFFM0UscUNBQTBDO0FBQzFDLDRFQUFtRDtBQTRDdEMsUUFBQSx3QkFBd0IsR0FBNEM7SUFDL0U7O09BRUc7SUFDSCxHQUFHLEVBQUUsRUFBRTtJQUNQOztPQUVHO0lBQ0gsU0FBUyxFQUFFLENBQUM7Q0FDYixDQUFBO0FBRUQsU0FBUyxXQUFXLENBQ2xCLG1CQUE0QyxFQUM1QyxpQkFBdUM7SUFFdkMsT0FBTztRQUNMLHNCQUFzQixFQUFFLFVBQUMsT0FBTztZQUM5QixJQUFNLGFBQWEsR0FBUSxFQUFFLENBQUE7WUFDN0IsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQUMsS0FBSyxJQUFLLE9BQUEsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBbkMsQ0FBbUMsQ0FBQyxDQUFBO1lBQ3hFLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsSUFBQSx5QkFBYSxFQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN2RCxHQUFHLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDekIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7YUFDMUIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUNELG9CQUFvQixFQUFFLFVBQUMsS0FBSztZQUMxQixJQUFNLElBQUksR0FBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDL0IsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxNQUFBO2dCQUNKLElBQUksRUFB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