import {FC, useState} from "react"; import {Prism as SyntaxHighlighter} from "react-syntax-highlighter"; import {oneDark, oneLight} from "react-syntax-highlighter/dist/cjs/styles/prism"; import {IconDownload} from '@tabler/icons-react'; import {generateRandomString, programmingLanguages} from '@/utils/app/data'; interface Props { language: string; value: string; lightMode: "light" | "dark"; } export const CodeBlock: FC = ({language, value, lightMode}) => { const [buttonText, setButtonText] = useState("Copy code"); const copyToClipboard = () => { navigator.clipboard.writeText(value).then(() => { setButtonText("Copied!"); setTimeout(() => { setButtonText("Copy code"); }, 2000); }); }; const downloadAsFile = () => { const fileExtension = programmingLanguages[language] || '.file'; const suggestedFileName = `file-${generateRandomString(3, true)}${fileExtension}`; const fileName = window.prompt('Enter file name', suggestedFileName); if(!fileName){ // user pressed cancel on prompt return; } const blob = new Blob([value], { type: "text/plain" }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.download = fileName; link.href = url; link.style.display = "none"; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); }; return (
{value}
); };