mirror of
https://github.com/mvvasilev/paste-eater.git
synced 2025-04-19 13:29:52 +03:00
70 lines
2.1 KiB
JavaScript
70 lines
2.1 KiB
JavaScript
import React, { useState, useEffect } from "react";
|
|
import Layout from "../Layout";
|
|
import Topbar from "../components/Topbar";
|
|
import { useParams, useNavigate } from "react-router-dom";
|
|
import MonacoEditor from 'react-monaco-editor';
|
|
import fetchEditorThemes from '../EditorThemes';
|
|
|
|
export default function PastePage() {
|
|
let themeList = fetchEditorThemes();
|
|
|
|
let { pasteId } = useParams();
|
|
|
|
let [ paste, setPaste ] = useState({});
|
|
let [ editorLanguage, setEditorLanguage ] = useState("rust");
|
|
let [ editorTheme, setEditorTheme ] = useState("vs-dark");
|
|
|
|
useEffect(() => {
|
|
fetch(`${process.env.REACT_APP_PASTE_API_LOCATION}/paste/${pasteId}`)
|
|
.then(response => {
|
|
if (response.ok) {
|
|
return response.json()
|
|
}
|
|
|
|
throw response;
|
|
})
|
|
.then(response => {
|
|
if (response.error) {
|
|
throw response;
|
|
}
|
|
|
|
setPaste(response.paste);
|
|
|
|
console.log(response);
|
|
})
|
|
.catch(error => {
|
|
console.log(error);
|
|
|
|
setPaste({ data: "Failed to retrieve paste, or paste does not exist." })
|
|
});
|
|
}, [])
|
|
|
|
function beforeEditorMount(editor, monaco) {
|
|
themeList.forEach(value => {
|
|
monaco.editor.defineTheme(value.id, value.theme);
|
|
})
|
|
}
|
|
|
|
return (
|
|
<Layout>
|
|
<Topbar
|
|
paste={paste}
|
|
onThemeChange={(value) => setEditorTheme(value)}
|
|
onLanguageChange={(value) => setEditorLanguage(value)}
|
|
defaultThemeValue="vs-dark"
|
|
/>
|
|
<MonacoEditor
|
|
language={editorLanguage}
|
|
theme={editorTheme}
|
|
value={paste.data}
|
|
height="95vh"
|
|
options={{
|
|
selectOnLineNumbers: true,
|
|
readOnly: true
|
|
}}
|
|
editorDidMount={beforeEditorMount}
|
|
disabled
|
|
/>
|
|
</Layout>
|
|
);
|
|
}
|