44 lines
966 B
JavaScript
44 lines
966 B
JavaScript
import { RSVPProvider } from './rsvp-provider.js'
|
|
|
|
export class RSVPComponent extends HTMLElement {
|
|
constructor() {
|
|
super()
|
|
this._root = this.attachShadow({ mode: 'open' })
|
|
const provider = this.findProvider()
|
|
provider.addObserver(this)
|
|
}
|
|
|
|
connectedCallback() {}
|
|
|
|
render() {}
|
|
|
|
update(state) {}
|
|
|
|
fireEvent(action, payload) {
|
|
let evt = new CustomEvent('rsvp-event', {
|
|
bubbles: true,
|
|
composed: true,
|
|
detail: { action, payload }
|
|
})
|
|
this.dispatchEvent(evt)
|
|
}
|
|
|
|
/**
|
|
* Traverses tree upwards until a RSVPProvider node is found
|
|
* Returns the closest provider or null if none is existent
|
|
*/
|
|
findProvider() {
|
|
let curNode = this
|
|
while (curNode.parentNode) {
|
|
curNode = curNode.parentNode
|
|
if (curNode.host) {
|
|
curNode = curNode.host
|
|
}
|
|
if (curNode instanceof RSVPProvider) {
|
|
break
|
|
}
|
|
}
|
|
return curNode instanceof RSVPProvider ? curNode : null
|
|
}
|
|
}
|