blank map window after login/logout
Closed this issue · 4 comments
With the latest version of qwc2, the map window shows blank page after login and log out and the background switcher button disappears. I can reproduce this with the qwc demo app (docker) and the latest image for the demo app. With login and logout the theme parameter disappears from the url.
login call:
http://127.0.0.1:8088/auth/login?url=http%3A%2F%2F127.0.0.1%3A8088%2F%3Ft%3Dqwc_demo%26l%3Dedit_points%252Cedit_lines%252Cedit_polygons%252Cgeographic_lines%252Ccountry_names%252Cstates_provinces%252Ccountries%26bl%3Dmapnik%26c%3D1000000%252C6000000%26s%3D25000000
url after login:
http://127.0.0.1:8088/?c=1000000%2C6000000&s=25000000
I get following error in the browser:
TypeError: Cannot convert undefined or null to object
at Function.keys (<anonymous>)
at l (LayerUtils.js:64:31)
at Object.restoreOrderedLayerParams (LayerUtils.js:55:9)
at To (ServiceLayerUtils.js:328:97)
at ThemeUtils.js:39:36
at redux-thunk.mjs:3:25
at n.<computed> [as setCurrentTheme] (XMLText.js:61:51)
at ThemeUtils.js:225:1
at b (PermaLinkUtils.js:106:10)
at ThemeUtils.js:200:46
I have tracked the problem to this commit: qgis/qwc2@9faa1bf
The map loads as expected, when I disable the if statement:
if (!entry.sublayer.style) {
entry.sublayer.style = Object.keys(entry.sublayer.styles)[0];
}
In restoreOrderedLayerParams https://github.com/qgis/qwc2/blob/3244e1ae20500517d98f9310830fabea2028f393/utils/LayerUtils.js#L51
restoreOrderedLayerParams(themeLayer, layerConfigs, permalinkLayers, externalLayers) {
const exploded = LayerUtils.explodeLayers([themeLayer]);
let reordered = [];
// Iterate over layer configs and reorder items accordingly, create external layer placeholders as neccessary
for (const layerConfig of layerConfigs) {
if (layerConfig.type === 'theme') {
const entry = exploded.find(e => e.sublayer.name === layerConfig.name);
if (entry) {
entry.sublayer.opacity = layerConfig.opacity;
entry.sublayer.visibility = layerConfig.visibility || layerConfig.tristate;
entry.sublayer.tristate = layerConfig.tristate;
entry.sublayer.style = layerConfig.style;
if (!entry.sublayer.style) {
entry.sublayer.style = Object.keys(entry.sublayer.styles)[0];
}
reordered.push(entry);
}
} else if (layerConfig.type === 'separator') {
reordered = reordered.concat(LayerUtils.createSeparatorLayer(layerConfig.name));
} else {
reordered = reordered.concat(LayerUtils.createExternalLayerPlaceholder(layerConfig, externalLayers, layerConfig.id));
}
Same code is also used in restoreLayerParams https://github.com/qgis/qwc2/blob/3244e1ae20500517d98f9310830fabea2028f393/utils/LayerUtils.js#L29
Thanks, fixed in [1]
Thanks @manisandro
But I think my problem is in restoreOrderedLayerParams Line 64 https://github.com/qgis/qwc2/blob/3244e1ae20500517d98f9310830fabea2028f393/utils/LayerUtils.js#L64 where the same code is used
Right, fixed as well. Thanks
Great thank you!