@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
51 lines (50 loc) • 1.85 kB
JavaScript
import { deserializeWfsFilter, serializeWfsFilter } from './wfsfilterserializer.js';
export default class SelectionSerializer {
context;
constructor(context) {
this.context = context;
}
get state() {
return this.context.stateManager.state;
}
brainSerialize(selection) {
if (selection.selectionParameters.length > 0) {
// Note: Currently only the first selection parameter is serialized
return JSON.stringify(this.getSerializedSelectionParameter(selection.selectionParameters[0]));
}
return '';
}
brainDeserialize(str) {
if (str.trim().length > 0) {
const shareState = JSON.parse(str);
if (shareState.selectionQuery) {
this.state.selection.initialSelectionQuery = this.getDeserializedSelectionQuery(shareState);
}
else if (shareState.selectionBox) {
this.state.selection.initialSelectionBox = shareState.selectionBox;
}
}
}
getSerializedSelectionParameter(selectionParam) {
let serializedSelectionQuery = undefined;
if (selectionParam.selectionQuery) {
serializedSelectionQuery = {
query: serializeWfsFilter(selectionParam.selectionQuery),
layerName: selectionParam.layers[0].name
};
}
return {
selectionBox: selectionParam.selectionBox ?? undefined,
selectionQuery: serializedSelectionQuery
};
}
getDeserializedSelectionQuery(sharedSelection) {
if (!sharedSelection.selectionQuery) {
return undefined;
}
return {
query: deserializeWfsFilter(sharedSelection.selectionQuery.query),
layerName: sharedSelection.selectionQuery?.layerName
};
}
}