mirror of
https://github.com/a-nyx/maputnik-with-pmtiles.git
synced 2025-03-26 18:30:27 +01:00
67 lines
1.5 KiB
JavaScript
67 lines
1.5 KiB
JavaScript
import styleSpec from '@mapbox/mapbox-gl-style-spec/style-spec'
|
|
|
|
export function changeType(layer, newType) {
|
|
const changedPaintProps = { ...layer.paint }
|
|
Object.keys(changedPaintProps).forEach(propertyName => {
|
|
if(!(propertyName in styleSpec.latest['paint_' + newType])) {
|
|
delete changedPaintProps[propertyName]
|
|
}
|
|
})
|
|
|
|
const changedLayoutProps = { ...layer.layout }
|
|
Object.keys(changedLayoutProps).forEach(propertyName => {
|
|
if(!(propertyName in styleSpec.latest['layout_' + newType])) {
|
|
delete changedLayoutProps[propertyName]
|
|
}
|
|
})
|
|
|
|
return {
|
|
...layer,
|
|
paint: changedPaintProps,
|
|
layout: changedLayoutProps,
|
|
type: newType,
|
|
}
|
|
}
|
|
|
|
/** A {@property} in either the paint our layout {@group} has changed
|
|
* to a {@newValue}.
|
|
*/
|
|
export function changeProperty(layer, group, property, newValue) {
|
|
// Remove the property if undefined
|
|
if(newValue === undefined) {
|
|
if(group) {
|
|
const newLayer = {
|
|
...layer
|
|
};
|
|
delete newLayer[group][property];
|
|
|
|
// Remove the group if it is now empty
|
|
if(Object.keys(newLayer[group]).length < 1) {
|
|
delete newLayer[group];
|
|
}
|
|
return newLayer;
|
|
} else {
|
|
const newLayer = {
|
|
...layer
|
|
};
|
|
delete newLayer[property];
|
|
return newLayer;
|
|
}
|
|
}
|
|
else {
|
|
if(group) {
|
|
return {
|
|
...layer,
|
|
[group]: {
|
|
...layer[group],
|
|
[property]: newValue
|
|
}
|
|
}
|
|
} else {
|
|
return {
|
|
...layer,
|
|
[property]: newValue
|
|
}
|
|
}
|
|
}
|
|
}
|