Skip to content
Snippets Groups Projects
parent.ts 3.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • Midhun Suresh's avatar
    Midhun Suresh committed
    import "./parent-style.css";
    
    Midhun Suresh's avatar
    Midhun Suresh committed
    let isIframeLoaded = false;
    
    Midhun Suresh's avatar
    Midhun Suresh committed
    const parentRootHost = (document.querySelector("#chatterbox-script") as HTMLScriptElement).src;
    const parentRootHostURL = new URL(parentRootHost);
    const rootHost = `${parentRootHostURL.protocol}${parentRootHostURL.host}`;
    
    Midhun Suresh's avatar
    Midhun Suresh committed
    
    const sizeCollection = {
        "desktop": {
    
            "account-setup": { height: "110px", width: "360px" },
            "timeline": {height: "600px", width: "375px"}
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        },
        "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);
    
    Midhun Suresh's avatar
    Midhun Suresh committed
                break;
            case "minimize":
                minimizeIframe();
                break;
        }
    });
    
    
    function isMobile() {
        return window.innerWidth <= 800 && window.innerHeight <= 930;
    }
    
    
    Midhun Suresh's avatar
    Midhun Suresh committed
    function renderStartButton() {
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        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";
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        const urlFixed = new URL("CSS_FILE_NAME", parentRootHost);
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        linkElement.href = urlFixed.href;
        document.head.appendChild(linkElement);
    
    Midhun Suresh's avatar
    Midhun Suresh committed
    function loadChatterboxIframe() {
        const iframe = document.createElement("iframe");
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        const configLocation = (window as any).CONFIG_LOCATION;
        if (!configLocation) {
            throw new Error("CONFIG_LOCATION is not set");
        }
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        iframe.src = new URL("../chatterbox.html?config=" + configLocation, rootHost).href;
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        iframe.className = "chatterbox-iframe";
        document.body.appendChild(iframe);
        isIframeLoaded = true;
    
        if (isMobile()) {
            (document.querySelector(".start") as HTMLButtonElement).style.display = "none";
        }
    
    Midhun Suresh's avatar
    Midhun Suresh committed
    }
    
    function minimizeIframe() {
        const iframeElement = document.querySelector(".chatterbox-iframe") as HTMLIFrameElement;
    
        const startButton = document.querySelector(".start") as HTMLButtonElement;
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        if (iframeElement.style.display !== "none") {
            iframeElement.style.display = "none";
    
            if (isMobile()) {
                startButton.style.display = "block";
            }
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        }
        else {
            iframeElement.style.display = "block";
    
            if (isMobile()) {
                startButton.style.display = "none";
            }
    
    Midhun Suresh's avatar
    Midhun Suresh committed
        }
    
    Midhun Suresh's avatar
    Midhun Suresh committed
    
    
    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; }
    
    Midhun Suresh's avatar
    Midhun Suresh committed
    }
    
    renderStartButton();