fix(sync): Keep features IDs for Polygons and Lines

It wasn't passed previously, so objects where duplicated.
This commit is contained in:
Alexis Métaireau 2024-05-07 14:46:01 +02:00
parent c6ee25b906
commit e24173eb9f
2 changed files with 20 additions and 14 deletions

View file

@ -26,7 +26,7 @@ class BaseUpdater {
} }
} }
getLayerFromID(layerId) { getDataLayerFromID(layerId) {
if (layerId) return this.map.getDataLayerByUmapId(layerId) if (layerId) return this.map.getDataLayerByUmapId(layerId)
return this.map.defaultEditDataLayer() return this.map.defaultEditDataLayer()
} }
@ -47,7 +47,7 @@ export class MapUpdater extends BaseUpdater {
export class DataLayerUpdater extends BaseUpdater { export class DataLayerUpdater extends BaseUpdater {
update({ key, metadata, value }) { update({ key, metadata, value }) {
const datalayer = this.getLayerFromID(metadata.id) const datalayer = this.getDataLayerFromID(metadata.id)
console.log('datalayer', datalayer, key, value) console.log('datalayer', datalayer, key, value)
this.updateObjectValue(datalayer, key, value) this.updateObjectValue(datalayer, key, value)
datalayer.render([key]) datalayer.render([key])
@ -64,7 +64,7 @@ export class DataLayerUpdater extends BaseUpdater {
**/ **/
class FeatureUpdater extends BaseUpdater { class FeatureUpdater extends BaseUpdater {
getFeatureFromMetadata({ id, layerId }) { getFeatureFromMetadata({ id, layerId }) {
const datalayer = this.getLayerFromID(layerId) const datalayer = this.getDataLayerFromID(layerId)
return datalayer.getFeatureById(id) return datalayer.getFeatureById(id)
} }
@ -78,7 +78,7 @@ class FeatureUpdater extends BaseUpdater {
upsert({ metadata, value }) { upsert({ metadata, value }) {
let { id, layerId } = metadata let { id, layerId } = metadata
const datalayer = this.getLayerFromID(layerId) const datalayer = this.getDataLayerFromID(layerId)
let feature = this.getFeatureFromMetadata(metadata, value) let feature = this.getFeatureFromMetadata(metadata, value)
feature = datalayer.geometryToFeature({ geometry: value.geometry, id, feature }) feature = datalayer.geometryToFeature({ geometry: value.geometry, id, feature })
feature.addTo(datalayer) feature.addTo(datalayer)
@ -89,7 +89,7 @@ class FeatureUpdater extends BaseUpdater {
switch (key) { switch (key) {
case 'geometry': case 'geometry':
const datalayer = this.getLayerFromID(metadata.layerId) const datalayer = this.getDataLayerFromID(metadata.layerId)
datalayer.geometryToFeature({ geometry: value, id: metadata.id, feature }) datalayer.geometryToFeature({ geometry: value, id: metadata.id, feature })
default: default:
this.updateObjectValue(feature, key, value) this.updateObjectValue(feature, key, value)

View file

@ -1119,20 +1119,25 @@ U.DataLayer = L.Evented.extend({
return new U.Marker(this.map, latlng, { geojson: geojson, datalayer: this }, id) return new U.Marker(this.map, latlng, { geojson: geojson, datalayer: this }, id)
}, },
_lineToLayer: function (geojson, latlngs) { _lineToLayer: function (geojson, latlngs, id) {
return new U.Polyline(this.map, latlngs, { return new U.Polyline(
geojson: geojson, this.map,
datalayer: this, latlngs,
color: null, {
}) geojson: geojson,
datalayer: this,
color: null,
},
id
)
}, },
_polygonToLayer: function (geojson, latlngs) { _polygonToLayer: function (geojson, latlngs, id) {
// Ensure no empty hole // Ensure no empty hole
// for (let i = latlngs.length - 1; i > 0; i--) { // for (let i = latlngs.length - 1; i > 0; i--) {
// if (!latlngs.slice()[i].length) latlngs.splice(i, 1); // 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) { importRaw: function (raw, type) {
@ -1592,9 +1597,10 @@ U.DataLayer = L.Evented.extend({
// TODO Add an index // TODO Add an index
// For now, iterate on all the features. // For now, iterate on all the features.
getFeatureById: function (id) { getFeatureById: function (id) {
console.log('looking for feature with id ', id)
for (const i in this._layers) { for (const i in this._layers) {
let feature = this._layers[i] let feature = this._layers[i]
if (feature.id == id) { if (feature.id === id) {
return feature return feature
} }
} }