@mapbox/react-map-gl
Version:
A React wrapper for MapboxGL-js and overlay API.
64 lines (51 loc) • 1.73 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
// Prepare a map style object for diffing
// If immutable - convert to plain object
// Work around some issues in the styles that would fail Mapbox's diffing
export function normalizeStyle(style) {
if (!style) {
return null;
}
if (typeof style === 'string') {
return style;
}
if (style.toJS) {
style = style.toJS();
}
var layerIndex = style.layers.reduce(function (accum, current) {
return Object.assign(accum, _defineProperty({}, current.id, current));
}, {});
style.layers = style.layers.map(function (layer) {
layer = Object.assign({}, layer); // Breaks style diffing :(
delete layer.interactive;
var layerRef = layerIndex[layer.ref]; // Style diffing doesn't work with refs so expand them out manually before diffing.
if (layerRef) {
delete layer.ref;
if (layerRef.type !== undefined) {
layer.type = layerRef.type;
}
if (layerRef.source !== undefined) {
layer.source = layerRef.source;
}
if (layerRef['source-layer'] !== undefined) {
layer['source-layer'] = layerRef['source-layer'];
}
if (layerRef.minzoom !== undefined) {
layer.minzoom = layerRef.minzoom;
}
if (layerRef.maxzoom !== undefined) {
layer.maxzoom = layerRef.maxzoom;
}
if (layerRef.filter !== undefined) {
layer.filter = layerRef.filter;
}
if (layerRef.layout !== undefined) {
layer.layout = layer.layout || {};
layer.layout = Object.assign({}, layer.layout, layerRef.layout);
}
}
return layer;
});
return style;
}
//# sourceMappingURL=style-utils.js.map