From a9b29b0f70d3b26437c454879d8bd06aa6b69bbd Mon Sep 17 00:00:00 2001 From: AbhiByreddy <54539671+ThunderBird260@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:57:24 -0400 Subject: [PATCH 1/4] feat: UI for patchnotes on moderation, start of patchnotes page and component --- src/components/PatchNote.jsx | 23 ++++++++++++++ src/pages/moderation.jsx | 60 +++++++++++++++++++++++++++++++++++- src/pages/patch-notes.jsx | 36 ++++++++++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/components/PatchNote.jsx create mode 100644 src/pages/patch-notes.jsx diff --git a/src/components/PatchNote.jsx b/src/components/PatchNote.jsx new file mode 100644 index 0000000..dc03cb5 --- /dev/null +++ b/src/components/PatchNote.jsx @@ -0,0 +1,23 @@ +import { MarkdownViewer } from '@/components/MarkdownViewer'; +import React from 'react'; + +export function PatchNote({props}) { + return ( + <> +
+
+

+ Version 2.0.0 + 8/2/2024 +

+

Title

+
+
+
+ +
+
+
+ + ); +} diff --git a/src/pages/moderation.jsx b/src/pages/moderation.jsx index 34abc99..143a80e 100644 --- a/src/pages/moderation.jsx +++ b/src/pages/moderation.jsx @@ -13,12 +13,16 @@ import request from '@/utils/request'; import { MyTable } from '@/components/Table'; import { TableHead, TableRow, TableHeader, TableCell, TableBody, Table } from "@/components/ui/table" import ViewChallenge from '@/components/moderation/ViewChallenge'; +import { MarkdownViewer } from '@/components/MarkdownViewer'; + + export default function Competitions() { const [selectedChallenges, setSelectedChallenges] = useState([]); const [selectedId, setSelectedId] = useState(null); const [pendingChallenges, setPendingChallenges] = useState([]); const [challengeIsOpen, setChallengeIsOpen] = useState(false); + const [contentPreview, setContentPreview] = useState(''); const [reports, setReports] = useState([]); @@ -157,6 +161,31 @@ export default function Competitions() { } }; + const handleUploadPatchnote = async () => { + const title = document.getElementById('titleInput').value; + const version = document.getElementById('versionInput').value; + const content = document.getElementById('content').value; + const author = "CTFGuide"; + + if (!title || !version || !content) { + alert("Please fill in all fields."); + return; + } + + try{ + const response = await request(`${process.env.NEXT_PUBLIC_API_URL}/admin/createPatchNote`, "POST", {title, version, content}); + if(response.success){ + alert("Patchnote uploaded successfully!"); + }else { + alert("Failed to upload the patchnote."); + } + + }catch(err){ + console.log(err); + alert("An error occurred while uploading the patchnote."); + } + }; + return ( <> @@ -261,9 +290,38 @@ export default function Competitions() { +
+ +
+
+

+ Create a Patchnote +

+ + + + +
+ +
+

+ Patchnote Content Preview +

+
+ +
+
+
-
+ +
diff --git a/src/pages/patch-notes.jsx b/src/pages/patch-notes.jsx new file mode 100644 index 0000000..b1b0fd7 --- /dev/null +++ b/src/pages/patch-notes.jsx @@ -0,0 +1,36 @@ +import Head from 'next/head'; +import { Footer } from '@/components/Footer'; +import { StandardNav } from '@/components/StandardNav'; +import { useEffect, useState } from 'react'; +import {PatchNote} from '@/components/PatchNote'; + +export default function PatchNotes() { +return ( + <> + + Patch Notes - CTFGuide + + + + + +
+

+ Patch Notes +

+

+ A changelog of updates to the CTFGuide platform +

+ +
+
+