Skip to content

Commit 1567bf0

Browse files
committed
Using Links for Folders
1 parent aa51290 commit 1567bf0

3 files changed

Lines changed: 18 additions & 46 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,6 @@ Just finished up the database connection, next steps:
103103

104104
The database and UI are now connected, some improvements to make:
105105

106-
- [ ] Change folders to link components, remove all client state
106+
- [x] Change folders to link components, remove all client state
107107
- [ ] Clean up the database and data fetching patterns
108108
- [ ] Real homepage

src/app/drive-contents.tsx

Lines changed: 11 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,21 @@
11
"use client";
22

33
import { ChevronRight, Upload } from "lucide-react";
4-
import { useMemo, useState } from "react";
4+
import Link from "next/link";
55

66
import { Button } from "~/components/ui/button";
77
import type { files, folders } from "~/server/db/schema";
8+
89
import { FileRow, FolderRow } from "./file-row";
910

1011
export default function DriveContents(props: {
1112
files: (typeof files.$inferSelect)[];
1213
folders: (typeof folders.$inferSelect)[];
1314
}) {
14-
const [currentFolder, setCurrentFolder] = useState(1);
15-
16-
const handleFolderClick = (folderId: number) => {
17-
setCurrentFolder(folderId);
18-
};
19-
20-
const breadcrumbs = useMemo(() => {
21-
const breadcrumbs = [];
22-
let currentId = currentFolder;
23-
24-
while (currentId !== 1) {
25-
const folder = props.folders.find((file) => file.id === currentId);
26-
if (folder) {
27-
breadcrumbs.unshift(folder);
28-
currentId = folder.parent ?? 1;
29-
} else {
30-
break;
31-
}
32-
}
15+
16+
3317

34-
return breadcrumbs;
35-
}, [currentFolder, props.folders]);
18+
const breadcrumbs: unknown[] = [];
3619

3720
const handleUpload = () => {
3821
alert("Upload functionality would be implemented here");
@@ -43,23 +26,18 @@ export default function DriveContents(props: {
4326
<div className="mx-auto max-w-6xl">
4427
<div className="mb-6 flex items-center justify-between">
4528
<div className="flex items-center">
46-
<Button
47-
onClick={() => setCurrentFolder(1)}
48-
variant="ghost"
49-
className="mr-2 text-gray-300 hover:text-white"
50-
>
29+
<Link href="/f/1" className="mr-2 text-gray-300 hover:text-white">
5130
My Drive
52-
</Button>
31+
</Link>
5332
{breadcrumbs.map((folder) => (
5433
<div key={folder.id} className="flex items-center">
5534
<ChevronRight className="mx-2 text-gray-500" size={16} />
56-
<Button
57-
onClick={() => handleFolderClick(folder.id)}
58-
variant="ghost"
35+
<Link
36+
href={`/f/${folder.id}`}
5937
className="text-gray-300 hover:text-white"
6038
>
6139
{folder.name}
62-
</Button>
40+
</Link>
6341
</div>
6442
))}
6543
</div>
@@ -81,11 +59,7 @@ export default function DriveContents(props: {
8159
</div>
8260
<ul>
8361
{props.folders.map((folder) => (
84-
<FolderRow
85-
key={folder.id}
86-
folder={folder}
87-
onFolderClick={() => handleFolderClick(folder.id)}
88-
/>
62+
<FolderRow key={folder.id} folder={folder} />
8963
))}
9064
{props.files.map((file) => (
9165
<FileRow key={file.id} file={file} />

src/app/file-row.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { FileIcon, Folder as FolderIcon } from "lucide-react";
2+
import Link from "next/link";
23

34
import type { files, folders } from "~/server/db/schema";
45

@@ -28,11 +29,8 @@ export function FileRow(props: { file: typeof files.$inferSelect }) {
2829
);
2930
}
3031

31-
export function FolderRow(props: {
32-
folder: typeof folders.$inferSelect;
33-
onFolderClick: () => void;
34-
}) {
35-
const { folder, onFolderClick } = props;
32+
export function FolderRow(props: { folder: typeof folders.$inferSelect }) {
33+
const { folder } = props;
3634

3735
return (
3836
<li
@@ -41,13 +39,13 @@ export function FolderRow(props: {
4139
>
4240
<div className="grid grid-cols-12 items-center gap-4">
4341
<div className="col-span-6 flex items-center">
44-
<button
45-
onClick={onFolderClick}
42+
<Link
43+
href={`/f/${folder.id}`}
4644
className="flex items-center text-gray-100 hover:text-blue-400"
4745
>
4846
<FolderIcon className="mr-3" size={20} />
4947
{folder.name}
50-
</button>
48+
</Link>
5149
</div>
5250
<div className="col-span-3 text-gray-400"></div>
5351
<div className="col-span-3 text-gray-400"></div>

0 commit comments

Comments
 (0)