import { useEffect, useRef, useState } from "react"; import classNames from "classnames"; import useThrottle from "../hooks/useThrottle"; import EditPopup from "./select-and-edit/EditPopup"; interface Props { code: string; device: "mobile" | "desktop"; doUpdate: (updateInstruction: string, selectedElement?: HTMLElement) => void; } function Preview({ code, device, doUpdate }: Props) { const iframeRef = useRef(null); // Don't update code more often than every 200ms. const throttledCode = useThrottle(code, 200); // Select and edit functionality const [clickEvent, setClickEvent] = useState(null); useEffect(() => { const iframe = iframeRef.current; if (iframe) { iframe.srcdoc = throttledCode; // Set up click handler for select and edit funtionality iframe.addEventListener("load", function () { iframe.contentWindow?.document.body.addEventListener( "click", setClickEvent ); }); } }, [throttledCode]); return (
); } export default Preview;