chore: refactor render and propagate to better target UI changes

This commit is contained in:
Yohan Boniface 2024-12-07 15:41:16 +01:00
parent bf2ed185db
commit f3c95bd13d
2 changed files with 12 additions and 15 deletions

View file

@ -55,7 +55,6 @@ export class DataLayerUpdater extends BaseUpdater {
upsert({ value }) { upsert({ value }) {
// Upsert only happens when a new datalayer is created. // Upsert only happens when a new datalayer is created.
this._umap.createDataLayer(value, false) this._umap.createDataLayer(value, false)
this._umap.render([])
} }
update({ key, metadata, value }) { update({ key, metadata, value }) {

View file

@ -1261,9 +1261,10 @@ export default class Umap extends ServerStored {
} }
} }
render(fields) { render(fields = []) {
const impacted = this.propagate(fields) // Propagate will remove the fields it has already
if (impacted) return // No need to run a wider reflow // processed
fields = this.propagate(fields)
const impacts = Utils.getImpactsFromSchema(fields) const impacts = Utils.getImpactsFromSchema(fields)
for (const impact of impacts) { for (const impact of impacts) {
@ -1327,14 +1328,13 @@ export default class Umap extends ServerStored {
}) })
}, },
} }
let impacted = false
for (const [field, impact] of Object.entries(impacts)) { for (const [field, impact] of Object.entries(impacts)) {
if (!fields.length || fields.includes(field)) { if (!fields.length || fields.includes(field)) {
impact() impact()
impacted = true fields = fields.filter((item) => item !== field)
} }
} }
return impacted return fields
} }
// TODO: allow to control the default datalayer // TODO: allow to control the default datalayer
@ -1537,7 +1537,6 @@ export default class Umap extends ServerStored {
importRaw(rawData) { importRaw(rawData) {
const importedData = JSON.parse(rawData) const importedData = JSON.parse(rawData)
const mustReindex = 'sortKey' in Object.keys(importedData.properties)
this.setProperties(importedData.properties) this.setProperties(importedData.properties)
@ -1554,13 +1553,12 @@ export default class Umap extends ServerStored {
dataLayer.fromUmapGeoJSON(geojson) dataLayer.fromUmapGeoJSON(geojson)
} }
// Do a whole render // For now render->propagate expect a `properties.` prefix.
this.render(['name', 'tilelayer', 'limitBounds']) // Remove this when we have refactored schema and render.
this.eachDataLayer((datalayer) => { const fields = Object.keys(importedData.properties).map(
if (mustReindex) datalayer.reindex() (field) => `properties.${field}`
datalayer.redraw() )
}) this.render(fields)
this.propagate()
this._leafletMap._setDefaultCenter() this._leafletMap._setDefaultCenter()
this.isDirty = true this.isDirty = true
} }