"use client" import { useEffect, useRef, useState } from "react" import { Button } from "../ui/button" import { Check, Loader2, RotateCw, Sparkles, X } from "lucide-react" import { Socket } from "socket.io-client" import { Editor } from "@monaco-editor/react" // import monaco from "monaco-editor" export default function GenerateInput({ socket, width, data, editor, onExpand, onAccept, }: { socket: Socket width: number data: { fileName: string code: string line: number } editor: { language: string } onExpand: () => void onAccept: (code: string) => void }) { const inputRef = useRef(null) const [code, setCode] = useState("") const [expanded, setExpanded] = useState(false) const [loading, setLoading] = useState({ generate: false, regenerate: false, }) const [input, setInput] = useState("") const [currentPrompt, setCurrentPrompt] = useState("") useEffect(() => { setTimeout(() => { inputRef.current?.focus() }, 0) }, []) const handleGenerate = async ({ regenerate = false, }: { regenerate?: boolean }) => { setLoading({ generate: !regenerate, regenerate }) setCurrentPrompt(input) socket.emit( "generateCode", data.fileName, data.code, data.line, regenerate ? currentPrompt : input, (res: { result: { response: string } success: boolean errors: any[] messages: any[] }) => { if (!res.success) { console.error(res.errors) return } setCode(res.result.response) } ) } useEffect(() => { if (code) { setExpanded(true) onExpand() setLoading({ generate: false, regenerate: false }) } }, [code]) return (
setInput(e.target.value)} placeholder="✨ Generate code with a prompt" className="h-8 w-full rounded-md border border-muted-foreground bg-transparent px-3 py-1 text-sm shadow-sm transition-all file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50" />
{expanded ? ( <>
) : null}
) }