@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
48 lines (47 loc) • 1.58 kB
JavaScript
export default class ActiveBasemapsSerializer {
context;
constructor(context) {
this.context = context;
}
get state() {
return this.context.stateManager.state;
}
get preferNames() {
return this.context.configManager.Config.share?.preferNames ?? false;
}
brainSerialize(activeBasemaps) {
return this.serialize(activeBasemaps);
}
brainDeserialize(serializedString) {
this.state.activeBasemaps = this.deserialize(serializedString);
}
serialize(basemaps) {
const sharedBasemaps = [];
for (const basemap of basemaps) {
const sharedBasemap = {
id: basemap.id,
name: basemap.name,
opacity: basemap.opacity
};
sharedBasemaps.push(sharedBasemap);
}
return JSON.stringify(sharedBasemaps);
}
deserialize(str) {
const sharedBasemaps = JSON.parse(str);
const basemaps = [];
for (const sharedBasemap of sharedBasemaps) {
const basemap = this.preferNames
? Object.values(this.state.basemaps).find((b) => b.name === sharedBasemap.name)
: Object.values(this.state.basemaps).find((b) => b.id === sharedBasemap.id);
if (basemap) {
basemap.opacity = sharedBasemap.opacity;
basemaps.push(basemap);
}
else {
console.error(`The basemap ${sharedBasemap.name} could not be deserialized`);
}
}
return basemaps;
}
}