Spaces:
Running
Running
import classNames from "classnames"; | |
import { useRef } from "react"; | |
import { TbReload } from "react-icons/tb"; | |
function Preview({ | |
html, | |
isResizing, | |
isAiWorking, | |
ref, | |
}: { | |
html: string; | |
isResizing: boolean; | |
isAiWorking: boolean; | |
ref: React.RefObject<HTMLDivElement | null>; | |
}) { | |
const iframeRef = useRef<HTMLIFrameElement | null>(null); | |
const handleRefreshIframe = () => { | |
if (iframeRef.current) { | |
const iframe = iframeRef.current; | |
const content = iframe.srcdoc; | |
iframe.srcdoc = ""; | |
setTimeout(() => { | |
iframe.srcdoc = content; | |
}, 10); | |
} | |
}; | |
return ( | |
<div | |
ref={ref} | |
className="w-full border-l border-gray-900 bg-white h-[calc(70dvh-53px)] lg:h-[calc(100dvh-54px)] relative" | |
> | |
<iframe | |
ref={iframeRef} | |
title="output" | |
className={classNames("w-full h-full select-none", { | |
"pointer-events-none": isResizing || isAiWorking, | |
})} | |
srcDoc={html} | |
/> | |
<button | |
className="bg-gray-950 shadow-md text-white text-xs lg:text-sm font-medium absolute bottom-3 lg:bottom-5 right-3 lg:right-5 py-2 px-3 lg:px-4 rounded-lg flex items-center gap-2 border border-gray-900 hover:brightness-150 transition-all duration-100 cursor-pointer" | |
onClick={handleRefreshIframe} | |
> | |
<TbReload /> | |
Refresh Preview | |
</button> | |
</div> | |
); | |
} | |
export default Preview; | |