import Handlebars from "handlebars"; import { Play, X } from "phosphor-react"; import { useEffect, useState } from "react"; import state, { IFile, ILog } from "../../state"; import Button from "../Button"; import Box from "../Box"; import Input from "../Input"; import Stack from "../Stack"; import { Dialog, DialogTrigger, DialogContent, DialogTitle, DialogDescription, DialogClose, } from "../Dialog"; import Flex from "../Flex"; import { useSnapshot } from "valtio"; const generateHtmlTemplate = (code: string) => { return ` kissa `; }; const RunScript: React.FC<{ file: IFile }> = ({ file }) => { const snap = useSnapshot(state); const parsed = Handlebars.parse(file.content); const names = parsed.body .filter((i) => i.type === "MustacheStatement") // @ts-expect-error .map((block) => block?.path?.original); const defaultState: Record = {}; names.forEach((name) => (defaultState[name] = "")); const [fields, setFields] = useState>(defaultState); const [iFrameCode, setIframeCode] = useState(""); const [isDialogOpen, setIsDialogOpen] = useState(false); const runScript = () => { const template = Handlebars.compile(file.content); const code = template(fields); setIframeCode(generateHtmlTemplate(code)); }; useEffect(() => { const handleEvent = (e: any) => { if (e.data.type === "log" || e.data.type === "error") { console.log(e.data); const data: ILog[] = e.data.args.map((msg: any) => ({ type: e.data.type, message: msg.toString(), })); state.scriptLogs = [...snap.scriptLogs, ...data]; } }; window.addEventListener("message", handleEvent); return () => window.removeEventListener("message", handleEvent); }, [snap.scriptLogs]); return ( <> Run {file.name} script You are about to run scripts provided by the developer of the hook, make sure you know what you are doing.

{Object.keys(fields).length > 0 ? `You also need to fill in following parameters to run the script` : ""}
{Object.keys(fields).map((key) => ( setFields({ ...fields, [key]: e.target.value }) } /> ))}
{iFrameCode && (