@latitude-data/webcomponents
Version:
Web Components for Latitude
94 lines (90 loc) • 3.19 kB
JavaScript
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