Fix for updating available sources when updating style.

This commit is contained in:
orangemug 2020-05-19 10:24:59 +01:00
parent e3e6647e03
commit 0aa629164a

View file

@ -440,9 +440,10 @@ export default class App extends React.Component {
mapStyle: newStyle, mapStyle: newStyle,
dirtyMapStyle: dirtyMapStyle, dirtyMapStyle: dirtyMapStyle,
errors: mappedErrors, errors: mappedErrors,
}, () => {
this.fetchSources();
}) })
this.fetchSources();
} }
onUndo = () => { onUndo = () => {
@ -566,19 +567,19 @@ export default class App extends React.Component {
} }
fetchSources() { fetchSources() {
const sourceList = {...this.state.sources}; const sourceList = {};
for(let [key, val] of Object.entries(this.state.mapStyle.sources)) { for(let [key, val] of Object.entries(this.state.mapStyle.sources)) {
if(sourceList.hasOwnProperty(key)) { if(
continue; !this.state.sources.hasOwnProperty(key) &&
} val.type === "vector" &&
val.hasOwnProperty("url")
) {
sourceList[key] = { sourceList[key] = {
type: val.type, type: val.type,
layers: [] layers: []
}; };
if(!this.state.sources.hasOwnProperty(key) && val.type === "vector" && val.hasOwnProperty("url")) {
let url = val.url; let url = val.url;
try { try {
url = normalizeSourceURL(url, MapboxGl.accessToken); url = normalizeSourceURL(url, MapboxGl.accessToken);
@ -595,16 +596,17 @@ export default class App extends React.Component {
fetch(url, { fetch(url, {
mode: 'cors', mode: 'cors',
}) })
.then((response) => { .then(response => response.json())
return response.json(); .then(json => {
})
.then((json) => {
if(!json.hasOwnProperty("vector_layers")) { if(!json.hasOwnProperty("vector_layers")) {
return; return;
} }
// Create new objects before setState // Create new objects before setState
const sources = Object.assign({}, this.state.sources); const sources = Object.assign({}, {
[key]: this.state.sources[key],
});
for(let layer of json.vector_layers) { for(let layer of json.vector_layers) {
sources[key].layers.push(layer.id) sources[key].layers.push(layer.id)
@ -615,9 +617,12 @@ export default class App extends React.Component {
sources: sources sources: sources
}); });
}) })
.catch((err) => { .catch(err => {
console.error("Failed to process sources for '%s'", url, err); console.error("Failed to process sources for '%s'", url, err);
}) });
}
else {
sourceList[key] = this.state.sources[key] || this.state.mapStyle.sources[key];
} }
} }