Skip to content

Commit 06fa768

Browse files
committed
Added actions file
1 parent fbf602d commit 06fa768

3 files changed

Lines changed: 49 additions & 3 deletions

File tree

src/app/f/[folderId]/drive-contents.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ export default function DriveContents(props:{
5353
<div className="px-6 py-4 border-b border-gray-700">
5454
<div className="grid grid-cols-12 gap-4 text-sm font-medium text-gray-400">
5555
<div className="col-span-6">Name</div>
56-
<div className="col-span-3">Type</div>
56+
<div className="col-span-2">Type</div>
5757
<div className="col-span-3">Size</div>
58+
<div className="col-span-1"></div>
5859
</div>
5960
</div>
6061
<ul>

src/app/f/[folderId]/file-row.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import { Folder as FolderIcon, FileIcon} from "lucide-react"
1+
import { Folder as FolderIcon, FileIcon, Trash2Icon} from "lucide-react"
22
import Link from "next/link"
3+
import { Button } from "~/components/ui/button";
4+
import { deleteFile } from "~/server/actions";
35
import type { files_table, folders_table } from "~/server/db/schema";
46

57
export function FileRow(props: {file : typeof files_table.$inferSelect}) {
@@ -14,8 +16,13 @@ export function FileRow(props: {file : typeof files_table.$inferSelect}) {
1416

1517
</Link>
1618
</div>
17-
<div className="col-span-3 text-gray-400">{"file"}</div>
19+
<div className="col-span-2 text-gray-400">{"file"}</div>
1820
<div className="col-span-3 text-gray-400">{file.size}</div>
21+
<div className="col-span-1 text-gray-400">
22+
<Button variant="ghost" onClick={()=>deleteFile(file.id)} aria-label="Delete file">
23+
<Trash2Icon size={20}/>
24+
</Button>
25+
</div>
1926
</div>
2027
</li>
2128
)

src/server/actions.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
"use server";
2+
3+
import { and, eq } from "drizzle-orm";
4+
import { db } from "./db";
5+
import { files_table } from "./db/schema";
6+
import { auth } from "@clerk/nextjs/server";
7+
import { UTApi } from "uploadthing/server";
8+
import { cookies } from "next/headers";
9+
10+
const utApi = new UTApi()
11+
12+
export async function deleteFile(fileId : number) {
13+
const session = await auth()
14+
15+
if(!session.userId) {
16+
return {error: "Unauthorized"}
17+
}
18+
19+
const [file] = await db.select().from(files_table).where(and(eq(files_table.id, fileId), eq(files_table.ownerId, session.userId)))
20+
21+
if(!file) {
22+
return {error: "File not found"}
23+
}
24+
25+
const utapiResult = await utApi.deleteFiles([file.url.replace('https://o6lauiq7z3.ufs.sh/f/', "")])
26+
27+
console.log(utapiResult)
28+
29+
const dbDeleteresult = await db.delete(files_table).where(eq(files_table.id, fileId))
30+
31+
console.log(dbDeleteresult)
32+
33+
const c = await cookies()
34+
35+
c.set("force-refresh", JSON.stringify(Math.random()))
36+
37+
return {success : "true"}
38+
}

0 commit comments

Comments
 (0)