diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 529283c..b34c8bc 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,4 +1,4 @@ -import { useRef, useState, useCallback } from "react"; +import { useRef, useState } from "react"; import ImageUpload from "./components/ImageUpload"; import CodePreview from "./components/CodePreview"; import Preview from "./components/Preview"; @@ -7,7 +7,6 @@ import Spinner from "./components/Spinner"; import classNames from "classnames"; import { FaCode, - FaCopy, FaDesktop, FaDownload, FaMobile, @@ -15,12 +14,9 @@ import { } from "react-icons/fa"; import { Switch } from "./components/ui/switch"; -import copy from "copy-to-clipboard"; -import toast from "react-hot-toast"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "./components/ui/tabs"; -import CodeMirror from "./components/CodeMirror"; import SettingsDialog from "./components/SettingsDialog"; import { Settings, EditorTheme, AppState } from "./types"; import { IS_RUNNING_ON_CLOUD } from "./config"; @@ -31,6 +27,7 @@ import { UrlInputSection } from "./components/UrlInputSection"; import TermsOfServiceDialog from "./components/TermsOfServiceDialog"; import html2canvas from "html2canvas"; import { USER_CLOSE_WEB_SOCKET_CODE } from "./constants"; +import CodeTab from "./components/CodeTab"; function App() { const [appState, setAppState] = useState(AppState.INITIAL); @@ -152,11 +149,6 @@ function App() { setUpdateInstruction(""); } - const doCopyCode = useCallback(() => { - copy(generatedCode); - toast.success("Copied to clipboard"); - }, [generatedCode]); - const handleTermDialogOpenChange = (open: boolean) => { setSettings((s) => ({ ...s, @@ -316,20 +308,11 @@ function App() { -
- - - - -
+
diff --git a/frontend/src/components/CodeTab.tsx b/frontend/src/components/CodeTab.tsx new file mode 100644 index 0000000..d10f649 --- /dev/null +++ b/frontend/src/components/CodeTab.tsx @@ -0,0 +1,87 @@ +import { FaCopy } from "react-icons/fa"; +import CodeMirror from "./CodeMirror"; +import { Button } from "./ui/button"; +import { Settings } from "../types"; +import copy from "copy-to-clipboard"; +import { useCallback } from "react"; +import toast from "react-hot-toast"; + +interface Props { + code: string; + setCode: React.Dispatch>; + settings: Settings; +} + +function CodeTab({ code, setCode, settings }: Props) { + const copyCode = useCallback(() => { + copy(code); + toast.success("Copied to clipboard"); + }, [code]); + + const doOpenInCodepenio = useCallback(async () => { + // TODO: Update CSS and JS external links depending on the framework being used + const data = { + html: code, + editors: "100", // 1: Open HTML, 0: Close CSS, 0: Close JS + layout: "left", + css_external: + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" + + (code.includes("