diff --git a/frontend/src/components/ReactCodeEditor.tsx b/frontend/src/components/ReactCodeEditor.tsx new file mode 100644 index 0000000..8f43d97 --- /dev/null +++ b/frontend/src/components/ReactCodeEditor.tsx @@ -0,0 +1,85 @@ +import { Button } from "@/components/ui/button" +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog" +import { CodeGenerationParams, CodeType } from "@/generateCode"; +import { useState } from "react"; +import { FaReact } from "react-icons/fa" +import CodeMirror from "./CodeMirror"; +import { usePersistedState } from "@/hooks/usePersistedState"; +import { EditorTheme, Settings } from "@/types"; +import { doCopyCode } from "@/lib/utils"; +import { Textarea } from "./ui/textarea"; + + +interface IProps { + doGenerateCode: (params: CodeGenerationParams) => void; + referenceImage: string; +} + +export const ReactCodeEditor: React.FC = ({ doGenerateCode, referenceImage }) => { + const [generatedReactCode, setGeneratedReactCode] = useState(""); + const [updateInstruction, setUpdateInstruction] = useState(""); + const [reactHistory, setReactHistory] = useState([]); + const [settings] = usePersistedState( + { + openAiApiKey: null, + screenshotOneApiKey: null, + isImageGenerationEnabled: true, + editorTheme: EditorTheme.COBALT, + isTermOfServiceAccepted: false, + }, + "setting" + ); + async function doUpdateReact() { + const updatedHistory = [...reactHistory, generatedReactCode, updateInstruction]; + doGenerateCode({ + generationType: "update", + codeType: CodeType.REACT, + image: referenceImage, + history: updatedHistory, + }); + + setReactHistory(updatedHistory); + setGeneratedReactCode(""); + setUpdateInstruction(""); + } + + return ( + + + + + + + Generate React Code + + Notice: The code below may shows different results than the HTML code. + + +
+ doCopyCode(generatedReactCode)} + /> +
+