You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rsvp-reader/components/rsvp-component.js

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
}
}