From f8fe969de994abe1f926e6e2c29b4c4808cc91ab Mon Sep 17 00:00:00 2001 From: priyanshu_owner <67639480+priyanshu-7938@users.noreply.github.com> Date: Sat, 25 May 2024 19:20:40 +0530 Subject: [PATCH 01/37] added question adding feature... --- frontend/package-lock.json | 36 +++ frontend/package.json | 2 + frontend/src/components/AddProblemForm.jsx | 216 +++++++++++++++--- .../components/problems/ProblemsContainer.jsx | 38 ++- frontend/src/components/ui/sheet.jsx | 108 +++++++++ frontend/src/components/ui/skeleton.jsx | 2 +- frontend/src/components/ui/toast.jsx | 82 +++++++ frontend/src/components/ui/toaster.jsx | 33 +++ frontend/src/components/ui/use-toast.js | 154 +++++++++++++ frontend/src/hooks/useDeployQuestion.js | 140 ++++++------ frontend/src/main.jsx | 2 + frontend/src/pages/AddQuestion.jsx | 11 +- frontend/src/pages/MyQuestionDesc.jsx | 49 +++- frontend/src/pages/ProblemDesc.jsx | 57 ++--- 14 files changed, 772 insertions(+), 158 deletions(-) create mode 100644 frontend/src/components/ui/sheet.jsx create mode 100644 frontend/src/components/ui/toast.jsx create mode 100644 frontend/src/components/ui/toaster.jsx create mode 100644 frontend/src/components/ui/use-toast.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5dbdcf9..34bf486 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -15,9 +15,11 @@ "@noble/secp256k1": "^2.1.0", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.0.5", + "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-toast": "^1.1.5", "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-table": "^8.11.7", "@tronweb3/tronwallet-abstract-adapter": "^1.1.6", @@ -2892,6 +2894,40 @@ } } }, + "node_modules/@radix-ui/react-toast": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.5.tgz", + "integrity": "sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-tooltip": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz", diff --git a/frontend/package.json b/frontend/package.json index 7977fcd..c7a1aa5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,9 +17,11 @@ "@noble/secp256k1": "^2.1.0", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.0.5", + "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-toast": "^1.1.5", "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-table": "^8.11.7", "@tronweb3/tronwallet-abstract-adapter": "^1.1.6", diff --git a/frontend/src/components/AddProblemForm.jsx b/frontend/src/components/AddProblemForm.jsx index 5264dbb..2e297dd 100644 --- a/frontend/src/components/AddProblemForm.jsx +++ b/frontend/src/components/AddProblemForm.jsx @@ -1,6 +1,19 @@ import { useEffect, useState } from "react"; +import { useToast } from "@/components/ui/use-toast.js" +import { + Sheet, + SheetContent, + SheetDescription, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "@/components/ui/sheet"; +import { Skeleton } from "@/components/ui/skeleton"; -export default function ProblemForum({ DEPLOY }) { + + +export default function ProblemForum({ data }) { + const { toast } = useToast(); const [formSelector, setFormSelector] = useState(0); const [difficulty, setDifficulty] = useState(); const [bountyValue, setBountyValue] = useState(); @@ -9,6 +22,7 @@ export default function ProblemForum({ DEPLOY }) { const [Out, setOut] = useState(""); const [Exp, setExp] = useState(""); const [Cons, setCons] = useState(""); + const [ isChecked, setChecked ] = useState(false); //consts ends... const [formData, setFormData] = useState({ name: "", @@ -20,9 +34,114 @@ export default function ProblemForum({ DEPLOY }) { constraints: [], testcases: [], }); + //deployment stuff... + const { DEPLOY, deployed, deployAddress, error } = data; + useEffect(()=>{},[deployed, deployAddress, error]) const [showAlert, setShowAlert] = useState(false); - + const checkFormInvalid = ()=>{ + //checking all the input vales sir.... + if(!formData.name){ + toast({ + description: "The name is required!!", + }); + setFormSelector(0); + return true; + } + if(!formData.description){ + toast({ + description: "The description is required!!", + }); + setFormSelector(0); + return true; + } + if(!formData.examples){ + toast({ + description: "The examples are required!!", + }); + setFormSelector(1); + return true; + } + if(formData.examples?.length > 0){ + formData.examples.forEach((example)=>{ + if(!example.input || !example.output || !example.explanation){ + toast({ + description: "The examples are not valid!!", + }); + setFormSelector(1); + return true; + } + }) + } + if(!formData.testcases){ + toast({ + description: "The testcases are required!!", + }); + setFormSelector(2); + return true; + } + if(formData.testcases?.length > 0){ + formData.testcases.forEach((testcase)=>{ + if(!testcase.input || !testcase.output){ + toast({ + description: "The testcases are not valid!!", + }); + setFormSelector(2); + return true; + } + }) + } + if(!formData.defaultCode){ + toast({ + description: "The default code is required!!", + }); + setFormSelector(4); + return true; + } + if(!bountyValue){ + toast({ + description: "The bounty value is required!!", + }); + setFormSelector(5); + return true; + } + if(typeof parseInt(bountyValue) == NaN){ + toast({ + description: "The bounty value is not valid!!", + }); + setFormSelector(5); + return true; + } + if(!difficulty){ + toast({ + description: "The difficulty is required!!", + }); + setFormSelector(5); + return true; + } + if(typeof parseInt(difficulty )== NaN){ + toast({ + description: "The difficulty is not valid!!", + }); + setFormSelector(5); + return true; + } + if(!formData.compileFunctionName){ + toast({ + description: "The compile function name is required!!", + }); + setFormSelector(4); + return true; + } + if(!formData.defaultCode){ + toast({ + description: "The default code is required!!", + }); + setFormSelector(4); + return true; + } + return false; + } useEffect(() => { const timeout = setTimeout(() => { setShowAlert(true); @@ -35,21 +154,14 @@ export default function ProblemForum({ DEPLOY }) { const { name, value } = e.target; setFormData({ ...formData, [name]: value }); }; - - const handleSubmit = async (e) => { - // setLoading(true); - const re = confirm("you sure doing this..."); - if(!re) return; - //define bounty value and difficulty here..... man bounty in trx... make sure of that... - DEPLOY(difficulty, formData, bountyValue); - //working man + if(checkFormInvalid())return; + DEPLOY(difficulty, formData, bountyValue); }; return (
-
{formSelector == 0 && (
@@ -74,7 +186,7 @@ export default function ProblemForum({ DEPLOY }) { > Description - setIn(e.target.value)} />
@@ -181,13 +293,17 @@ export default function ProblemForum({ DEPLOY }) {