react-jotform
Version:
"A React component to embed the Jotform iframe"
151 lines (145 loc) • 6.08 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var createSource = function (src, defaults) {
var url = new URL(src);
if (defaults) {
for (var _i = 0, _a = Object.keys(defaults); _i < _a.length; _i++) {
var key = _a[_i];
url.searchParams.set(key, defaults[key].toString());
}
}
url.searchParams.set("isIframeEmbed", "1");
return url.toString();
};
var isPermitted = function (originUrl, whitelisted_domains) {
var url = document.createElement("a");
url.href = originUrl;
var hostname = url.hostname;
var result = false;
if (typeof hostname !== "undefined") {
whitelisted_domains.forEach(function (element) {
if (hostname.slice(-1 * element.length - 1) === ".".concat(element) ||
hostname === element) {
result = true;
}
});
return result;
}
return false;
};
var Jotform = function (_a) {
var src = _a.src, defaults = _a.defaults, title = _a.title, _b = _a.scrolling, scrolling = _b === void 0 ? false : _b, className = _a.className, _c = _a.style, style = _c === void 0 ? {
minWidth: "100%",
height: "539px",
border: "none",
} : _c;
var iframeRef = React.useRef(null);
var handleIframeMessage = function (event) {
var _a;
if (typeof event.data === "object") {
return;
}
var args = event.data.split(":");
if (args.length > 2) {
var iframe = iframeRef.current;
if (!iframe) {
return;
}
switch (args[0]) {
case "scrollIntoView":
iframe.scrollIntoView();
break;
case "setHeight":
iframe.style.height = args[1] + "px";
break;
case "collapseErrorPage":
if (iframe.clientHeight > window.innerHeight) {
iframe.style.height = window.innerHeight + "px";
}
break;
case "reloadPage":
window.location.reload();
break;
case "loadScript":
if (!isPermitted(event.origin, ["jotform.com", "jotform.pro"])) {
break;
}
var source = args[1];
if (args.length > 3) {
source = args[1] + ":" + args[2];
}
var script = document.createElement("script");
script.src = source;
script.type = "text/javascript";
document.body.appendChild(script);
break;
case "exitFullscreen":
if (window.document.exitFullscreen) {
window.document.exitFullscreen();
}
// @ts-ignore
else if (window.document.mozCancelFullScreen) {
// @ts-ignore
window.document.mozCancelFullScreen();
}
// @ts-ignore
else if (window.document.mozCancelFullscreen) {
// @ts-ignore
window.document.mozCancelFullScreen();
}
// @ts-ignore
else if (window.document.webkitExitFullscreen) {
// @ts-ignore
window.document.webkitExitFullscreen();
}
// @ts-ignore
else if (window.document.msExitFullscreen) {
// @ts-ignore
window.document.msExitFullscreen();
}
break;
}
var isJotform = event.origin.indexOf("jotform") > -1;
if (isJotform && ((_a = iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage)) {
var urls = {
docurl: encodeURIComponent(document.URL),
referrer: encodeURIComponent(document.referrer),
};
iframe.contentWindow.postMessage(JSON.stringify({ type: "urls", value: urls }), "*");
}
}
};
React.useEffect(function () {
if (window) {
window.parent.scrollTo(0, 0);
if (window.addEventListener) {
window.addEventListener("message", handleIframeMessage, false);
}
// @ts-ignore
else if (window.attachEvent) {
// @ts-ignore
window.attachEvent("onmessage", handleIFrameMessage);
}
}
return function () {
if (window) {
window.parent.scrollTo(0, 0);
if (window.removeEventListener) {
window.removeEventListener("message", handleIframeMessage);
}
// @ts-ignore
else if (window.detachEvent) {
// @ts-ignore
window.detachEvent("onmessage", handleIFrameMessage);
}
}
};
}, []);
return (React__default["default"].createElement("iframe", { ref: iframeRef, title: title,
// @ts-ignore
allowtransparency: "true", allowFullScreen: true, allow: "geolocation; microphone; camera", src: createSource(src, defaults), frameBorder: "0", className: className, style: style, scrolling: scrolling ? "yes" : "no" }));
};
exports["default"] = Jotform;
//# sourceMappingURL=index.js.map