UNPKG

react-jotform

Version:

"A React component to embed the Jotform iframe"

151 lines (145 loc) 6.08 kB
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