UNPKG

@latitude-data/webcomponents

Version:
94 lines (90 loc) 3.19 kB
import { r as registerInstance, c as createEvent, g as getElement, h } from './index-3bad40ab.js'; const latitudeEmbedCss = ":host{display:block;height:100%}iframe{width:100%;height:100%;border:none}"; const LatitudeEmbedStyle0 = latitudeEmbedCss; const LatitudeEmbed = class { constructor(hostRef) { registerInstance(this, hostRef); this.paramsChanged = createEvent(this, "paramsChanged", 7); this.url = undefined; this.params = undefined; this.signedParams = undefined; this.iframeSrc = undefined; this.queryOrigin = undefined; } get rootEl() { return getElement(this); } paramsChanged; componentWillLoad() { this.buildIframeData(); } componentDidLoad() { window.addEventListener('message', this.handleMessage); } disconnectedCallback() { window.removeEventListener('message', this.handleMessage); } queryChanged() { // We don't want to re-render the iframe every time the // params change. We only want to re-render the iframe // when the query or signupParam change. this.buildIframeData(); } signedParamsChanged() { // We don't want to re-render the iframe every time the // params change. We only want to re-render the iframe // when the query or signupParam change. this.buildIframeData(); } runHandler(event) { this.iframe.contentWindow.postMessage(event.detail, { targetOrigin: this.queryOrigin, }); } paramsChangedHander(event) { this.iframe.contentWindow.postMessage(event.detail, { targetOrigin: this.queryOrigin, }); } customEventHander(event) { this.iframe.contentWindow.postMessage(event.detail, { targetOrigin: this.queryOrigin, }); } get iframe() { return this.rootEl.shadowRoot.querySelector('iframe'); } buildIframeData() { const queryParams = this.params ?? {}; const params = this.signedParams ? { __token: this.signedParams, ...queryParams } : queryParams; const urlParams = new URLSearchParams(params); this.iframeSrc = this.url ? `${this.url}?${urlParams.toString()}` : null; this.queryOrigin = this.buildQueryOrigin(); } buildQueryOrigin() { if (!this.url) return ''; const url = new URL(this.url); return url.origin; } handleMessage = (event) => { if (event.source !== this.iframe.contentWindow) return; const type = event.data.type; switch (type) { case 'latitude-params-changed': this.paramsChanged.emit(event.data); break; } }; render() { return h("iframe", { key: '0ce56ba38a829af7c0af97266034ddd1f85cc409', src: this.iframeSrc }); } static get watchers() { return { "url": ["queryChanged"], "signedParams": ["signedParamsChanged"] }; } }; LatitudeEmbed.style = LatitudeEmbedStyle0; export { LatitudeEmbed as latitude_embed }; //# sourceMappingURL=latitude-embed.entry.js.map