Skip to content

Commit

Permalink
added some styling
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasgauvin committed Jan 20, 2024
1 parent b74f390 commit a81150c
Show file tree
Hide file tree
Showing 18 changed files with 1,292 additions and 159 deletions.
952 changes: 944 additions & 8 deletions package-lock.json

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@
"@remirror/react": "^2.0.35",
"@remirror/react-editors": "^1.0.40",
"@remirror/types": "^1.0.1",
"lucide-react": "^0.312.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.21.2",
"remirror": "^2.0.38"
},
"devDependencies": {
Expand All @@ -26,9 +28,12 @@
"@typescript-eslint/eslint-plugin": "^6.14.0",
"@typescript-eslint/parser": "^6.14.0",
"@vitejs/plugin-react": "^4.2.1",
"autoprefixer": "^10.4.16",
"eslint": "^8.55.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.5",
"postcss": "^8.4.33",
"tailwindcss": "^3.4.1",
"typescript": "^5.2.2",
"vite": "^5.0.8"
}
Expand Down
6 changes: 6 additions & 0 deletions postcss.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
3 changes: 3 additions & 0 deletions sample-markdown-folder/folder/subfolder/test4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
hello this is a test

# test 4
3 changes: 3 additions & 0 deletions sample-markdown-folder/folder/subfolder/test5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
hello this is a test

# test 5
3 changes: 3 additions & 0 deletions sample-markdown-folder/folder/test3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
hello this is a test

# test 3this is a test another
3 changes: 3 additions & 0 deletions sample-markdown-folder/test.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
hello this is a test

# test twerk
11 changes: 11 additions & 0 deletions sample-markdown-folder/test2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
hello this is a test

# test 2asdfsadoohtest

this is a new test

**intersteingasdfasd**

## this is another test asdf

sadfasd
42 changes: 0 additions & 42 deletions src/App.css

This file was deleted.

13 changes: 0 additions & 13 deletions src/App.tsx

This file was deleted.

59 changes: 59 additions & 0 deletions src/components/FileSystemAdapters/FileSystem/Folder.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { useState } from "react";
import DirectoryNode from "../../../models/DirectoryNode";
import { ChevronRight } from "lucide-react";

export function Folder({
node,
depth,
handleFileSelect,
}: {
node: DirectoryNode | null;
depth: number;
handleFileSelect: (file: DirectoryNode) => void;
}) {
const [expanded, setExpanded] = useState(depth === 0);
if (!node) return null;

return (
<div key={node.name}>
{depth === 0 ? null : (
<div
className="p-2 hover:bg-zinc-200 rounded"
onClick={() => {
setExpanded(!expanded);
}}
>
<ChevronRight />
<h3 className="text-sm font-semibold">{node.name}</h3>
</div>
)}
<div className={`ml-4 ${expanded ? "block" : "hidden"}`}>
{node.children.map((child) => (
<div key={child.name}>
{child.children.length === 0 ? ( // Render file
<div
className={`ml-${(depth + 1) * 20} cursor-pointer
text-sm
p-2 hover:bg-zinc-200 rounded ${
child.unsavedChanges ? "italic" : ""
}`}
onClick={() => {
handleFileSelect(child);
}}
>
{child.name}
{child.unsavedChanges ? "*" : ""}
</div>
) : (
<Folder
node={child}
depth={depth + 1}
handleFileSelect={handleFileSelect}
/> // Recursively render directory
)}
</div>
))}
</div>
</div>
);
}
102 changes: 79 additions & 23 deletions src/components/FileSystemAdapters/FileSystem/LocalFileSystem.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,27 @@
import { useState, useEffect } from "react";
import DirectoryNode from "../../../models/DirectoryNode";
import { set } from "remirror";
import { Folder } from "./Folder";

//sample react function
export const LocalFileSystem = () => {
export const LocalFileSystem = ({
selectedFile,
setSelectedFile,
}: {
selectedFile: DirectoryNode | null;
setSelectedFile: (file: DirectoryNode | null) => void;
}) => {
const [selectedDirectory, setSelectedDirectory] =
useState<FileSystemDirectoryHandle | null>(null);
const [entries, setEntries] = useState<string[]>([]);
useState<DirectoryNode | null>(null);

useEffect(() => {
const fetchEntries = async () => {
if (selectedDirectory) {
const entries = await getEntriesRecursive(selectedDirectory);
setEntries(entries.map((entry) => entry.name));
if (selectedDirectory?.directoryHandle) {
const directoryNode = await getDirectoryRecursive(
selectedDirectory.directoryHandle
);

setSelectedFile(directoryNode);
}
};

Expand All @@ -20,45 +31,90 @@ export const LocalFileSystem = () => {
const handleDirectorySelect = async () => {
try {
const directoryHandle = await (window as any).showDirectoryPicker();
setSelectedDirectory(directoryHandle);
setSelectedDirectory(
await createDirectoryNode(directoryHandle, undefined)
);
} catch (error) {
console.error("Error selecting directory:", error);
}
};

const getEntriesRecursive = async (
const getDirectoryRecursive = async (
directoryHandle: FileSystemDirectoryHandle
) => {
const entries: FileSystemHandle[] = [];
const rootDirectoryNode = await createDirectoryNode(directoryHandle);
return rootDirectoryNode;
};

for await (const entry of directoryHandle.values()) {
entries.push(entry);
const createDirectoryNode = async (
directoryHandle: FileSystemDirectoryHandle,
parent?: DirectoryNode
): Promise<DirectoryNode> => {
const entries: DirectoryNode[] = [];

let directoryNode = new DirectoryNode(
directoryHandle.name,
false,
entries,
undefined,
directoryHandle,
parent
);

//@ts-ignore
for await (const entry of directoryHandle.values()) {
if (entry.kind === "directory") {
const subdirectoryHandle = entry as FileSystemDirectoryHandle;
const subdirectoryEntries = await getEntriesRecursive(
subdirectoryHandle
const subdirectoryNode = await createDirectoryNode(
subdirectoryHandle,
directoryNode
);
entries.push(subdirectoryNode);
} else {
const fileHandle = entry as FileSystemFileHandle;
const fileNode = new DirectoryNode(
entry.name,
false,
[],
fileHandle,
undefined,
directoryNode
);
entries.push(...subdirectoryEntries);
console.log(
"created file node, full path should be:",
fileNode.getFullPath()
);
entries.push(fileNode);
}
}

return entries;
directoryNode.children = entries;

return directoryNode;
};

const handleFileSelect = async (node: DirectoryNode) => {
await node.loadFileContent();
setSelectedFile(node);
};

return (
<div>
<button onClick={handleDirectorySelect}>Select Directory</button>
{selectedDirectory && (
<div>
<p>Selected Directory: {selectedDirectory.name}</p>
<ul>
{entries.map((entry, index) => (
<li key={index}>{entry}</li>
))}
</ul>
<div className="divide-y font-semibold text-base">
<div className="text-sm p-2 text-slate-500">
{selectedDirectory.name}
</div>
<div className="font-normal">
<Folder
node={selectedDirectory}
depth={0}
handleFileSelect={handleFileSelect}
/>
</div>
</div>
)}
<button onClick={handleDirectorySelect}>Select Directory</button>
</div>
);
};
Loading

0 comments on commit a81150c

Please sign in to comment.