From ffe93a3257303a4b3b1c5da5dd63fe4c0e474997 Mon Sep 17 00:00:00 2001 From: Cypro Freelance <110410268+Proxyy587@users.noreply.github.com> Date: Wed, 17 Jul 2024 22:32:48 +0530 Subject: [PATCH] toast added / table in logs added / favicon added --- app/(auth)/admin/changelogs/page.tsx | 110 ++++++++++++++++++++++++++- app/(auth)/admin/downloads/page.tsx | 7 +- app/(auth)/admin/mods/page.tsx | 11 ++- app/api/delete/[id]/route.ts | 30 ++++++++ app/favicon.ico | Bin 15406 -> 15406 bytes app/layout.tsx | 2 +- bun.lockb | Bin 407229 -> 407229 bytes 7 files changed, 151 insertions(+), 9 deletions(-) create mode 100644 app/api/delete/[id]/route.ts diff --git a/app/(auth)/admin/changelogs/page.tsx b/app/(auth)/admin/changelogs/page.tsx index a93cbf9..3275e59 100644 --- a/app/(auth)/admin/changelogs/page.tsx +++ b/app/(auth)/admin/changelogs/page.tsx @@ -1,6 +1,6 @@ "use client"; -import React from "react"; +import React, { useEffect, useState } from "react"; import { useForm, SubmitHandler, useFieldArray } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { Button } from "@/components/ui/button"; @@ -12,13 +12,35 @@ import { FormLabel, FormMessage, } from "@/components/ui/form"; +import { + Table, + TableBody, + TableCaption, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; import { Input } from "@/components/ui/input"; import { logsSchema } from "@/lib/validations/validation"; import { z } from "zod"; +import { useToast } from "@/components/ui/use-toast"; + +interface LogEntry { + _id: string; + version: string; + date: string; + bullets: { point: string }[]; +} type LogsFormValues = z.infer; const AdminLogPage = () => { + const [logs, setLogs] = useState([]); + const [error, setError] = useState(""); + const { toast } = useToast(); + const [loading, setLoading] = useState(false); + const form = useForm({ resolver: zodResolver(logsSchema), defaultValues: { @@ -33,7 +55,33 @@ const AdminLogPage = () => { name: "bullets", }); + const fetchLogs = async () => { + try { + const response = await fetch("/api/logs", { + method: "GET", + }); + if (response.ok) { + const data: LogEntry[] = await response.json(); + setLogs(data); + } else { + throw new Error(`HTTP error! status: ${response.status}`); + } + } catch (error: any) { + setError(error.message || "Failed to fetch logs"); + } + }; + + useEffect(() => { + fetchLogs(); + const interval = setInterval(() => { + fetchLogs(); + }, 10000); + + return () => clearInterval(interval); + }, []); + const onSubmit: SubmitHandler = async (data) => { + setLoading(true); const response = await fetch("/api/uploadlogs", { method: "POST", headers: { @@ -44,11 +92,30 @@ const AdminLogPage = () => { if (response.ok) { form.reset(); + fetchLogs(); + setLoading(false); + toast({ description: "Logs successfully added" }); console.log("Upload successful"); - alert("Uploaded"); } else { console.error("Upload failed"); - alert("Upload Failed"); + setLoading(false); + toast({ description: "Upload Failed", variant: "destructive" }); + } + }; + + const deleteLog = async (id: string) => { + try { + const response = await fetch(`/api/delete/${id}`, { + method: "DELETE", + }); + if (response.ok) { + fetchLogs(); + console.log("Delete successful"); + } else { + throw new Error(`HTTP error! status: ${response.status}`); + } + } catch (error: any) { + setError(error.message || "Failed to delete log"); } }; @@ -83,6 +150,7 @@ const AdminLogPage = () => { )} /> + {fields.map((field, index) => ( { + + {/* Section to list and delete logs */} +
+

Existing Logs

+ {error &&

{error}

} + + + + Version + Date + Actions + + + + {logs.map((log) => ( + + + {log.version} + + {log.date} + + + + + ))} + +
+
); }; diff --git a/app/(auth)/admin/downloads/page.tsx b/app/(auth)/admin/downloads/page.tsx index 0c82ecf..9f9b2d2 100644 --- a/app/(auth)/admin/downloads/page.tsx +++ b/app/(auth)/admin/downloads/page.tsx @@ -16,8 +16,11 @@ import { import { Input } from "@/components/ui/input"; import { UploadButton, UploadDropzone } from "@/lib/uploadthing"; import { downloadSchema } from "@/lib/validations/validation"; +import { useToast } from "@/components/ui/use-toast"; const DownloadsPage = () => { + const { toast } = useToast(); + const form = useForm>({ resolver: zodResolver(downloadSchema), defaultValues: { @@ -41,11 +44,11 @@ const DownloadsPage = () => { if (response.ok) { form.reset(); + toast({ description: "Download Sucessfully Updated" }); console.log("Upload successful"); - alert("Uploaded"); } else { console.error("Upload failed"); - alert("Upload Failed"); + toast({ description: "Uploading Failed", variant: "destructive" }); } }; diff --git a/app/(auth)/admin/mods/page.tsx b/app/(auth)/admin/mods/page.tsx index c48f53f..91c9133 100644 --- a/app/(auth)/admin/mods/page.tsx +++ b/app/(auth)/admin/mods/page.tsx @@ -16,8 +16,10 @@ import { import { Input } from "@/components/ui/input"; import { UploadButton, UploadDropzone } from "@/lib/uploadthing"; import { modsSchema } from "@/lib/validations/validation"; +import { useToast } from "@/components/ui/use-toast"; const SvrjsModsAdminPage = () => { + const { toast } = useToast(); const form = useForm>({ resolver: zodResolver(modsSchema), defaultValues: { @@ -39,11 +41,16 @@ const SvrjsModsAdminPage = () => { if (response.ok) { form.reset(); + toast({ + description: "Successfully Uploaded Mods", + }); console.log("Upload successful"); - alert("Uploaded"); } else { console.error("Upload failed"); - alert("Upload Failed"); + toast({ + description: "Upload failed", + variant: "destructive", + }); } }; diff --git a/app/api/delete/[id]/route.ts b/app/api/delete/[id]/route.ts new file mode 100644 index 0000000..f53ff7d --- /dev/null +++ b/app/api/delete/[id]/route.ts @@ -0,0 +1,30 @@ +// app/api/delete/[id]/route.ts +import clientPromise from "@/lib/db"; +import { ObjectId } from "mongodb"; +import { NextResponse } from "next/server"; + +export async function DELETE( + request: Request, + { params }: { params: { id: string } } +) { + const { id } = params; + + try { + const client = await clientPromise; + const db = client.db("downloadsDatabase"); + const collection = db.collection("logs"); + + const result = await collection.deleteOne({ _id: new ObjectId(id) }); + + if (result.deletedCount === 1) { + return NextResponse.json({ message: "Log deleted successfully" }); + } else { + return NextResponse.json({ message: "Log not found" }, { status: 404 }); + } + } catch (error) { + return NextResponse.json( + { message: "Failed to delete log", error: error }, + { status: 500 } + ); + } +} diff --git a/app/favicon.ico b/app/favicon.ico index b511e44c97e79e86eaf7989fcad2fd74859468b9..c5d08a74839baa929e32d1ba5d1a14ce55d2d5df 100644 GIT binary patch literal 15406 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 Mll#vI{0k%SKkXjwF8}}l diff --git a/app/layout.tsx b/app/layout.tsx index d723b8e..b2a35a9 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -30,7 +30,7 @@ export default function RootLayout({ disableTransitionOnChange > - {children} +
{children}
diff --git a/bun.lockb b/bun.lockb index 01fd7213b989a5272a7321db685503fd76976895..ebcad42775a54c87800d7a8b3d53585d80bb999f 100644 GIT binary patch delta 53 zcmdn{R$}j4iG~)&7N!>FEiCea>`V+`FkMZMWhw__oSB}9o}p>`VL=ukX5D^RknNWW E0H5j(@Bjb+ delta 53 zcmdn{R$}j4iG~)&7N!>FEiCea?2K`SdPaJN)71o7rgAVbKtTIpK^7op-F{e*?UxDw DtuPL>