import React, { useState } from "react"; import Editor from "@monaco-editor/react"; import { upload } from "../../../assets/icons/input"; import { cn } from "../../../lib/cn"; import { DropDownList } from "../../../components/drop-down-list/DropDownList"; const languageMap: Record = { c: "cpp", cpp: "cpp", java: "java", python: "python", pascal: "pascal", kotlin: "kotlin", csharp: "csharp" }; const CodeEditor: React.FC = () => { const [language, setLanguage] = useState("cpp"); const [code, setCode] = useState(""); const [isDragging, setIsDragging] = useState(false); const items = [ { value: "c", text: "C" }, { value: "cpp", text: "C++" }, { value: "java", text: "Java" }, { value: "python", text: "Python" }, { value: "pascal", text: "Pascal" }, { value: "kotlin", text: "Kotlin" }, { value: "csharp", text: "C#" }, ]; const handleFileUpload = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; const reader = new FileReader(); reader.onload = (event) => { const text = event.target?.result; if (typeof text === "string") setCode(text); }; reader.readAsText(file); e.target.value = ""; }; const handleDrop = (e: React.DragEvent) => { e.preventDefault(); setIsDragging(false); const droppedFile = e.dataTransfer.files[0]; if (!droppedFile) return; const reader = new FileReader(); reader.onload = (event) => { const text = event.target?.result; if (typeof text === "string") setCode(text); }; reader.readAsText(droppedFile); }; const handleDragOver = (e: React.DragEvent) => { e.preventDefault(); // обязательно }; const handleDragEnter = (e: React.DragEvent) => { e.preventDefault(); setIsDragging(true); }; const handleDragLeave = (e: React.DragEvent) => { e.preventDefault(); setIsDragging(false); }; return (
{/* Панель выбора языка и загрузки файла */}
{ setLanguage(v) }} />
{/* Monaco Editor */}
setCode(value ?? "")} theme="vs-dark" options={{ fontSize: 14, minimap: { enabled: false }, automaticLayout: true, quickSuggestions: true, suggestOnTriggerCharacters: true, tabSize: 4, insertSpaces: true, detectIndentation: false, autoIndent: "full", }} />
); }; export default CodeEditor;