analytics/assets/js/liveview/hook_builder.js

54 lines
944 B
JavaScript

export function buildHook({ initialize, cleanup }) {
cleanup = cleanup || function () {}
return {
mounted() {
this.initialize()
},
updated() {
this.initialize()
},
reconnected() {
this.initialize()
},
destroyed() {
this.cleanup()
},
initialize() {
this.cleanup()
initialize.bind(this)()
},
cleanup() {
this.removeListeners()
cleanup.bind(this)()
},
addListener(eventName, listener, callback) {
this.listeners = this.listeners || []
listener.addEventListener(eventName, callback)
this.listeners.push({
element: listener,
event: eventName,
callback: callback
})
},
removeListeners() {
if (this.listeners) {
this.listeners.forEach((l) => {
l.element.removeEventListener(l.event, l.callback)
})
this.listeners = null
}
}
}
}