import { html } from 'xtal-element/lib/html.js'; import { xc, PropAction, PropDef, PropDefMap, ReactiveSurface } from 'xtal-element/lib/XtalCore.js'; import { xp, XtalPattern } from 'xtal-element/lib/XtalPattern.js'; import { RxSuppl } from 'xtal-element/lib/RxSuppl.js'; import { DOMKeyPEA } from 'xtal-element/lib/DOMKeyPEA.js'; import('@power-elements/json-viewer/json-viewer.js'); const mainTemplate = html`
Event History
`; const refs = {jsonViewerElement:'', detailsElement: ''}; export const bindNewEvent = ({domCache, eventArchive}: SwagTagEventViewer) => [ {[refs.jsonViewerElement]: [{object:eventArchive}]} ]; export const appendToEventArchive = ({newEvent, self}: SwagTagEventViewer) => { console.log(newEvent); const aSelf = self as any; const safeEvent: any = {}; allowList.forEach(prop => { safeEvent[prop] = (newEvent)[prop]; }); if(self.eventArchive === undefined){ self.eventArchive = { eventHistory: [] }; } self.eventArchive.eventHistory.unshift(safeEvent); self.eventArchive = self.eventArchive; } const propActions = [ xp.manageMainTemplate, appendToEventArchive, bindNewEvent, xp.createShadow ] as PropAction[]; const allowList = ['detail', 'type', 'bubbles', 'cancelBubble', 'cancelable', 'composed', 'defaultPrevented', 'eventPhase', 'isTrusted', 'returnValue', 'timeStamp']; /** * @element event-viewer */ export class SwagTagEventViewer extends HTMLElement implements XtalPattern{ static is = 'swag-tag-event-viewer'; self = this; propActions = propActions; refs = refs; reactor = new RxSuppl(this, [ { rhsType: Array, ctor: DOMKeyPEA, } ]); domCache: any; mainTemplate = mainTemplate; clonedTemplate: DocumentFragment | undefined; connectedCallback(){ xc.hydrate(this, slicedPropDefs); } onPropChange(n: string, prop: PropDef, nv: any){ this.reactor.addToQueue(prop, nv); } newEvent: CustomEvent | undefined; eventArchive: any; } const obj: PropDef = { type: Object, async: true, stopReactionsIfFalsy: true, }; const propDefMap: PropDefMap = { ...xp.props, newEvent: obj, eventArchive: obj, } const slicedPropDefs = xc.getSlicedPropDefs(propDefMap); xc.letThereBeProps(SwagTagEventViewer, slicedPropDefs, 'onPropChange'); xc.define(SwagTagEventViewer);