Skip to content

Commit

Permalink
wip(forms): use events instead of callback
Browse files Browse the repository at this point in the history
  • Loading branch information
yohanboniface committed Jan 9, 2025
1 parent fb4fecd commit 0ba69e4
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 52 deletions.
10 changes: 4 additions & 6 deletions umap/static/umap/js/modules/browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -180,19 +180,17 @@ export default class Browser {
],
['options.inBbox', { handler: 'Switch', label: translate('Current map view') }],
]
const builder = new Form(this, fields, {
callback: () => this.onFormChange(),
})
const builder = new Form(this, fields)
builder.on('set', () => this.onFormChange())
let filtersBuilder
this.formContainer.appendChild(builder.build())
DomEvent.on(builder.form, 'reset', () => {
window.setTimeout(builder.syncAll.bind(builder))
})
if (this._umap.properties.facetKey) {
fields = this._umap.facets.build()
filtersBuilder = new Form(this._umap.facets, fields, {
callback: () => this.onFormChange(),
})
filtersBuilder = new Form(this._umap.facets, fields)
filtersBuilder.on('set', () => this.onFormChange())
DomEvent.on(filtersBuilder.form, 'reset', () => {
window.setTimeout(filtersBuilder.syncAll.bind(filtersBuilder))
})
Expand Down
33 changes: 14 additions & 19 deletions umap/static/umap/js/modules/data/features.js
Original file line number Diff line number Diff line change
Expand Up @@ -226,15 +226,11 @@ class Feature {
`icon-${this.getClassName()}`
)

let builder = new MutatingForm(
this,
[['datalayer', { handler: 'DataLayerSwitcher' }]],
{
callback() {
this.edit(event)
}, // removeLayer step will close the edit panel, let's reopen it
}
)
let builder = new MutatingForm(this, [
['datalayer', { handler: 'DataLayerSwitcher' }],
])
// removeLayer step will close the edit panel, let's reopen it
builder.on('set', () => this.edit(event))
container.appendChild(builder.build())

const properties = []
Expand Down Expand Up @@ -734,16 +730,15 @@ export class Point extends Feature {
['ui._latlng.lat', { handler: 'FloatInput', label: translate('Latitude') }],
['ui._latlng.lng', { handler: 'FloatInput', label: translate('Longitude') }],
]
const builder = new MutatingForm(this, coordinatesOptions, {
callback: () => {
if (!this.ui._latlng.isValid()) {
Alert.error(translate('Invalid latitude or longitude'))
builder.restoreField('ui._latlng.lat')
builder.restoreField('ui._latlng.lng')
}
this.pullGeometry()
this.zoomTo({ easing: false })
},
const builder = new MutatingForm(this, coordinatesOptions)
builder.on('set', () => {
if (!this.ui._latlng.isValid()) {
Alert.error(translate('Invalid latitude or longitude'))
builder.restoreField('ui._latlng.lat')
builder.restoreField('ui._latlng.lng')
}
this.pullGeometry()
this.zoomTo({ easing: false })
})
const fieldset = DomUtil.createFieldset(container, translate('Coordinates'))
fieldset.appendChild(builder.build())
Expand Down
14 changes: 6 additions & 8 deletions umap/static/umap/js/modules/data/layer.js
Original file line number Diff line number Diff line change
Expand Up @@ -667,14 +667,12 @@ export class DataLayer extends ServerStored {
],
]
DomUtil.createTitle(container, translate('Layer properties'), 'icon-layers')
let builder = new MutatingForm(this, metadataFields, {
callback: (helper) => {
console.log(helper)
this._umap.onDataLayersChanged()
if (helper.field === 'options.type') {
this.edit()
}
},
let builder = new MutatingForm(this, metadataFields)
builder.on('set', (helper) => {
this._umap.onDataLayersChanged()
if (helper.field === 'options.type') {
this.edit()
}
})
container.appendChild(builder.build())

Expand Down
3 changes: 2 additions & 1 deletion umap/static/umap/js/modules/form/builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ import * as Utils from '../utils.js'
import { SCHEMA } from '../schema.js'
import { translate } from '../i18n.js'

export class Form {
export class Form extends Utils.WithEvents {
constructor(obj, fields, properties) {
super()
this.setProperties(properties)
this.defaultProperties = {}
this.obj = obj
Expand Down
9 changes: 1 addition & 8 deletions umap/static/umap/js/modules/form/fields.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class BaseElement {

sync() {
this.set()
this.onPostSync()
this.builder.fire('set', this)
}

set() {
Expand All @@ -116,13 +116,6 @@ class BaseElement {

finish() {}

onPostSync() {
if (this.properties.callback) {
this.properties.callback(this)
}
this.builder.onPostSync(this)
}

undefine() {
this.root.classList.add('undefined')
this.clear()
Expand Down
5 changes: 2 additions & 3 deletions umap/static/umap/js/modules/share.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,8 @@ export default class Share {
exportUrl.value = window.location.protocol + iframeExporter.buildUrl()
}
buildIframeCode()
const builder = new MutatingForm(iframeExporter, UIFields, {
callback: buildIframeCode,
})
const builder = new MutatingForm(iframeExporter, UIFields)
builder.on('set', buildIframeCode)
const iframeOptions = DomUtil.createFieldset(
this.container,
translate('Embed and link options')
Expand Down
11 changes: 4 additions & 7 deletions umap/static/umap/js/modules/umap.js
Original file line number Diff line number Diff line change
Expand Up @@ -1029,13 +1029,6 @@ export default class Umap extends ServerStored {
],
]
const slideshowBuilder = new MutatingForm(this, slideshowFields, {
callback: () => {
this.slideshow.load()
// FIXME when we refactor formbuilder: this callback is called in a 'postsync'
// event, which comes after the call of `setter` method, which will call the
// map.render method, which should do this redraw.
this.bottomBar.redraw()
},
umap: this,
})
slideshow.appendChild(slideshowBuilder.build())
Expand Down Expand Up @@ -1351,6 +1344,10 @@ export default class Umap extends ServerStored {
}
this.topBar.redraw()
},
'properties.slideshow.active': () => {
this.slideshow.load()
this.bottomBar.redraw()
},
numberOfConnectedPeers: () => {
Utils.eachElement('.connected-peers span', (el) => {
if (this.sync.websocketConnected) {
Expand Down
23 changes: 23 additions & 0 deletions umap/static/umap/js/modules/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,29 @@ export function eachElement(selector, callback) {
}
}

export class WithEvents {
constructor() {
this._callbacks = {}
}

on(eventType, callback) {
if (typeof callback !== 'function') return
if (this._callbacks[eventType] === undefined) {
this._callbacks[eventType] = []
}

this._callbacks[eventType].push(callback)
}

fire(eventType, ...args) {
if (this._callbacks[eventType] === undefined) return

for (const callback of this._callbacks[eventType]) {
callback(...args)
}
}
}

export const COLORS = [
'Black',
'Navy',
Expand Down

0 comments on commit 0ba69e4

Please sign in to comment.