Refactor file loading and code retrieval logic

This commit is contained in:
2024-09-14 18:12:56 +00:00
parent fb7d3e6061
commit e677a45ecd
2 changed files with 61 additions and 3 deletions

View File

@@ -3,6 +3,9 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useSearchParams } from "next/navigation"; import { useSearchParams } from "next/navigation";
import TextEditor from "@/components/TextEditor"; import TextEditor from "@/components/TextEditor";
import LanguageSelector from "@/components/TextEditor/LanguageSelector";
import { languages } from "@/components/TextEditor/LanguageSelector/languages";
import BreadCrumbs from "@/components/BreadCrumbs"; import BreadCrumbs from "@/components/BreadCrumbs";
import ServerIcon from "@/components/Icons/Server"; import ServerIcon from "@/components/Icons/Server";
import FolderIcon from "@/components/Icons/Folder"; import FolderIcon from "@/components/Icons/Folder";
@@ -14,6 +17,11 @@ function Page() {
const serverId = searchParams.get("serverid") || ""; const serverId = searchParams.get("serverid") || "";
const path = searchParams.get("path") || ""; const path = searchParams.get("path") || "";
const [code, setCode] = useState(""); const [code, setCode] = useState("");
const [language, setLanguage] = useState("plaintext");
const setLanguageHandler = (event: any) => {
setLanguage(event.target.value);
};
useEffect( useEffect(
function () { function () {
@@ -36,7 +44,7 @@ function Page() {
return ( return (
<> <>
<div className="flex mb-4"> <div className="flex mb-4 justify-between">
<BreadCrumbs> <BreadCrumbs>
<li> <li>
<div className="mr-2"> <div className="mr-2">
@@ -72,9 +80,14 @@ function Page() {
); );
})} })}
</BreadCrumbs> </BreadCrumbs>
<button className="ml-auto btn btn-accent">Save</button> <div className="flex justify-end gap-4">
<LanguageSelector onChange={setLanguageHandler} />
<button className="ml-auto btn btn-base-100 text-success">
Save
</button>
</div> </div>
<TextEditor code={code} /> </div>
<TextEditor code={code} language={language} />
</> </>
); );
} }

View File

@@ -0,0 +1,45 @@
import React, { useState } from "react";
import { languages } from "./languages";
interface LanguageSelectorProps {
onChange: (event: any) => void;
defaultLanguage?: string;
}
const Index = (props: LanguageSelectorProps) => {
const { onChange } = props;
let { defaultLanguage } = props;
if (!defaultLanguage) {
defaultLanguage = "plaintext";
}
const [selectedLanguage, setSelectedLanguage] =
useState<string>(defaultLanguage);
const handleChange = (event: React.ChangeEvent<HTMLSelectElement>) => {
setSelectedLanguage(event.target.value);
onChange(event);
};
return (
<select
className="select bg-base-200 text-base-content w-full max-w-xs"
value={selectedLanguage}
onChange={handleChange}
>
{Object.entries(languages).map(([key, value]) => (
<option
disabled={selectedLanguage === key}
selected={selectedLanguage === key}
key={key}
value={key}
>
{value}
</option>
))}
</select>
);
};
export default Index;