import "./parent-style.css"; let isIframeLoaded = false; const parentHostRoot = (document.querySelector("#chatterbox-script") as HTMLScriptElement).src; const parentHosRootURL = new URL(parentHostRoot); const hostRoot = `${parentHosRootURL.protocol}${parentHosRootURL.host}`; const sizeCollection = { "desktop": { "account-setup": { height: "110px", width: "360px" }, "timeline": {height: "600px", width: "375px"} }, "mobile": { "account-setup": { height: "100vh", width: "100vw" }, "timeline": {height: "100vh", width: "100vw"} } } window.addEventListener("message", event => { const { action } = event.data; switch (action) { case "resize-iframe": resizeIframe(event.data); break; case "minimize": minimizeIframe(); break; } }); function isMobile() { return window.innerWidth <= 800 && window.innerHeight <= 930; } function renderStartButton() { loadCSS(); const container = document.createElement("div"); container.className = "start"; const button = document.createElement("button"); button.className = "StartChat"; button.onclick = () => isIframeLoaded? minimizeIframe() : loadChatterboxIframe(); container.appendChild(button); document.body.appendChild(container); } function loadCSS() { const linkElement = document.createElement("link") as HTMLLinkElement; linkElement.rel = "stylesheet"; linkElement.href = new URL("CSS_FILE_NAME", parentHostRoot).href; document.head.appendChild(linkElement); } function loadChatterboxIframe() { const iframe = document.createElement("iframe"); const configLocation = (window as any).CONFIG_LOCATION; if (!configLocation) { throw new Error("CONFIG_LOCATION is not set"); } iframe.src = new URL("../chatterbox.html?config=" + configLocation, hostRoot).href; iframe.className = "chatterbox-iframe"; document.body.appendChild(iframe); isIframeLoaded = true; if (isMobile()) { (document.querySelector(".start") as HTMLButtonElement).style.display = "none"; } } function minimizeIframe() { const iframeElement = document.querySelector(".chatterbox-iframe") as HTMLIFrameElement; const startButton = document.querySelector(".start") as HTMLButtonElement; if (iframeElement.style.display !== "none") { iframeElement.style.display = "none"; if (isMobile()) { startButton.style.display = "block"; } } else { iframeElement.style.display = "block"; if (isMobile()) { startButton.style.display = "none"; } } } function resizeIframe(data) { const { view } = data; const type = isMobile()? "mobile": "desktop"; const size = sizeCollection[type][view]; if (!size) { return; } const { height, width } = size; const iframeElement = document.querySelector(".chatterbox-iframe") as HTMLIFrameElement; if (height) { iframeElement.style.height = height; } if (width) { iframeElement.style.width = width; } } renderStartButton();