mirror of
https://github.com/BrenBroZAYT/gameyfin.git
synced 2026-06-16 16:20:04 +00:00
Start implementation of FileTreeView
This commit is contained in:
@@ -0,0 +1,69 @@
|
|||||||
|
import TreeView, {flattenTree} from "react-accessible-treeview";
|
||||||
|
import {File, Folder, FolderOpen, IconContext} from "@phosphor-icons/react";
|
||||||
|
|
||||||
|
const folder = {
|
||||||
|
name: "",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: "src",
|
||||||
|
children: [{name: "index.js"}, {name: "styles.css"}],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "node_modules",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: "react-accessible-treeview",
|
||||||
|
children: [{name: "index.js"}],
|
||||||
|
},
|
||||||
|
{name: "react", children: [{name: "index.js"}]},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".npmignore",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "package.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "webpack.config.js",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
const data = flattenTree(folder);
|
||||||
|
|
||||||
|
export default function FileTreeView({}) {
|
||||||
|
return (
|
||||||
|
<div className="flex flex-col gap-4">
|
||||||
|
<TreeView
|
||||||
|
data={data}
|
||||||
|
aria-label="directory tree"
|
||||||
|
nodeRenderer={({
|
||||||
|
element,
|
||||||
|
isBranch,
|
||||||
|
isExpanded,
|
||||||
|
getNodeProps,
|
||||||
|
level,
|
||||||
|
}) => (
|
||||||
|
<IconContext.Provider value={{size: 32, weight: "regular"}}>
|
||||||
|
<div {...getNodeProps()} className="flex flex-row items-center gap-2"
|
||||||
|
style={{paddingLeft: 10 * (level - 1)}}>
|
||||||
|
{isBranch ? <FolderIcon isOpen={isExpanded}/> : <FileIcon fileName={element.name}/>}
|
||||||
|
{element.name}
|
||||||
|
</div>
|
||||||
|
</IconContext.Provider>
|
||||||
|
)}
|
||||||
|
className="w-full"
|
||||||
|
/>
|
||||||
|
<pre>{JSON.stringify(data, null, 2)}</pre>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function FolderIcon({isOpen}: { isOpen: boolean }) {
|
||||||
|
return isOpen ? <FolderOpen/> : <Folder/>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function FileIcon({fileName}: { fileName: string }) {
|
||||||
|
return <File/>;
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import {Form, Formik} from "formik";
|
|||||||
import LibraryDto from "Frontend/generated/de/grimsi/gameyfin/libraries/LibraryDto";
|
import LibraryDto from "Frontend/generated/de/grimsi/gameyfin/libraries/LibraryDto";
|
||||||
import {LibraryEndpoint} from "Frontend/generated/endpoints";
|
import {LibraryEndpoint} from "Frontend/generated/endpoints";
|
||||||
import Input from "Frontend/components/general/input/Input";
|
import Input from "Frontend/components/general/input/Input";
|
||||||
|
import FileTreeView from "Frontend/components/general/input/FileTreeView";
|
||||||
|
|
||||||
interface LibraryCreationModalProps {
|
interface LibraryCreationModalProps {
|
||||||
libraries: LibraryDto[];
|
libraries: LibraryDto[];
|
||||||
@@ -70,6 +71,8 @@ export default function LibraryCreationModal({
|
|||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<FileTreeView/>
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
<Button variant="light" onPress={onClose}>
|
<Button variant="light" onPress={onClose}>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {LibraryEndpoint, SystemEndpoint} from "Frontend/generated/endpoints";
|
|||||||
import {useState} from "react";
|
import {useState} from "react";
|
||||||
import GameDto from "Frontend/generated/de/grimsi/gameyfin/games/dto/GameDto";
|
import GameDto from "Frontend/generated/de/grimsi/gameyfin/games/dto/GameDto";
|
||||||
import {GameOverviewCard} from "Frontend/components/general/cards/GameOverviewCard";
|
import {GameOverviewCard} from "Frontend/components/general/cards/GameOverviewCard";
|
||||||
|
import FileTreeView from "Frontend/components/general/input/FileTreeView";
|
||||||
|
|
||||||
export default function TestView() {
|
export default function TestView() {
|
||||||
const [gameTitle, setGameTitle] = useState("");
|
const [gameTitle, setGameTitle] = useState("");
|
||||||
@@ -72,6 +73,8 @@ export default function TestView() {
|
|||||||
</div>
|
</div>
|
||||||
{game && <GameOverviewCard game={game}></GameOverviewCard>}
|
{game && <GameOverviewCard game={game}></GameOverviewCard>}
|
||||||
{game && <>{JSON.stringify(game, null, 2)}</>}
|
{game && <>{JSON.stringify(game, null, 2)}</>}
|
||||||
|
|
||||||
|
<FileTreeView/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user