From e24173eb9fab73afcc97f858bfb13f9ce4f89819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Tue, 7 May 2024 14:46:01 +0200 Subject: [PATCH] fix(sync): Keep features IDs for Polygons and Lines It wasn't passed previously, so objects where duplicated. --- umap/static/umap/js/modules/sync/updaters.js | 10 ++++---- umap/static/umap/js/umap.layer.js | 24 ++++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/umap/static/umap/js/modules/sync/updaters.js b/umap/static/umap/js/modules/sync/updaters.js index f3cce6d0..3f7bdd60 100644 --- a/umap/static/umap/js/modules/sync/updaters.js +++ b/umap/static/umap/js/modules/sync/updaters.js @@ -26,7 +26,7 @@ class BaseUpdater { } } - getLayerFromID(layerId) { + getDataLayerFromID(layerId) { if (layerId) return this.map.getDataLayerByUmapId(layerId) return this.map.defaultEditDataLayer() } @@ -47,7 +47,7 @@ export class MapUpdater extends BaseUpdater { export class DataLayerUpdater extends BaseUpdater { update({ key, metadata, value }) { - const datalayer = this.getLayerFromID(metadata.id) + const datalayer = this.getDataLayerFromID(metadata.id) console.log('datalayer', datalayer, key, value) this.updateObjectValue(datalayer, key, value) datalayer.render([key]) @@ -64,7 +64,7 @@ export class DataLayerUpdater extends BaseUpdater { **/ class FeatureUpdater extends BaseUpdater { getFeatureFromMetadata({ id, layerId }) { - const datalayer = this.getLayerFromID(layerId) + const datalayer = this.getDataLayerFromID(layerId) return datalayer.getFeatureById(id) } @@ -78,7 +78,7 @@ class FeatureUpdater extends BaseUpdater { upsert({ metadata, value }) { let { id, layerId } = metadata - const datalayer = this.getLayerFromID(layerId) + const datalayer = this.getDataLayerFromID(layerId) let feature = this.getFeatureFromMetadata(metadata, value) feature = datalayer.geometryToFeature({ geometry: value.geometry, id, feature }) feature.addTo(datalayer) @@ -89,7 +89,7 @@ class FeatureUpdater extends BaseUpdater { switch (key) { case 'geometry': - const datalayer = this.getLayerFromID(metadata.layerId) + const datalayer = this.getDataLayerFromID(metadata.layerId) datalayer.geometryToFeature({ geometry: value, id: metadata.id, feature }) default: this.updateObjectValue(feature, key, value) diff --git a/umap/static/umap/js/umap.layer.js b/umap/static/umap/js/umap.layer.js index b9ad5d54..8abfadfe 100644 --- a/umap/static/umap/js/umap.layer.js +++ b/umap/static/umap/js/umap.layer.js @@ -1119,20 +1119,25 @@ U.DataLayer = L.Evented.extend({ return new U.Marker(this.map, latlng, { geojson: geojson, datalayer: this }, id) }, - _lineToLayer: function (geojson, latlngs) { - return new U.Polyline(this.map, latlngs, { - geojson: geojson, - datalayer: this, - color: null, - }) + _lineToLayer: function (geojson, latlngs, id) { + return new U.Polyline( + this.map, + latlngs, + { + geojson: geojson, + datalayer: this, + color: null, + }, + id + ) }, - _polygonToLayer: function (geojson, latlngs) { + _polygonToLayer: function (geojson, latlngs, id) { // Ensure no empty hole // for (let i = latlngs.length - 1; i > 0; i--) { // if (!latlngs.slice()[i].length) latlngs.splice(i, 1); // } - return new U.Polygon(this.map, latlngs, { geojson: geojson, datalayer: this }) + return new U.Polygon(this.map, latlngs, { geojson: geojson, datalayer: this }, id) }, importRaw: function (raw, type) { @@ -1592,9 +1597,10 @@ U.DataLayer = L.Evented.extend({ // TODO Add an index // For now, iterate on all the features. getFeatureById: function (id) { + console.log('looking for feature with id ', id) for (const i in this._layers) { let feature = this._layers[i] - if (feature.id == id) { + if (feature.id === id) { return feature } }