From c3822ece9021878e8ebc5d9bcd24874d3256f67e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:25:54 -0700 Subject: [PATCH 01/60] chore(components:error): add `Error` component ## what - add `Error` component ## how - takes in two props - status: http status code - message (optional): message to display under the status code ## why - this will be displayed in a page if there's an error returned when fetching the api server - using `nextjs` app router `error.tsx` doesn't help - ex: if there's an 404 error, the `error` page rendered, not `not-found.tsx` - ex: if there's an 400 errror, the `error` page is rendered but the error is unhandled ## where ## usage --- src/components/error.tsx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/components/error.tsx diff --git a/src/components/error.tsx b/src/components/error.tsx new file mode 100644 index 0000000..e0e66fc --- /dev/null +++ b/src/components/error.tsx @@ -0,0 +1,18 @@ +type Props = { + status: number; + message?: string; +} + +const Error = ({status, message}: Props) => { + return ( +
+

{status}

+ {message && ( +

{message}

+ )} +
+ ) +} + +export default Error + From 1861c46053882cc114a94cf170cc8486a34c0ef3 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:34:31 -0700 Subject: [PATCH 02/60] refactor: move schema validation for endpoint `/api/problems/[problemNum]` to it's own file ## what - move schema validation for endpoint `/api/problems/[problemNum]` to it's own file - add schema in `/api/problems/[problemNum]` via import ## how ## why - the schema validation will also be used in the client side - used in `/problems[problemNum]` ## where - ./src/app/api/problems/[problemNum]/route.ts - ./src/schema/index.ts ## usage --- src/app/api/problems/[problemNum]/route.ts | 10 ++-------- src/schema/index.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 src/schema/index.ts diff --git a/src/app/api/problems/[problemNum]/route.ts b/src/app/api/problems/[problemNum]/route.ts index ebd4d4b..48582f4 100644 --- a/src/app/api/problems/[problemNum]/route.ts +++ b/src/app/api/problems/[problemNum]/route.ts @@ -3,19 +3,13 @@ import { z } from "zod"; import { uhuntProblemNumUrl } from "@/utils/constants"; import { Problem, ProblemStatus } from "@/types"; +import { problemNumSchema as schema } from "@/schema"; type getParamsType = { - params: { - problemNum: string; - }; + params: z.infer; }; export const GET = async (_request: Request, { params }: getParamsType) => { - const schema = z.object({ - problemNum: z.coerce - .number({ invalid_type_error: "Must be a number" }) - .min(1, "Must be a number greater than 0"), - }); const schemaResponse = await schema.safeParseAsync(params); if (!schemaResponse.success) { diff --git a/src/schema/index.ts b/src/schema/index.ts new file mode 100644 index 0000000..1113fbc --- /dev/null +++ b/src/schema/index.ts @@ -0,0 +1,10 @@ +import { z } from "zod"; + +/** + * Schema validation for endpoint `/api/problems/[problemNum]` + */ +export const problemNumSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}); From 5d0a953b9b94bb3ecbc30317d8baa63af1eade5f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:38:50 -0700 Subject: [PATCH 03/60] chore(hooks): add react-query hook to fetch stats of problem number ## what - add react-query hook to fetch stats of problem number ## how - fetch from api endpoint `/api/problems/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 4502133..02649b1 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -12,6 +12,10 @@ export enum queryKey { * Reacy query key for fetching all problems */ allProblems = "all-problems", + /** + * React query key for fetching a problem num + */ + problemNum = "problem-num" } /** @@ -44,3 +48,12 @@ export const useFetchProblems = () => { }); }; +/** + * Fetch stats of a problem using problem number + */ +export const useFetchProblemNum = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.problemNum], + queryFn: async () => await axios.get(`/api/problems/${problemNum}`), + }) +} From 9aa19d22bb437f16cf21b0a3ed94415dc913b151 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:40:47 -0700 Subject: [PATCH 04/60] chore(api:problemNum): return status 404 if problem number is not found ## what - return status 404 if problem number is not found ## how ## why - this will ensure a problem number not found will be handled ## where - ./src/app/api/problems/[problemNum]/route.ts ## usage --- src/app/api/problems/[problemNum]/route.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/api/problems/[problemNum]/route.ts b/src/app/api/problems/[problemNum]/route.ts index 48582f4..fc3ce22 100644 --- a/src/app/api/problems/[problemNum]/route.ts +++ b/src/app/api/problems/[problemNum]/route.ts @@ -28,7 +28,17 @@ export const GET = async (_request: Request, { params }: getParamsType) => { const response = await fetch(url); const data: Problem = await response.json(); - data.status = ProblemStatus[data.status as unknown as number] + + if(Object.entries(data).length === 0) { + const message = { + message: `Problem number ${problemNum} not found` + } + return NextResponse.json(message, { + status: 404, + }); + } + + data.status = ProblemStatus[data.status] return Response.json(data); }; From 84940658ec27ab4decdd537332733c48492248b9 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:48:28 -0700 Subject: [PATCH 05/60] refactor(utils:constants): add type `number` to uhunt urls ## what - add type `number` to uhunt urls ## how ## why - it's a little tedious to convert number to a string when using the function ## where - ./src/utils/constants.ts ## usage --- src/utils/constants.ts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 618f01b..041e5e1 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -15,9 +15,9 @@ export const viewProblemUrl = /** * URL for viewing the details of the problem PDF using problem ID - * @param {String} pid problem ID + * @param {String | Number} pid problem ID */ -export const uhuntViewProblemUrl = (pid: string) => `${viewProblemUrl}${pid}`; +export const uhuntViewProblemUrl = (pid: string | number) => `${viewProblemUrl}${pid}`; /** * URL for fetching all problems on uva-uhunt @@ -26,25 +26,25 @@ export const uhuntAllProblemsUrl = () => 'https://uhunt.onlinejudge.org/api/p'; /** * URL for getting Problem data using Problem ID - * @param {String} pid - problem ID + * @param {String | Number} pid - problem ID */ -export const uhuntProblemIdUrl = (pid: string) => +export const uhuntProblemIdUrl = (pid: string | number) => `${uhuntBaseApiUrl}/p/id/${pid}`; /** * URL for getting Problem data using Problem number - * @param {String} problemNumber - problem number + * @param {String | Number} problemNumber - problem number */ -export const uhuntProblemNumUrl = (problemNumber: string) => +export const uhuntProblemNumUrl = (problemNumber: string | number) => `${uhuntBaseApiUrl}/p/num/${problemNumber}`; /** * URL for getting Problem ranklist using Problem ID, starting rank and number of ranks to return - * @param {String} pid - Problem ID + * @param {String | Number} pid - Problem ID * @param {Number} [start=1] - rank to start from. Default is 1 * @param {Number} [count=100] - rank to go up to. Default is 100 */ -export const uhuntProblemRankUrl = (pid: string, start = 1, count = 100) => +export const uhuntProblemRankUrl = (pid: string | number, start = 1, count = 100) => `${uhuntBaseApiUrl}/p/rank/${pid}/${start}/${count}`; /** @@ -53,13 +53,13 @@ export const uhuntProblemRankUrl = (pid: string, start = 1, count = 100) => * represented in 20 array elements, each element represents 12 months. * The submissionTime represents at what time should look back from, * could be start from 5 years ago or now. - * @param {String} pid - problem ID + * @param {String | Number} pid - problem ID * @param {Number} [submissionTime=moment().unix()] - Unix timestamp. Default is current unix timestamp * @param {Number} [back=20] - Number of years to look back. Default is 20 * @param {Number} [jump=12] - Number of months each array element will represent. Default is 12 */ export const uhuntSubmissionCountUrl = ( - pid: string, + pid: string | number, submissionTime = moment().unix(), back = 20, jump = 12, @@ -74,16 +74,16 @@ export const uhuntUsername2UidUrl = (username: string) => /** * URL for getting Submission list of a problem using Problem ID - * @param {String} pid - problem ID + * @param {String | Number} pid - problem ID */ -export const uhuntProblemSubmissionListUrl = (pid: string) => +export const uhuntProblemSubmissionListUrl = (pid: string | number) => `${uhuntBaseApiUrl}/p/subs/${pid}/0/${moment().unix()}`; /** * Get User submissions using UserID - * @param {Number} uid User ID + * @param {String | Number} uid User ID */ -export const uhuntUserSubmissionsUrl = (uid: string) => +export const uhuntUserSubmissionsUrl = (uid: string | number) => `${uhuntBaseApiUrl}/subs-user/${uid}`; /** From 00f6b71ec0446af479d9a9f4e945ec9d54fbf484 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:55:45 -0700 Subject: [PATCH 06/60] feat(page:problemNum): fetch stats for `/problems/[problemNum]` page ## what - fetch stats for `/problems/[problemNum]` page ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 65 ++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/app/problems/[problemNum]/page.tsx diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx new file mode 100644 index 0000000..c3cabc7 --- /dev/null +++ b/src/app/problems/[problemNum]/page.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { useFetchProblemNum } from "@/hooks"; +import { problemNumSchema } from "@/schema"; +import { AxiosError } from "axios"; +import { z } from "zod"; +import Error from "@/components/error"; + +type problemPageProps = { + params: z.infer; +}; + +const ProblemPage = ({ params }: problemPageProps) => { + const { + isLoading: problemNumIsLoading, + isSuccess: problemNumIsSuccess, + isError: problemNumIsError, + data: problemNumData, + error: problemNumError, + } = useFetchProblemNum(params.problemNum); + + if (problemNumIsLoading) { + return ( +
+

Loading: {params.problemNum}

+
+ ); + } + + if (problemNumIsError) { + type ErrorMessage = { + message: string; + }; + + if ( + (problemNumError as AxiosError).response?.status === 400 + ) { + return ( + ).response?.data.message + } + /> + ); + } else if ( + (problemNumError as AxiosError).response?.status === 404 + ) { + return ; + } + } + + if (problemNumIsSuccess) { + console.log(problemNumData); + } + + console.log("problem page: ", params.problemNum); + return ( +
+

Problem page: {params.problemNum}

+
+ ); +}; + +export default ProblemPage; From ae5ee4551871a22c7bd66e1e58850ed5ab4fb150 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 19:50:56 -0700 Subject: [PATCH 07/60] build(shadcn): add component `Card` ## what - add component `Card` ## how - run command npx shadcn-ui@latest add card ## why ## where - ./src/components/ui/card.tsx ## usage --- src/components/ui/card.tsx | 79 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/components/ui/card.tsx diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 0000000..afa13ec --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } From c2cde1420a68075827a7f799614ddd14b0ae0e03 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 21:23:48 -0700 Subject: [PATCH 08/60] chore(page:problemNum): add structure and placeholder components ## what - add structure and placeholder components ## how - divide into to big sections - charts - uses grid for display - 2 columns on md to larger screens - 1 column on smaller screens - table - uses flex for display - will be in flex column direction ## why - this will show how the components are laid out ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 48 ++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index c3cabc7..7f12763 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -1,10 +1,37 @@ "use client"; -import { useFetchProblemNum } from "@/hooks"; -import { problemNumSchema } from "@/schema"; import { AxiosError } from "axios"; import { z } from "zod"; + import Error from "@/components/error"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { useFetchProblemNum } from "@/hooks"; +import { problemNumSchema } from "@/schema"; + + +type ChartCard = { + title: string; + chart: React.ReactNode; +} +const ChartCard = ({title, chart}: ChartCard) => { + return ( + + + {title} + + + {chart} + + + ); +} type problemPageProps = { params: z.infer; @@ -57,7 +84,22 @@ const ProblemPage = ({ params }: problemPageProps) => { console.log("problem page: ", params.problemNum); return (
-

Problem page: {params.problemNum}

+

Problem page: {params.problemNum}

+
+
+ +
+
+ +
+
+ +
+
+
+
ranklist
+
submissions
+
); }; From 4b817bfbd924a236cba30080b5e3765cfae18382 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 6 Jan 2024 11:06:38 -0700 Subject: [PATCH 09/60] chore(types): add object `ProblemVerdictMap` ## what - add object `ProblemVerdictMap` ## how ## why - will be used to convert verdict keys in `Problem` type into a readable string ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index a835193..74a3351 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -4,6 +4,57 @@ export const ProblemStatus: Record = { 2: "Special judge", }; +export const ProblemVerdictMap: Record = { + /** + * Number of Accepted + */ + ac: "Accepted", + /** + * Number of Presentation Error + */ + pe: "Presentation error", + /** + * Number of Wrong Answer + */ + wa: "Wrong answer", + /** + * Number of Time Limit Exceeded + */ + tle: "Time limit exceeded", + /** + * Number of Memory Limit Exceeded + */ + mle: "Memory limit exceeded", + /** + * Number of Compilation Error + */ + ce: "Compile error", + /** + * Number of Runtime Error + */ + re: "Runtime error", + /** + * Number of Output Limit Exceeded + */ + ole: "Output limit exceeded", + /** + * Number of Submission Error + */ + // sube: "Submission Error", + /** + * Number of Can't be Judged + */ + // noj: "Can't be judged", + /** + * Number of In Queue + */ + // inq: number, + /** + * Number of Restricted Function + */ + // rf: "Restricted function", +} + /** * Data structure returned when querying from url `https://uhunt.onlinejudge.org/api/p/num/:num` * From 342b67fb87d44f69340750605b78a4dcad0a6137 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 6 Jan 2024 11:10:04 -0700 Subject: [PATCH 10/60] build(npm): add package `recharts` ## what - add package `recharts` ## how ## why ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 530 +++++++++++++++++++++++++--------------------- package.json | 1 + 2 files changed, 294 insertions(+), 237 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2af157d..873e06e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", + "recharts": "^2.10.3", "tailwind-merge": "^2.2.0", "tailwindcss-animate": "^1.0.7", "zod": "^3.22.4" @@ -1985,6 +1986,60 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.2.tgz", + "integrity": "sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA==" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -3381,6 +3436,116 @@ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", "devOptional": true }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -3416,6 +3581,11 @@ } } }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -3524,6 +3694,14 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -4157,6 +4335,11 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -4198,6 +4381,14 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -5009,6 +5200,14 @@ "node": ">= 0.4" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, "node_modules/into-stream": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", @@ -5706,8 +5905,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", @@ -6319,17 +6517,14 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6346,7 +6541,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6358,13 +6552,11 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6381,7 +6573,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6396,13 +6587,11 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6418,7 +6607,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6430,7 +6618,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6443,7 +6630,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6456,7 +6642,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6470,7 +6655,6 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6517,7 +6701,6 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6536,7 +6719,6 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6548,7 +6730,6 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6560,7 +6741,6 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6579,7 +6759,6 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6595,7 +6774,6 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6610,7 +6788,6 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6625,7 +6802,6 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6634,7 +6810,6 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6643,7 +6818,6 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6661,7 +6835,6 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6673,7 +6846,6 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6685,7 +6857,6 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6701,17 +6872,14 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6723,7 +6891,6 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", - "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6732,7 +6899,6 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6746,7 +6912,6 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6759,7 +6924,6 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6768,7 +6932,6 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6781,7 +6944,6 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6790,7 +6952,6 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6802,7 +6963,6 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6815,7 +6975,6 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6824,7 +6983,6 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6839,19 +6997,16 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6864,13 +7019,11 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", - "dev": true, "funding": [ { "type": "github", @@ -6890,7 +7043,6 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6905,7 +7057,6 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6914,7 +7065,6 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6923,7 +7073,6 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", - "dev": true, "funding": [ { "type": "github", @@ -6947,7 +7096,6 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6956,7 +7104,6 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6979,7 +7126,6 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6991,7 +7137,6 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7000,7 +7145,6 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", - "dev": true, "funding": [ { "type": "github", @@ -7015,7 +7159,6 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7027,7 +7170,6 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7036,7 +7178,6 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7049,7 +7190,6 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7064,7 +7204,6 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7073,7 +7212,6 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7082,7 +7220,6 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7094,13 +7231,11 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", - "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -7109,7 +7244,6 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7122,19 +7256,16 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7148,7 +7279,6 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7163,7 +7293,6 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7175,7 +7304,6 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7192,13 +7320,11 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7210,13 +7336,11 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", - "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -7225,29 +7349,24 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7256,13 +7375,11 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7271,7 +7388,6 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7280,13 +7396,11 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7295,7 +7409,6 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7311,7 +7424,6 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7323,13 +7435,11 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7348,7 +7458,6 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7370,13 +7479,11 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7388,13 +7495,11 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7406,16 +7511,13 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7425,7 +7527,6 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -7445,7 +7546,6 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7457,7 +7557,6 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7466,7 +7565,6 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7475,7 +7573,6 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7484,7 +7581,6 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7502,13 +7598,11 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7517,7 +7611,6 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7529,7 +7622,6 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7541,7 +7633,6 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7550,19 +7641,16 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7580,7 +7668,6 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7589,7 +7676,6 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7598,7 +7684,6 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", - "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7607,19 +7692,16 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7632,7 +7714,6 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7652,7 +7733,6 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7674,7 +7754,6 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7686,7 +7765,6 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7699,7 +7777,6 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7712,7 +7789,6 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7727,7 +7803,6 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7746,7 +7821,6 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7758,7 +7832,6 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7771,7 +7844,6 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7787,7 +7859,6 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7796,7 +7867,6 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7818,7 +7888,6 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7833,7 +7902,6 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7842,7 +7910,6 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7854,7 +7921,6 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7866,7 +7932,6 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7883,7 +7948,6 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7895,7 +7959,6 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7907,7 +7970,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7917,7 +7979,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7929,7 +7990,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7941,7 +8001,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7953,7 +8012,6 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7965,7 +8023,6 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7977,7 +8034,6 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7990,7 +8046,6 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8002,7 +8057,6 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -8014,13 +8068,11 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8029,7 +8081,6 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8038,7 +8089,6 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8062,7 +8112,6 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8077,7 +8126,6 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8092,7 +8140,6 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8101,7 +8148,6 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8113,7 +8159,6 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8125,7 +8170,6 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8134,7 +8178,6 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8149,7 +8192,6 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8161,7 +8203,6 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8176,7 +8217,6 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8189,7 +8229,6 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8207,7 +8246,6 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -8216,7 +8254,6 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8231,7 +8268,6 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8246,7 +8282,6 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8278,7 +8313,6 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8292,7 +8326,6 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8301,7 +8334,6 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8317,7 +8349,6 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8330,7 +8361,6 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8339,7 +8369,6 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8348,7 +8377,6 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8357,7 +8385,6 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8366,13 +8393,11 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8385,7 +8410,6 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8397,7 +8421,6 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", - "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -8405,7 +8428,6 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8417,7 +8439,6 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8426,7 +8447,6 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8441,7 +8461,6 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8454,7 +8473,6 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8470,7 +8488,6 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8479,7 +8496,6 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -8499,14 +8515,11 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, "inBundle": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8521,7 +8534,6 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8533,13 +8545,11 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8551,7 +8561,6 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8560,7 +8569,6 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8572,7 +8580,6 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8587,7 +8594,6 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8597,7 +8603,6 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8611,7 +8616,6 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8621,13 +8625,11 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8637,13 +8639,11 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", - "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8655,7 +8655,6 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8664,7 +8663,6 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8679,7 +8677,6 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8693,7 +8690,6 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8706,7 +8702,6 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8718,7 +8713,6 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8730,7 +8724,6 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8747,7 +8740,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8759,7 +8751,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8771,7 +8762,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8780,19 +8770,16 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8801,7 +8788,6 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8815,7 +8801,6 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8827,7 +8812,6 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8839,13 +8823,11 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8855,7 +8837,6 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8867,13 +8848,11 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8882,7 +8861,6 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8897,7 +8875,6 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8906,7 +8883,6 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8915,7 +8891,6 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8933,7 +8908,6 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8950,7 +8924,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8962,7 +8935,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8974,13 +8946,11 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8997,7 +8967,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9012,7 +8981,6 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9025,7 +8993,6 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, @@ -9655,7 +9622,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -9751,8 +9717,12 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "node_modules/react-remove-scroll": { "version": "2.5.5", @@ -9799,6 +9769,20 @@ } } }, + "node_modules/react-smooth": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.5.tgz", + "integrity": "sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA==", + "dependencies": { + "fast-equals": "^5.0.0", + "react-transition-group": "2.9.0" + }, + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-style-singleton": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", @@ -9821,6 +9805,21 @@ } } }, + "node_modules/react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "dependencies": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0", + "react-dom": ">=15.0.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -9948,6 +9947,37 @@ "node": ">=8.10.0" } }, + "node_modules/recharts": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.10.3.tgz", + "integrity": "sha512-G4J96fKTZdfFQd6aQnZjo2nVNdXhp+uuLb00+cBTGLo85pChvm1+E67K3wBOHDE/77spcYb2Cy9gYWVqiZvQCg==", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.19", + "react-is": "^16.10.2", + "react-smooth": "^2.0.5", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, "node_modules/redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -10922,6 +10952,11 @@ "xtend": "~4.0.1" } }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11285,6 +11320,27 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/victory-vendor": { + "version": "36.7.0", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.7.0.tgz", + "integrity": "sha512-nqYuTkLSdTTeACyXcCLbL7rl0y6jpzLPtTNGOtSnajdR+xxMxBdjMxDjfNJNlhR+ZU8vbXz+QejntcbY7h9/ZA==", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", diff --git a/package.json b/package.json index ad55bc6..4915e60 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", + "recharts": "^2.10.3", "tailwind-merge": "^2.2.0", "tailwindcss-animate": "^1.0.7", "zod": "^3.22.4" From 94add56318c6fb6df63fe5afa3a6243d80394367 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 6 Jan 2024 18:23:52 -0700 Subject: [PATCH 11/60] chore(tailwind): add `tremor` tailwindcss config ## what - add `tremor` tailwindcss config - brand colors - light mode - dark mode - background colors - light mode - dark mode - border colors - light mode - dark mode - content colors - light mode - dark mode - box shadow - light - dark - border radius - font size ## how - obtained from - https://www.tremor.so/docs/getting-started/installation ## why - some of the tailwindcss styles from `tremor.so` will be used in this app - using chart styles - bar chart - line chart - area chart - tooltip styles ## where - ./tailwind.config.ts ## usage --- tailwind.config.ts | 79 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/tailwind.config.ts b/tailwind.config.ts index a9d9eae..2841e67 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,4 +1,5 @@ import type { Config } from 'tailwindcss' +import colors from 'tailwindcss/colors' import { fontFamily } from "tailwindcss/defaultTheme" const config: Config = { @@ -52,11 +53,83 @@ const config: Config = { DEFAULT: "hsl(var(--card))", foreground: "hsl(var(--card-foreground))", }, + // tremor.so tailwindcss config + tremor: { + brand: { + faint: colors.blue[50], + muted: colors.blue[200], + subtle: colors.blue[400], + DEFAULT: colors.blue[500], + emphasis: colors.blue[700], + inverted: colors.white, + }, + background: { + muted: colors.gray[50], + subtle: colors.gray[100], + DEFAULT: colors.white, + emphasis: colors.gray[700], + }, + border: { + DEFAULT: colors.gray[200], + }, + ring: { + DEFAULT: colors.gray[200], + }, + content: { + subtle: colors.gray[400], + DEFAULT: colors.gray[500], + emphasis: colors.gray[700], + strong: colors.gray[900], + inverted: colors.white, + }, + }, + "dark-tremor": { + brand: { + faint: "#0B1229", + muted: colors.blue[950], + subtle: colors.blue[800], + DEFAULT: colors.blue[500], + emphasis: colors.blue[400], + inverted: colors.blue[950], + }, + background: { + muted: "#131A2B", + subtle: colors.gray[800], + DEFAULT: colors.gray[900], + emphasis: colors.gray[300], + }, + border: { + DEFAULT: colors.gray[700], + }, + ring: { + DEFAULT: colors.gray[800], + }, + content: { + subtle: colors.gray[600], + DEFAULT: colors.gray[500], + emphasis: colors.gray[200], + strong: colors.gray[50], + inverted: colors.gray[950], + }, + }, + }, + boxShadow: { + // light + "tremor-input": "0 1px 2px 0 rgb(0 0 0 / 0.05)", + "tremor-card": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)", + "tremor-dropdown": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)", + // dark + "dark-tremor-input": "0 1px 2px 0 rgb(0 0 0 / 0.05)", + "dark-tremor-card": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)", + "dark-tremor-dropdown": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)", }, borderRadius: { lg: "var(--radius)", md: "calc(var(--radius) - 2px)", sm: "calc(var(--radius) - 4px)", + "tremor-small": "0.375rem", + "tremor-default": "0.5rem", + "tremor-full": "9999px", }, keyframes: { "accordion-down": { @@ -80,6 +153,12 @@ const config: Config = { fontFamily: { sans: ["var(--font-sans)", ...fontFamily.sans], }, + fontSize: { + "tremor-label": ["0.75rem", {}], + "tremor-default": ["0.875rem", { lineHeight: "1.25rem" }], + "tremor-title": ["1.125rem", { lineHeight: "1.75rem" }], + "tremor-metric": ["1.875rem", { lineHeight: "2.25rem" }], + } }, }, plugins: [require("tailwindcss-animate")], From 3c73fac884c06346fd105c4256cb1cae9049ef12 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 6 Jan 2024 18:32:33 -0700 Subject: [PATCH 12/60] chore(utils:processing): add function to generate data for `rechart` bar chart ## what - add function to generate data for `rechart` bar chart ## how ## why - this will be used to generate the data needed for `recharts` bar chart to render ## where - ./src/utils/dataProcessing.ts ## usage --- src/utils/dataProcessing.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/utils/dataProcessing.ts diff --git a/src/utils/dataProcessing.ts b/src/utils/dataProcessing.ts new file mode 100644 index 0000000..45b34d0 --- /dev/null +++ b/src/utils/dataProcessing.ts @@ -0,0 +1,36 @@ +import { Problem, ProblemVerdictColors, ProblemVerdictMap } from "@/types"; + +export type processedProblemVerdictBarChartType = { + /** + * Name of the bar in the bar chart. + * usually the verdict acronyms + */ + name: string; + /** + * The value of the verdict + */ + verdict: number; + /** + * Tooltip title to display. + * Usually would be the full string of a verdict + */ + tooltipTitle: string; + /** + * Color for bar + */ + fill: string; +}; +export const processProblemNumBarChartData = (data: Problem) => { + const processedData:processedProblemVerdictBarChartType[] = [] + + for(const [key, value] of Object.entries(ProblemVerdictMap)) { + processedData.push({ + name: key.toUpperCase(), + verdict: data[key as keyof Problem] as number, + tooltipTitle: value, + fill: ProblemVerdictColors[key], + }) + } + + return processedData +} From 2c90582c0b5c36ab67d1e37107379f6bf60b80f5 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 10:42:34 -0700 Subject: [PATCH 13/60] refactor(types): combine multiple instances of `Verdict` into one ## what - combine multiple instances of `Verdict` into one - add type `ProblemVerdictType` - title: string to display in client side. usually for displaying tooltip title - bgColor: tailwindcss background color - fgColor: tailwindcss foreground color - bgHex: hexcode of property `bgColor` - fgHex: hexcode of propetty `fgColor` - apply type `ProblemVerdictType` in object `ProblemVerdictMap` - set their properties - set `Problem.ver` number as key into object `ProblemVerdictMap` - they map to the same key in the object `ProblemVerdictMap - doing this way to prevent duplocate code` - remove `VerdictType` - remove `Verdict` - the keys of this object are applied in object `ProblemVerdictMap` - set property `Submission.verdict` to type `ProblemVerdictType` - apply changes to other files - replace `Verdict` with `ProblemVerdictMap` in api endpoint `/api/poll[pollId]` ## how ## why - this to remove duplicate code - to combine string abbreviation of the verdict into object `ProblemVerdictMap` - to combine verdict ID from `Submission` into object `ProblemVerdictMap` - refactoring these later would be difficult ## where - ./src/app/api/poll/[pollId]/route.ts - ./src/types/index.ts ## usage --- src/app/api/poll/[pollId]/route.ts | 10 +- src/types/index.ts | 195 +++++++++++++++++++++-------- 2 files changed, 152 insertions(+), 53 deletions(-) diff --git a/src/app/api/poll/[pollId]/route.ts b/src/app/api/poll/[pollId]/route.ts index d346249..b78df8a 100644 --- a/src/app/api/poll/[pollId]/route.ts +++ b/src/app/api/poll/[pollId]/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server"; import { z } from "zod"; import axios from "axios"; -import { Language, Problem, Submission, Verdict } from "@/types"; +import { Language, Problem, Submission, ProblemVerdictMap } from "@/types"; import { fetchLiveSubmissionsUrl, uhuntProblemIdUrl } from "@/utils/constants"; type getParamsType = { @@ -38,10 +38,12 @@ export const GET = async (_request: Request, { params }: getParamsType) => { const converted = data .map(async (submission: Submission) => { - submission.msg.verdict = Verdict[submission.msg.ver] || { - fgColor: "", - bgColor: "", + submission.msg.verdict = ProblemVerdictMap[submission.msg.ver] || { + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgColor: "bg-gray-500", title: "- In Queue -", + fgHex: "", + bgHex: "6b7280", }; submission.msg.lan = Language[submission.msg.lan] || "--"; diff --git a/src/types/index.ts b/src/types/index.ts index 74a3351..0c62032 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -4,56 +4,179 @@ export const ProblemStatus: Record = { 2: "Special judge", }; -export const ProblemVerdictMap: Record = { +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Problem verdict data structure + */ +export interface ProblemVerdictType { + /** + * Title to be displayed on the front end + */ + title: string; + /** + * Tailwindcss for background color + * Usually used for displaying verdict using shadcn-ui `Badge` component + */ + bgColor: string; + /** + * Tailwindcss for foreground color + * Usually used for displaying verdict using shadcn-ui `Badge` component + */ + fgColor: string; + /** + * Hexcode of property `bgColor` + * Usually used for displaying verdict using shadcn-ui `Badge` component + */ + bgHex: string; + /** + * Hexcode of property `fgColor` + * Usually used for displaying verdict using shadcn-ui `Badge` component + */ + fgHex: string; +} + +const ProblemVerdictMap: Record = { /** * Number of Accepted */ - ac: "Accepted", + ac: { + title: "Accepted", + bgColor: "bg-[#00AA00]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#00AA00", + fgHex: "", + }, /** * Number of Presentation Error */ - pe: "Presentation error", + pe: { + title: "Presentation error", + bgColor: "bg-[#666600]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#666600", + fgHex: "", + }, /** * Number of Wrong Answer */ - wa: "Wrong answer", + wa: { + title: "Wrong answer", + bgColor: "bg-[#FF0000]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#FF0000", + fgHex: "", + }, /** * Number of Time Limit Exceeded */ - tle: "Time limit exceeded", + tle: { + title: "Time limit exceeded", + bgColor: "bg-[#0000FF]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#0000FF", + fgHex: "", + }, /** * Number of Memory Limit Exceeded */ - mle: "Memory limit exceeded", + mle: { + title: "Memory limit exceeded", + bgColor: "bg-[#0000AA]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#0000AA", + fgHex: "", + }, /** * Number of Compilation Error */ - ce: "Compile error", + ce: { + title: "Compile error", + bgColor: "bg-orange-600", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#EA5A0C", + fgHex: "", + }, /** * Number of Runtime Error */ - re: "Runtime error", + re: { + title: "Runtime error", + bgColor: "bg-[#00AAAA]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#00AAAA", + fgHex: "", + }, /** * Number of Output Limit Exceeded */ - ole: "Output limit exceeded", + ole: { + title: "Output limit exceeded", + bgColor: "bg-[#000066]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#000066", + fgHex: "", + }, /** * Number of Submission Error */ - // sube: "Submission Error", + sube: { + title: "Submission Error", + bgColor: "bg-gray-500", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "6b7280", + fgHex: "", + }, /** * Number of Can't be Judged */ - // noj: "Can't be judged", + noj: { + title: "Can't be judged", + bgColor: "bg-gray-500", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "6b7280", + fgHex: "", + }, /** * Number of In Queue */ - // inq: number, + inq: { + title: "- In Queue -", + bgColor: "bg-gray-500", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "6b7280", + fgHex: "", + }, /** * Number of Restricted Function */ - // rf: "Restricted function", + rf: { + title: "Restricted function", + bgColor: "bg-gray-500", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "6b7280", + fgHex: "", + } } +// adding keys from `Submission.ver` into object `ProblemVerdictMap` +// will reduce the duplicate code +// these verdict IDs have the same styling properties +ProblemVerdictMap["0"] = {...ProblemVerdictMap.inq }; +ProblemVerdictMap["10"] = {...ProblemVerdictMap.sube }; +ProblemVerdictMap["15"] = {...ProblemVerdictMap.noj }; +ProblemVerdictMap["20"] = {...ProblemVerdictMap.inq }; +ProblemVerdictMap["30"] = {...ProblemVerdictMap.ce }; +ProblemVerdictMap["35"] = {...ProblemVerdictMap.rf }; +ProblemVerdictMap["40"] = {...ProblemVerdictMap.re }; +ProblemVerdictMap["45"] = {...ProblemVerdictMap.ole }; +ProblemVerdictMap["50"] = {...ProblemVerdictMap.tle }; +ProblemVerdictMap["60"] = {...ProblemVerdictMap.mle }; +ProblemVerdictMap["70"] = {...ProblemVerdictMap.wa }; +ProblemVerdictMap["80"] = {...ProblemVerdictMap.pe }; +ProblemVerdictMap["90"] = {...ProblemVerdictMap.ac }; +export { ProblemVerdictMap }; + +/////////////////////////////////////////////////////////////////////////////////////////////////// /** * Data structure returned when querying from url `https://uhunt.onlinejudge.org/api/p/num/:num` @@ -148,36 +271,7 @@ export type Problem = { rej: number; }; -export type VerdictType = { - /** - * Tailwindcss styles for foreground - */ - fgColor: string; - /** - * Tailwindcss styles for background - */ - bgColor: string; - /** - * Title to be displayed on the front end - */ - title: string; -}; - -export const Verdict: Record = { - 0 : { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "- In Queue -" }, - 10: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "Submission error" }, - 15: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "Can't be judged" }, - 20: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "- In Queue -" }, - 30: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-orange-600", title: "Compile error" }, - 35: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "Restricted function" }, - 40: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#00AAAA]", title: "Runtime error" }, - 45: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#000066]", title: "Output limit" }, - 50: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#0000FF]", title: "Time limit" }, - 60: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#0000AA]", title: "Memory limit" }, - 70: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#FF0000]", title: "Wrong answer" }, - 80: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#666600]", title: "Presentation error" }, - 90: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#00AA00]", title: "Accepted" }, -}; +/////////////////////////////////////////////////////////////////////////////////////////////////// export const Language: Record = { 1: "ANSI C", @@ -187,6 +281,8 @@ export const Language: Record = { 5: "C++11", }; +/////////////////////////////////////////////////////////////////////////////////////////////////// + /** * Submission data structure * @@ -227,15 +323,13 @@ export type Submission = { * Verdict properties * * contains - * - verdict title Ex: `Accepted`, or `Compile error` + * - title: verdict title Ex: `Accepted`, or `Compile error` * - fgColor: tailwindcss class to use for foreground color * - bgColor: tailwindcss class to use for background color + * - fgHex: hexcode of the property `fgColor` + * - bgHex: hexcode of property `bgColor` */ - verdict: { - title: string; - fgColor: string; - bgColor: string; - }; + verdict: ProblemVerdictType; /** * Language ID */ @@ -266,3 +360,6 @@ export type Submission = { uname: string; }; }; + +/////////////////////////////////////////////////////////////////////////////////////////////////// + From 9fe0374b5044f34df41cd092cb0dd2a6c5c1d479 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 11:01:04 -0700 Subject: [PATCH 14/60] chore(utils:processing): use array to filter out keys from `ProblemVerdictMap` ## what - use array to filter out keys from `ProblemVerdictMap` - use an array to filter which keys to keep in `ProblemVerdictMap` - filter out keys from ProblemVerdictMap using the array - update references - setting `tooltipTitle` - setting `fill` ## how ## why - to keep up with the changes in `ProblemVerdictMap` - check c041074 - be default `ProblemVerdictMap` contains all verdicts - don't need to show all of them in a bar chart ## where - ./src/utils/dataProcessing.ts ## usage --- src/utils/dataProcessing.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/utils/dataProcessing.ts b/src/utils/dataProcessing.ts index 45b34d0..75b93f8 100644 --- a/src/utils/dataProcessing.ts +++ b/src/utils/dataProcessing.ts @@ -1,4 +1,4 @@ -import { Problem, ProblemVerdictColors, ProblemVerdictMap } from "@/types"; +import { Problem, ProblemVerdictMap, ProblemVerdictType } from "@/types"; export type processedProblemVerdictBarChartType = { /** @@ -21,14 +21,24 @@ export type processedProblemVerdictBarChartType = { fill: string; }; export const processProblemNumBarChartData = (data: Problem) => { + // filter out the ProblemVerdictMap object and keep keys from `filter` array + const filter = ["ac", "pe", "wa", "tle", "mle", "ce", "re", "ole"] + // const filteredVerdicts: Record = {} + // filter.forEach(( key: string ) => { + // filteredVerdicts[key] = ProblemVerdictMap[key] + // }) + // + // obtained from https://stackoverflow.com/a/69676994/3053548 + const filteredVerdicts: Record = Object.fromEntries(filter.map(k => [k, ProblemVerdictMap[k]])) + const processedData:processedProblemVerdictBarChartType[] = [] - for(const [key, value] of Object.entries(ProblemVerdictMap)) { + for(const [key, value] of Object.entries(filteredVerdicts)) { processedData.push({ name: key.toUpperCase(), verdict: data[key as keyof Problem] as number, - tooltipTitle: value, - fill: ProblemVerdictColors[key], + tooltipTitle: value.title, + fill: ProblemVerdictMap[key].bgHex, }) } From 7ebf5226dbd2ca4f1aeaf330814fd29fa6fc7491 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:18:19 -0700 Subject: [PATCH 15/60] docs(types): add file header docs ## what - add file header docs ## how ## why - to explain what is this file used for ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index 0c62032..baea3f9 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,12 @@ +/* + * Contains all types for the upstream api server (uva uhunt https://uhunt.onlinejudge.org/api ) + * + * This file also contains objects that are used to convert a number from any of these types + * into a string. Ex: (submission verdict ID converted to a string). + */ + +/////////////////////////////////////////////////////////////////////////////////////////////////// + export const ProblemStatus: Record = { 0: "Unavailable", 1: "Normal", From f0d1e9da4a75fd4af71f1e72c9b787b8490098e9 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:22:27 -0700 Subject: [PATCH 16/60] feat(components:charts): add Recharts custom tooltip component ## what - add Recharts custom tooltip component ## how - obtained from - https://github.com/tremorlabs/tremor/blob/main/src/components/chart-elements/common/ChartTooltip.tsx - note - this tooltip is from `tremor.so` , and it uses tailwindcss custom configs, which means `tailwind.config.ts` needs to be updated - done in commit 1e5b14f ## why - this will be used in charts - this is will make chart tooltips more pleasing to look at compared to the default tooltips ## where - ./src/components/charts/Tooltip.tsx ## usage --- src/components/charts/Tooltip.tsx | 155 ++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/components/charts/Tooltip.tsx diff --git a/src/components/charts/Tooltip.tsx b/src/components/charts/Tooltip.tsx new file mode 100644 index 0000000..e360e7d --- /dev/null +++ b/src/components/charts/Tooltip.tsx @@ -0,0 +1,155 @@ +/* + * Custom Recharts tooltip component. + * Used in Rechart charts +* +* Code obtained from `tremor.so` +* https://github.com/tremorlabs/tremor/blob/main/src/components/chart-elements/common/ChartTooltip.tsx +*/ + +import { cn } from "@/lib/utils"; + +export const ChartTooltipFrame = ({ children }: { children: React.ReactNode }) => ( +
+ {children} +
+); + +export interface ChartTooltipRowProps { + value: string; + name: string; + color: string; +} + +export const ChartTooltipRow = ({ value, name, color }: ChartTooltipRowProps) => { + return ( +
+
+ +

+ {name} +

+
+

+ {value} +

+
+) }; + +export interface ChartTooltipProps { + active: boolean | undefined; + payload: any; + label: string; + // categoryColors: Map; + valueFormatter: { + (value: number): string; + } + labelFormatter?: { + (payload:any ) : string; + } +} + +const ChartTooltip = ({ + active, + payload, + label, + // categoryColors, + valueFormatter, + labelFormatter +}: ChartTooltipProps) => { + if (active && payload) { + const filteredPayload: any[] = payload.filter((item: any) => item.type !== "none"); + + return ( + +
+

+ {labelFormatter ? labelFormatter(payload) : label} +

+
+ +
+ {filteredPayload.map(({ value, name, payload }: { value: number; name: string, payload: any }, idx: number) => ( + + ))} +
+
+ ); + } + return null; +}; + +export default ChartTooltip; From 95c6bfa9d5b06a865bc212ca8ddc7617aedfe0f8 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:30:20 -0700 Subject: [PATCH 17/60] feat(components:charts): add `ProblemVerdictChart` component ## what - add `ProblemVerdictChart` component ## how - uses Rechart bar chart - uses custom tooltip component in `./src/components/charts/Tooltip` ## why - this will be used to display a problem number submission verdicts using a bar chart ## where - ./src/components/charts/ProblemVerdictChart.tsx ## usage --- src/components/charts/ProblemVerdictChart.tsx | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/components/charts/ProblemVerdictChart.tsx diff --git a/src/components/charts/ProblemVerdictChart.tsx b/src/components/charts/ProblemVerdictChart.tsx new file mode 100644 index 0000000..f65ef7e --- /dev/null +++ b/src/components/charts/ProblemVerdictChart.tsx @@ -0,0 +1,48 @@ +/* + * To display a problem number submission verdicts in a bar chart + * + * Uses Rechart bar chart + */ + +import { + Bar, + BarChart, + CartesianGrid, + ResponsiveContainer, + Tooltip, + XAxis, +} from "recharts"; + +import { processedProblemVerdictBarChartType } from "@/utils/dataProcessing"; +import ChartTooltip from "@/components/charts/Tooltip"; + +type Props = { + data: processedProblemVerdictBarChartType[]; +}; + +const ProblemVerdictChart = ({ data }: Props) => { + return ( + + + + + + `${new Intl.NumberFormat("us").format(number).toString()}`} + labelFormatter={(payload) => payload[0].payload.tooltipTitle} + /> + } + /> + + + + ); +}; + +export default ProblemVerdictChart; From ffff3a821609723e86f54bfd0ab08c613a146367 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:32:22 -0700 Subject: [PATCH 18/60] feat(page:problemNum): render `ProblemVerdictChart` component ## what - render `ProblemVerdictChart` component ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 41 ++++++++++---------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 7f12763..068690b 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -7,31 +7,13 @@ import Error from "@/components/error"; import { Card, CardContent, - CardDescription, - CardFooter, CardHeader, CardTitle, } from "@/components/ui/card" import { useFetchProblemNum } from "@/hooks"; import { problemNumSchema } from "@/schema"; - - -type ChartCard = { - title: string; - chart: React.ReactNode; -} -const ChartCard = ({title, chart}: ChartCard) => { - return ( - - - {title} - - - {chart} - - - ); -} +import { processProblemNumBarChartData } from "@/utils/dataProcessing"; +import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; type problemPageProps = { params: z.infer; @@ -46,7 +28,7 @@ const ProblemPage = ({ params }: problemPageProps) => { error: problemNumError, } = useFetchProblemNum(params.problemNum); - if (problemNumIsLoading) { + if (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) { return (

Loading: {params.problemNum}

@@ -78,22 +60,29 @@ const ProblemPage = ({ params }: problemPageProps) => { } if (problemNumIsSuccess) { - console.log(problemNumData); + // console.log(problemNumData); } - console.log("problem page: ", params.problemNum); + const processedProblemVerdictData = processProblemNumBarChartData(problemNumData.data) return (

Problem page: {params.problemNum}

- + + + Submission Verdicts + + + + +
- + {/* */}
- + {/* */}
From 72b4efe9aa5b8af0b0dd76a9bcddc3647ba0166c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 15:31:24 -0700 Subject: [PATCH 19/60] chore(schema:submission): add schema for endpoint `/api/submissions/overtime/[problemNum]` ## what - add schema for endpoint `/api/submissions/overtime/[problemNum]` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/schema/index.ts b/src/schema/index.ts index 1113fbc..eb692d1 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -8,3 +8,9 @@ export const problemNumSchema = z.object({ .number({ invalid_type_error: "Problem number must be a number" }) .min(1, "Problem number must be a number greater than 0"), }); + +export const submissionOvertimeSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}) From 87d9f5169eb95362b02be4f83a9095d298f61cf9 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 15:27:13 -0700 Subject: [PATCH 20/60] feat(api:submission): add endpoint `/api/submissions/overtime/[problemNum]` ## what - add endpoint `/api/submissions/overtime/[problemNum]` - get the submission count of a problem using problem number - if invalid `problem number` is given, a response of 400 will be returned - if the problem doesn't exist, a response of 404 will be returned - the endpoint will return a cumulative submission count - an array of object - time: momentjs time serialized - count: submission count from current index + the previous index ## how ## why - this will be used to chart submissions overtime of a problem ## where - ./src/app/api/submissions/overtime/[problemNum]/route.ts ## usage --- .../overtime/[problemNum]/route.ts | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/app/api/submissions/overtime/[problemNum]/route.ts diff --git a/src/app/api/submissions/overtime/[problemNum]/route.ts b/src/app/api/submissions/overtime/[problemNum]/route.ts new file mode 100644 index 0000000..0fd1cd1 --- /dev/null +++ b/src/app/api/submissions/overtime/[problemNum]/route.ts @@ -0,0 +1,93 @@ +import { z } from "zod"; + +import { submissionOvertimeSchema as schema } from "@/schema"; +import { NextResponse } from "next/server"; +import { uhuntProblemNumUrl, uhuntSubmissionCountUrl } from "@/utils/constants"; +import { Problem } from "@/types"; +import moment, { Moment } from "moment"; + +type getParamsType = { + params: z.infer; +}; + +export type getResponseType = { + name: string; + time: string; // time formatted to year + submissions: number; + fill: string; +} + +/** + * Get the submission count of a problem using `problem number` + * The submission count will be a cumulative submission count + * + * if invalid `problem number` is given, a response of 400 will be returned + * if the problem doesn't exist, a response of 400 will be returned + */ +export const GET = async (_request: Request, { params }: getParamsType) => { + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + const { problemNum } = params; + + const problemUrl = uhuntProblemNumUrl(problemNum); + const problemResponse = await fetch(problemUrl); + const problemData: Problem = await problemResponse.json(); + + if (Object.entries(problemData).length === 0) { + const message = { + message: `Problem number ${problemNum} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + const submssionCountUrl = uhuntSubmissionCountUrl(problemData.pid); + const submissionResponse = await fetch(submssionCountUrl); + const submissionData: number[] = await submissionResponse.json(); + + // sum the submission count + // each element is a cumulative sum of the previous + const data = submissionData.reduce( + (acc: number[], cur: number, i) => + i === 0 ? [cur] : [...acc, acc[acc.length - 1] + cur], + [], + ); + // map each element to the year. + // use values from the url + // Ex: https://uhunt.onlinejudge.org/api/p/count/36/1704664602/20/12 + // 36 : pid + // 1704664602 : the time to look back on. usually the current time (unix time). Look back from this time + // 20 : return number of years of submission. in this case 20 years + // 12 : Number of months each array element will represent + const submissionUrlSplit = submssionCountUrl.split("/"); + const thirtyDaysInSeconds = 60 * 60 * 24 * 30; + const responseData:getResponseType[] = data.map((cur, i) => { + const submissionTime = +submissionUrlSplit[7]; + const back = +submissionUrlSplit[8]; + const jump = +submissionUrlSplit[9]; + const unixTime = submissionTime - (back - i) * thirtyDaysInSeconds * jump; + + return { + name: "submissions", + time: moment.unix(unixTime).format("YYYY"), + submissions: cur, + fill: "#8884d8" + }; + }); + + return Response.json(responseData); +}; From 44ea845cc568c9bd7080d1e8719bf04a2d238e5a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 17:40:33 -0700 Subject: [PATCH 21/60] chore(hooks): add react-query hook to fetch submissions overtime ## what - add react-query hook to fetch submissions overtime ## how - fetch from api endpoint `/api/submissions/overtime/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 02649b1..5928149 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -15,7 +15,11 @@ export enum queryKey { /** * React query key for fetching a problem num */ - problemNum = "problem-num" + problemNum = "problem-num", + /** + * React query key for fetching submission overtime count + */ + submissionCount = "submission-overtime", } /** @@ -57,3 +61,16 @@ export const useFetchProblemNum = (problemNum: number) => { queryFn: async () => await axios.get(`/api/problems/${problemNum}`), }) } + +/** + * Fetch submissions overtime count + */ +export const useFetchSubmissionCount = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.submissionCount], + queryFn: async () => + await axios + .get(`/api/submissions/overtime/${problemNum}`) + .then((res) => res.data), + }); +} From fbe6a8c76f4a397bb2801e5d9a0885f24e7cc134 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 17:45:31 -0700 Subject: [PATCH 22/60] feat(components:charts): add `SubmissionsOvertimeChart` component ## what - add `SubmissionsOvertimeChart` component ## how - takes prop - data of type `SubmisionsOvertimeType[]` - use Recharts `AreaChart` component - use custom tooltip from `./src/components/charts/Tooltip` - use linear gradient for color the area chart ## why - this will be used to display submissions overtime of a problem using area chart ## where - ./src/components/charts/SubmissionsOvertimeChart.tsx ## usage --- .../charts/SubmissionsOvertimeChart.tsx | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/components/charts/SubmissionsOvertimeChart.tsx diff --git a/src/components/charts/SubmissionsOvertimeChart.tsx b/src/components/charts/SubmissionsOvertimeChart.tsx new file mode 100644 index 0000000..e1c0777 --- /dev/null +++ b/src/components/charts/SubmissionsOvertimeChart.tsx @@ -0,0 +1,58 @@ +import { + Area, + AreaChart, + CartesianGrid, + ResponsiveContainer, + Tooltip, + XAxis, +} from "recharts"; + +import { getResponseType as SubmissionOvertimeType } from "@/app/api/submissions/overtime/[problemNum]/route"; +import ChartTooltip from "@/components/charts/Tooltip"; + +type Props = { + data: SubmissionOvertimeType[]; +}; + +const SubmissionsOvertimeChart = ({ data }: Props) => { + return ( + + + + + ( + + `${new Intl.NumberFormat("us").format(number).toString()}` + } + // labelFormatter={(payload) => payload[0].payload.tooltipTitle} + /> + )} + /> + {/* linear gradient */} + {/* obtained from https://www.youtube.com/watch?v=e4en8kRqwe8 */} + + + + + + + + + + ); +}; + +export default SubmissionsOvertimeChart; From d3a62d9ca46feb2b268d4e400ab0becfd0ad1a52 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 17:49:34 -0700 Subject: [PATCH 23/60] feat(page:problemNum): render `SubmissionOvertimeChart` component ## what - render `SubmissionOvertimeChart` component ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 068690b..46f095d 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -10,10 +10,11 @@ import { CardHeader, CardTitle, } from "@/components/ui/card" -import { useFetchProblemNum } from "@/hooks"; +import { useFetchProblemNum, useFetchSubmissionCount } from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; +import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeChart"; type problemPageProps = { params: z.infer; @@ -27,8 +28,16 @@ const ProblemPage = ({ params }: problemPageProps) => { data: problemNumData, error: problemNumError, } = useFetchProblemNum(params.problemNum); + const { + isLoading: submissionCountIsLoading, + isSuccess: submissionCountIsSuccess, + isError: submissionCountIsError, + data: submissionCountData, + error: submissionCountError, + } = useFetchSubmissionCount(params.problemNum) - if (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) { + if (( problemNumIsLoading || !problemNumData || problemNumData.data === undefined ) || + ( submissionCountIsLoading || !submissionCountData)) { return (

Loading: {params.problemNum}

@@ -68,6 +77,7 @@ const ProblemPage = ({ params }: problemPageProps) => {

Problem page: {params.problemNum}

+ {/* Submission verdicts bar chart */}
@@ -78,8 +88,16 @@ const ProblemPage = ({ params }: problemPageProps) => {
+ {/* Submissions overtime line chart */}
- {/* */} + + + Submissions overtime + + + + +
{/* */} From c624a7867dcfd6a1667ff3d9e3ee89835c1e89a1 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 07:20:28 -0700 Subject: [PATCH 24/60] chore(types): add `Python` as a value in `Language` object ## what - add `Python` as a value in `Language` object ## how ## why - found a case where the language id was not present in the `Language` object. - after a little investigation, I found that this new id is for the language `Python` ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/index.ts b/src/types/index.ts index baea3f9..14aecb6 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -288,6 +288,7 @@ export const Language: Record = { 3: "C++", 4: "Pascal", 5: "C++11", + 6: "Python", }; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -371,4 +372,3 @@ export type Submission = { }; /////////////////////////////////////////////////////////////////////////////////////////////////// - From fdd935ec29b5b04dfbd13536f2dbbfbb96296dc9 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:18:03 -0700 Subject: [PATCH 25/60] chore(schema:submission): add schema for endpoint `/api/submissions/language/[problemNum]` ## what - add schema for endpoint `/api/submissions/language/[problemNum]` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/schema/index.ts b/src/schema/index.ts index eb692d1..2073ae0 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -14,3 +14,10 @@ export const submissionOvertimeSchema = z.object({ .number({ invalid_type_error: "Problem number must be a number" }) .min(1, "Problem number must be a number greater than 0"), }) + +export const submissionLangSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}) + From d3c208cf791009c6e0218883d82b797f592656d4 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:21:41 -0700 Subject: [PATCH 26/60] refactor(utils:constants): limit start range when fetching submissions of a problem ## what - limit start range when fetching submissions of a problem - limit submissions from today to 1 year ago and return 500 submissions - add params - startSubmission: starting point when searching for submissions - default to 1 year before in unix time. in other words, it will return submissions starting from 1 year ago - endSubmission: ending point when searching for submissions - default to current time. - limit: limit number of submissions to value provided - default to 500. in other words it will always return 500 submissions of a problem - currently not being used. - how to use - append the number to end - ex: https://uhunt.onlinejudge.org/api/p/subs/36/0/1707350533/500 - the 500 in the end of url will limit number of submissions to 500 ## how ## why - before the start range was set to 0, which would fetch every submission for the problem - this would fetch too many items and it would take a while to process them ## where - ./src/utils/constants.ts ## usage --- src/utils/constants.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 041e5e1..2dd4a58 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -74,10 +74,19 @@ export const uhuntUsername2UidUrl = (username: string) => /** * URL for getting Submission list of a problem using Problem ID + * NOTE: this will return a large number of array elements. Recommend to return 1 year worth of submissions + * * @param {String | Number} pid - problem ID + * @param {Number} [startSubmission=moment().subtract(1, 'years').unix()] - Unix timestamp for what time to start searching. Default is 1 year ago + * @param {Number} [endSubmission=moment().unix()] - Unix timestamp for what time to end searching. Default is right now + * @param {Number} [limit=500] - Number of submissions to return. Default is 500 submissions */ -export const uhuntProblemSubmissionListUrl = (pid: string | number) => - `${uhuntBaseApiUrl}/p/subs/${pid}/0/${moment().unix()}`; +export const uhuntProblemSubmissionListUrl = ( + pid: string | number, + startSubmission = moment().subtract(1, 'years').unix(), + endSubmission = moment().unix(), + limit = 500 +) => `${uhuntBaseApiUrl}/p/subs/${pid}/${startSubmission}/${endSubmission}/500`; /** * Get User submissions using UserID From f853c3c8f63c4074b71cf6669a0d1eabfc09b934 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:50:54 -0700 Subject: [PATCH 27/60] feat(api:submission:language): add endpoint `/api/submissions/language/[problemNum]` ## what - add endpoint `/api/submissions/language/[problemNum]` - get submissions language count of a problem using problem number - if invalid `problem number` is given, a response of 400 will be returned - if the problem doesn't exist, a response of 404 will be returned - fetch submissions of problem number - count submission language ## how ## why ## where - ./src/app/api/submissions/language/[problemNum]/route.tsx ## usage --- .../language/[problemNum]/route.tsx | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/app/api/submissions/language/[problemNum]/route.tsx diff --git a/src/app/api/submissions/language/[problemNum]/route.tsx b/src/app/api/submissions/language/[problemNum]/route.tsx new file mode 100644 index 0000000..3824b98 --- /dev/null +++ b/src/app/api/submissions/language/[problemNum]/route.tsx @@ -0,0 +1,76 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + +import { submissionLangSchema as schema } from "@/schema"; +import { + uhuntProblemNumUrl, + uhuntProblemSubmissionListUrl, +} from "@/utils/constants"; +import { Language, Problem, Submission } from "@/types"; + +type getParamsType = { + params: z.infer; +}; + +export type getResponseType = Record; + +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch problem stats + const { problemNum } = params; + + const problemUrl = uhuntProblemNumUrl(problemNum); + const problemResponse = await fetch(problemUrl); + const problemData: Problem = await problemResponse.json(); + + // return 404 if problem doesn't exist + if (Object.entries(problemData).length === 0) { + const message = { + message: `Problem number ${problemNum} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch submissions of the problem + const submissionsUrl = uhuntProblemSubmissionListUrl(problemData.pid); + const submissionResponse = await fetch(submissionsUrl, { cache: "no-cache" }); + const submissionData: Submission["msg"][] = await submissionResponse.json(); + + // map language id as key and 0 as value. (the value will be count of a submission language) + const languageObj = Object.keys(Language).reduce( + (acc: Record, cur: string) => { + acc[cur] = 0; + + return acc; + }, + {}, + ); + + // increment count of key-value for their respective language ID + const responseData: getResponseType = submissionData.reduce((acc, cur) => { + const languageId = cur.lan; + acc[languageId] = acc[languageId] + 1; + + return acc; + }, languageObj); + delete responseData["undefined"]; + + return Response.json(responseData); +}; From b13d7233f83cfba5b798c68f40e042e90ff40b80 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:54:30 -0700 Subject: [PATCH 28/60] chore(hooks): add react-query hook to fetch submission language ## what - add react-query hook to fetch submission language ## how - fetch from api endpoint `/api/submissions/language/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 5928149..8d904a4 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -20,6 +20,10 @@ export enum queryKey { * React query key for fetching submission overtime count */ submissionCount = "submission-overtime", + /** + * React query key for fetching submission by language + */ + submissionLang = "submission-language", } /** @@ -74,3 +78,17 @@ export const useFetchSubmissionCount = (problemNum: number) => { .then((res) => res.data), }); } + +/** + * Fetch submissions by language + */ +export const useFetchSubmissionLang = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.submissionLang], + queryFn: async () => + await axios + .get(`/api/submissions/language/${problemNum}`) + .then((res) => res.data), + }); +} + From f9d73bb37ea7fbd8c95c59b2e1c66d015887327f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:58:09 -0700 Subject: [PATCH 29/60] chore(utils:processing): add function to generate data for `recharts` radar chart ## what - add function to generate data for `recharts` radar chart ## how - loop through the object - add object to array - property `language`: string version of the language ID - property `count`: number of submissions of that language ID ## why - this will be used to generate the data needed for `recharts` radar chart to render ## where - ./src/utils/dataProcessing.ts ## usage --- src/utils/dataProcessing.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/utils/dataProcessing.ts b/src/utils/dataProcessing.ts index 75b93f8..9d34205 100644 --- a/src/utils/dataProcessing.ts +++ b/src/utils/dataProcessing.ts @@ -1,4 +1,5 @@ -import { Problem, ProblemVerdictMap, ProblemVerdictType } from "@/types"; +import { Language, Problem, ProblemVerdictMap, ProblemVerdictType } from "@/types"; +import {getResponseType as submissionLangType} from '@/app/api/submissions/language/[problemNum]/route' export type processedProblemVerdictBarChartType = { /** @@ -44,3 +45,25 @@ export const processProblemNumBarChartData = (data: Problem) => { return processedData } + +////////////////////////////////////////////////////////////////////////////////////////////////// + +export type processedSubmissionLangType = { + language: string; + count: number; +} + +export const processSubmissionLanguageRadarChart = ( + data: submissionLangType, +): processedSubmissionLangType[] => { + const processedData: processedSubmissionLangType[] = []; + + Object.entries(data).forEach(([key, value]) => { + processedData.push({ + language: Language[key], + count: value, + }); + }); + + return processedData; +}; From f88b60b496a34edd60f3e4e3edbd65afe8c52a96 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:04:41 -0700 Subject: [PATCH 30/60] feat(components:charts): add `SubmissionLanguageRadarChart` component ## what - add `SubmissionLanguageRadarChart` component ## how - takes a prop - data of type `/api/submissions/language/[problemNum]` GET response - process the data - use Recharts `radar` chart - use custom tooltip from `./src/components/charts/Tooltip` - use radial gradient for color inside of the radar ## why - this will display submissions by language of a problem using `radar` chart ## where - ./src/components/charts/SubmissionLanguageRadarChart.tsx ## usage --- .../charts/SubmissionLanguageRadarChart.tsx | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/components/charts/SubmissionLanguageRadarChart.tsx diff --git a/src/components/charts/SubmissionLanguageRadarChart.tsx b/src/components/charts/SubmissionLanguageRadarChart.tsx new file mode 100644 index 0000000..828c704 --- /dev/null +++ b/src/components/charts/SubmissionLanguageRadarChart.tsx @@ -0,0 +1,60 @@ +import { + Radar, + RadarChart, + PolarAngleAxis, + PolarGrid, + ResponsiveContainer, + Tooltip, +} from "recharts"; + +import ChartTooltip from "@/components/charts/Tooltip"; +import { processSubmissionLanguageRadarChart } from "@/utils/dataProcessing"; +import { getResponseType } from "@/app/api/submissions/language/[problemNum]/route"; + +type Props = { + data: getResponseType; +}; + +const SubmissionLanguageRadarChart = ({ data }: Props) => { + const processedData = processSubmissionLanguageRadarChart(data); + return ( + + + + + ( + + `${new Intl.NumberFormat("us").format(number).toString()}` + } + // labelFormatter={(payload) => payload[0].payload.tooltipTitle} + /> + )} + /> + + + + {/* */} + + + + + + + ); +}; + +export default SubmissionLanguageRadarChart; From 4a32e1c7f3d709fe2dd7d9b7ddc86122942d93ef Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:12:47 -0700 Subject: [PATCH 31/60] feat(page:problemNum): render `SubmissionLanguageRadarChart` component ## what - render `SubmissionLanguageRadarChart` component ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 46f095d..397b6d5 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -10,11 +10,12 @@ import { CardHeader, CardTitle, } from "@/components/ui/card" -import { useFetchProblemNum, useFetchSubmissionCount } from "@/hooks"; +import { useFetchProblemNum, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeChart"; +import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; type problemPageProps = { params: z.infer; @@ -35,9 +36,19 @@ const ProblemPage = ({ params }: problemPageProps) => { data: submissionCountData, error: submissionCountError, } = useFetchSubmissionCount(params.problemNum) + const { + isLoading: submissionLangIsLoading, + isSuccess: submissionLangIsSuccess, + isError: submissionLangIsError, + data: submissionLangData, + error: submissionLangError, + } = useFetchSubmissionLang(params.problemNum); + if (( problemNumIsLoading || !problemNumData || problemNumData.data === undefined ) || - ( submissionCountIsLoading || !submissionCountData)) { + ( submissionCountIsLoading || !submissionCountData) || + ( submissionLangIsLoading || !submissionLangData) + ) { return (

Loading: {params.problemNum}

@@ -100,7 +111,14 @@ const ProblemPage = ({ params }: problemPageProps) => {
- {/* */} + + + Submissions by language + + + + +
From 71288d98b929bb35ebd144e12bd307008c31ed72 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:35:40 -0700 Subject: [PATCH 32/60] chore(schema:problemNum:ranklist): add schema for endpoint `/api/problems/ranklist/[problemNum]` ## what - add schema for endpoint `/api/problems/ranklist/[problemNum]` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/schema/index.ts b/src/schema/index.ts index 2073ae0..460ba78 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -21,3 +21,10 @@ export const submissionLangSchema = z.object({ .min(1, "Problem number must be a number greater than 0"), }) +export const problemNumRanklistSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}) + + From 73703f4b71fc6d0f209dcce742a0286108282b3b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:30:10 -0700 Subject: [PATCH 33/60] feat(api:problemNum:ranklist): add endpoint `/api/problems/ranklist/[problemNum]` ## what - add endpoint `/api/problems/ranklist/[problemNum]` - get ranklist of a problem using problem number - if invalid `problem number` is given, a response of 400 will be returned - if the problem doesn't exist, a response of 404 will be returned - fetch problem ranklist - add extra properties - verdict object - fgColor - bgColor - title - fgHex - bgHex - language: convert language ID into a string - pnum: problem number - pTitle: name of the problem ## how ## why ## where - ./src/app/api/problems/ranklist/[problemNum]/route.ts ## usage --- .../problems/ranklist/[problemNum]/route.ts | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/app/api/problems/ranklist/[problemNum]/route.ts diff --git a/src/app/api/problems/ranklist/[problemNum]/route.ts b/src/app/api/problems/ranklist/[problemNum]/route.ts new file mode 100644 index 0000000..d84611d --- /dev/null +++ b/src/app/api/problems/ranklist/[problemNum]/route.ts @@ -0,0 +1,68 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + +import { problemNumRanklistSchema as schema } from "@/schema"; +import { Language, Problem, ProblemVerdictMap, Submission } from "@/types"; +import { uhuntProblemNumUrl, uhuntProblemRankUrl } from "@/utils/constants"; + +type getParamsType = { + params: z.infer; +}; + +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch problem stats + const { problemNum } = params; + + const problemUrl = uhuntProblemNumUrl(problemNum); + const problemResponse = await fetch(problemUrl); + const problemData: Problem = await problemResponse.json(); + + // return 404 if problem doesn't exist + if (Object.entries(problemData).length === 0) { + const message = { + message: `Problem number ${problemNum} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch problem ranklist + const ranklistUrl = uhuntProblemRankUrl(problemData.pid, 1, 10); + const ranklistResponse = await fetch(ranklistUrl); + const ranklistData: Submission["msg"][] = await ranklistResponse.json(); + + // add properties to the ranklist array + const converted = ranklistData.map((rank: Submission["msg"]) => { + rank.verdict = ProblemVerdictMap[rank.ver] || { + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgColor: "bg-gray-500", + title: "- In Queue -", + fgHex: "", + bgHex: "6b7280", + }; + rank.lan = Language[rank.lan] || "--"; + rank.pnum = problemData.num; + rank.pTitle = problemData.title; + + return rank; + }); + + return Response.json(converted); +}; From bd6d7590617e3a99d79bae497bb471ddc44f84bb Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:37:47 -0700 Subject: [PATCH 34/60] chore(hooks): add react-query hook to fetch problem ranklist ## what - add react-query hook to fetch problem ranklist ## how - fetch from endpoint `/api/problems/ranklist/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 8d904a4..77fee1c 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -16,6 +16,10 @@ export enum queryKey { * React query key for fetching a problem num */ problemNum = "problem-num", + /** + * React query key for fetching a problem ranklist + */ + problemRanklist = "problem-ranklist", /** * React query key for fetching submission overtime count */ @@ -92,3 +96,15 @@ export const useFetchSubmissionLang = (problemNum: number) => { }); } +/** + * Fetch problem ranklist + */ +export const useFetchProblemRanklist = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.problemRanklist], + queryFn: async () => + await axios + .get(`/api/problems/ranklist/${problemNum}`) + .then((res) => res.data), + }); +} From 5c1482a7431190583f842c000c6d0e7f1d61c77e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:40:12 -0700 Subject: [PATCH 35/60] chore(shadcn:data-table): add columns structure for problem ranklist table ## what - add columns structure for problem ranklist table - define which columns to display on the DataTable ## how ## why ## where - ./src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx ## usage --- .../components/data-table/ranklistColumns.tsx | 218 ++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx diff --git a/src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx b/src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx new file mode 100644 index 0000000..75142ed --- /dev/null +++ b/src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx @@ -0,0 +1,218 @@ +"use client"; + +import { ColumnDef } from "@tanstack/react-table"; +import moment from "moment"; +import Link from "next/link"; + +import { Badge } from "@/components/ui/badge"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { DataTableColumnHeader } from "@/components/ui/data-table/column-header"; +import { Submission } from "@/types"; +import { cn } from "@/lib/utils"; + +export const columns: ColumnDef[] = [ + { + accessorKey: "submissionId", + accessorFn: (row) => row.sid, + meta: { + // for displaying the columns dropdown + headerTitle: "Submission ID", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("submissionId")} + + ); + }, + }, + { + accessorKey: "problemNum", + accessorFn: (row) => row.pnum, + meta: { + // for displaying the columns dropdown + headerTitle: "Problem Number", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("problemNum")} + + ); + }, + enableSorting: false, + }, + { + accessorKey: "problemTitle", + accessorFn: (row) => row.pTitle, + meta: { + // for displaying the columns dropdown + headerTitle: "Problem Title", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("problemTitle")} + + ); + }, + enableSorting: false, + }, + { + accessorKey: "username", + accessorFn: (row) => `${row.name} (${row.uname})`, + meta: { + // for displaying the columns dropdown + headerTitle: "User (username)", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + if (row.original.uname === "--- ? ---") { + return ( +

{row.original.uname}

+ ) + } + return ( + + {row.getValue("username")} + + ); + }, + }, + { + accessorKey: "verdict", + accessorFn: (row) => row.verdict.title, + meta: { + // for displaying the columns dropdown + headerTitle: "Verdict", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("verdict")} + + ); + }, + enableSorting: false, + }, + { + accessorKey: "language", + accessorFn: (row) => row.lan, + meta: { + // for displaying the columns dropdown + headerTitle: "Language", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return

{row.getValue("language")}

; + }, + enableSorting: false, + }, + { + accessorKey: "runtime", + accessorFn: (row) => row.run, + meta: { + // for displaying the columns dropdown + headerTitle: "Runtime", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return

{((row.getValue("runtime") as number) / 1000).toFixed(3)}

; + }, + enableSorting: false, + }, + { + accessorKey: "rank", + accessorFn: (row) => row.rank, + meta: { + // for displaying the columns dropdown + headerTitle: "Rank", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return

{row.getValue("rank")}

; + }, + enableSorting: false, + }, + { + accessorKey: "submitTime", + accessorFn: (row) => row.sbt, + meta: { + // for displaying the columns dropdown + headerTitle: "Submit Time", + }, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( + + + +

+ {moment.unix(row.getValue("submitTime")).fromNow()} +

+
+ +

+ Submitted at{" "} + {moment.unix(row.getValue("submitTime")).toLocaleString()} +

+
+
+
+ ); + }, + enableSorting: false, + }, +]; From f0caca62b3c22560f219248816a23f4d94bfda32 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:51:59 -0700 Subject: [PATCH 36/60] build(npm): add package `@tanstack/react-virtual` ## what - add package `@tanstack/react-virtual` ## how ## why ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 26 ++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 27 insertions(+) diff --git a/package-lock.json b/package-lock.json index 873e06e..140d2fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.9", "@tanstack/react-table": "^8.11.6", + "@tanstack/react-virtual": "^3.0.1", "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -1974,6 +1975,22 @@ "react-dom": ">=16" } }, + "node_modules/@tanstack/react-virtual": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.0.1.tgz", + "integrity": "sha512-IFOFuRUTaiM/yibty9qQ9BfycQnYXIDHGP2+cU+0LrFFGNhVxCXSQnaY6wkX8uJVteFEBjUondX0Hmpp7TNcag==", + "dependencies": { + "@tanstack/virtual-core": "3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@tanstack/table-core": { "version": "8.11.6", "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.11.6.tgz", @@ -1986,6 +2003,15 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@tanstack/virtual-core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.0.0.tgz", + "integrity": "sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@types/d3-array": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", diff --git a/package.json b/package.json index 4915e60..8033b32 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.9", "@tanstack/react-table": "^8.11.6", + "@tanstack/react-virtual": "^3.0.1", "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", From 1f882442e48db5afee4c74c3b53556a6ec6776be Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:07:34 -0700 Subject: [PATCH 37/60] feat(components): add `VirtualTable` component ## what - add `VirtualTable` component ## how - uses - `@tanstack/react-table` to generate a table - `@tanstack/react-virtual` to handle virtualization ## why - to display a table without the `DataTable` functionality ## where - ./src/components/virtual-table/index.tsx ## usage --- src/components/virtual-table/index.tsx | 137 +++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 src/components/virtual-table/index.tsx diff --git a/src/components/virtual-table/index.tsx b/src/components/virtual-table/index.tsx new file mode 100644 index 0000000..ddc788b --- /dev/null +++ b/src/components/virtual-table/index.tsx @@ -0,0 +1,137 @@ +"use client"; + +import { useRef } from "react"; +import { + ColumnDef, + flexRender, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table"; +import { useVirtualizer } from "@tanstack/react-virtual"; + +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { cn } from "@/lib/utils"; + +interface Props { + columns: ColumnDef[]; + data: TData[]; + /** + * Height of the table. Must be a number denoting pixels + * + * Ex: 400 would mean 400px. this will be set using tailwindcss `h-[400px]` + */ + tableHeight: number; +} + +/** + * A Virtual table using `@tanstack/react-table`. The virtualization is from `@tanstack/react-virtual` + * + * Code obtained from + * - ./src/components/ui/data-table/index.tsx + * - https://codesandbox.io/p/devbox/tanstack-table-example-virtualized-rows-33u7fj?file=%2Fsrc%2Fmain.tsx + * - https://codesandbox.io/p/devbox/tanstack-react-virtual-example-dynamic-mr8t3x?file=%2Fsrc%2Fmain.tsx + */ +function VirtualTable({ + columns, + data, + tableHeight, +}: Props) { + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + }); + + const { rows } = table.getRowModel(); + + //The virtualizer needs to know the scrollable container element + const tableContainerRef = useRef(null); + + const rowVirtualizer = useVirtualizer({ + count: rows.length, + estimateSize: () => 33, //estimate row height for accurate scrollbar dragging + getScrollElement: () => tableContainerRef.current, + //measure dynamic row height, except in firefox because it measures table border height incorrectly + measureElement: + typeof window !== "undefined" && + navigator.userAgent.indexOf("Firefox") === -1 + ? (element) => element?.getBoundingClientRect().height + : undefined, + overscan: 5, + }); + + return ( +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext(), + )} + + ); + })} + + ))} + + + {rowVirtualizer.getVirtualItems().map((virtualRow) => { + const row = rows[virtualRow.index]; + + return ( + rowVirtualizer.measureElement(node)} + key={row.id} + > + {row.getVisibleCells().map((cell) => { + return ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext(), + )} + + ); + })} + + ); + })} + +
+
+
+ ); +} + +export default VirtualTable; From 2f9c6f909dea6ecb283bad80ff8730d9046ca33e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:19:20 -0700 Subject: [PATCH 38/60] feat(page:problemNum): render `VirtualTable` for ranklist ## what - render `VirtualTable` for ranklist - fetch problem ranklist using react-query hook - render data using VirtualTable ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 397b6d5..bbb4ce0 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -10,12 +10,15 @@ import { CardHeader, CardTitle, } from "@/components/ui/card" -import { useFetchProblemNum, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; +import { useFetchProblemNum, useFetchProblemRanklist, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeChart"; import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; +import { DataTable } from "@/components/ui/data-table"; +import { columns } from "./components/data-table/ranklistColumns"; +import VirtualTable from "@/components/virtual-table"; type problemPageProps = { params: z.infer; @@ -43,11 +46,20 @@ const ProblemPage = ({ params }: problemPageProps) => { data: submissionLangData, error: submissionLangError, } = useFetchSubmissionLang(params.problemNum); + const { + isLoading: problemRanklistIsLoading, + isSuccess: problemRanklistIsSuccess, + isError: problemRanklistIsError, + data: problemRanklistData, + error: problemRanklistError, + } = useFetchProblemRanklist(params.problemNum); - if (( problemNumIsLoading || !problemNumData || problemNumData.data === undefined ) || - ( submissionCountIsLoading || !submissionCountData) || - ( submissionLangIsLoading || !submissionLangData) + if ( + (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) || + (submissionCountIsLoading || !submissionCountData) || + (submissionLangIsLoading || !submissionLangData) || + (problemRanklistIsLoading || !problemRanklistData) ) { return (
@@ -122,7 +134,11 @@ const ProblemPage = ({ params }: problemPageProps) => {
-
ranklist
+
+

Ranklist (Top 10)

+ {/* */} + +
submissions
From 3a5c33636e774e2a4846de02ddbb773006700ee2 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:42:40 -0700 Subject: [PATCH 39/60] chore(schema:problemNum:submission): add schema for endpoint `/api/submissions/[problemNum]` ## what - add schema for endpoint `/api/submissions/[problemNum]` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/schema/index.ts b/src/schema/index.ts index 460ba78..c5cbe3f 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -27,4 +27,8 @@ export const problemNumRanklistSchema = z.object({ .min(1, "Problem number must be a number greater than 0"), }) - +export const problemNumSubmissionSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}) From a33642cfffa4b15d840d9129cc8b0e9a81ba2500 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:45:32 -0700 Subject: [PATCH 40/60] feat(api:problemNum:submission): add endpoint `/api/submissions/[problemNum]` ## what - add endpoint `/api/submissions/[problemNum]` - get submissions of a problem using problem number - if invalid `problem number` is given, a response of 400 will be returned - if the problem doesn't exist, a response of 404 will be returned - fetch problem submissions - add extra properties - verdict - fgColor - bgColor - title - fgHex - bgHex - language: convert language ID into a string - pnum: problem number - pTitle: name of the problem ## how ## why ## where - ./src/app/api/submissions/[problemNum]/route.ts ## usage --- src/app/api/submissions/[problemNum]/route.ts | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/app/api/submissions/[problemNum]/route.ts diff --git a/src/app/api/submissions/[problemNum]/route.ts b/src/app/api/submissions/[problemNum]/route.ts new file mode 100644 index 0000000..9de86ad --- /dev/null +++ b/src/app/api/submissions/[problemNum]/route.ts @@ -0,0 +1,77 @@ +import { z } from "zod"; + +import { problemNumSubmissionSchema as schema } from "@/schema"; +import { NextResponse } from "next/server"; +import { + uhuntProblemNumUrl, + uhuntProblemRankUrl, + uhuntProblemSubmissionListUrl, +} from "@/utils/constants"; +import { Language, Problem, ProblemVerdictMap, Submission } from "@/types"; +import moment from "moment"; + +type getParamsType = { + params: z.infer; +}; + +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch problem stats + const { problemNum } = params; + + const problemUrl = uhuntProblemNumUrl(problemNum); + const problemResponse = await fetch(problemUrl); + const problemData: Problem = await problemResponse.json(); + + // return 404 if problem doesn't exist + if (Object.entries(problemData).length === 0) { + const message = { + message: `Problem number ${problemNum} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch submissions of the problem + const submissionsUrl = uhuntProblemSubmissionListUrl( + problemData.pid, + moment().subtract(1, "years").unix(), + moment().unix(), + 20 + ); + const submissionResponse = await fetch(submissionsUrl, { cache: "no-cache" }); + const submissionData: Submission["msg"][] = await submissionResponse.json(); + + const converted = submissionData.map((rank: Submission["msg"]) => { + rank.verdict = ProblemVerdictMap[rank.ver] || { + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgColor: "bg-gray-500", + title: "- In Queue -", + fgHex: "", + bgHex: "6b7280", + }; + rank.lan = Language[rank.lan] || "--"; + rank.pnum = problemData.num; + rank.pTitle = problemData.title; + + return rank; + }); + + return Response.json(converted); +}; From ea04c0fc6e75deab12e751b2e24b4cb5c5aef252 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:49:32 -0700 Subject: [PATCH 41/60] chore(hooks): add react-query hook to fetch problem submissions ## what - add react-query hook to fetch problem submissions ## how - fetch from endpoint `/api/submissions/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 77fee1c..33e507b 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -20,6 +20,10 @@ export enum queryKey { * React query key for fetching a problem ranklist */ problemRanklist = "problem-ranklist", + /** + * React query key for fetching a problem ranklist + */ + problemSubmission = "problem-submission", /** * React query key for fetching submission overtime count */ @@ -67,6 +71,7 @@ export const useFetchProblemNum = (problemNum: number) => { return useQuery({ queryKey: [queryKey.problemNum], queryFn: async () => await axios.get(`/api/problems/${problemNum}`), + refetchOnWindowFocus: false }) } @@ -80,6 +85,7 @@ export const useFetchSubmissionCount = (problemNum: number) => { await axios .get(`/api/submissions/overtime/${problemNum}`) .then((res) => res.data), + refetchOnWindowFocus: false }); } @@ -93,6 +99,7 @@ export const useFetchSubmissionLang = (problemNum: number) => { await axios .get(`/api/submissions/language/${problemNum}`) .then((res) => res.data), + refetchOnWindowFocus: false }); } @@ -106,5 +113,21 @@ export const useFetchProblemRanklist = (problemNum: number) => { await axios .get(`/api/problems/ranklist/${problemNum}`) .then((res) => res.data), + refetchOnWindowFocus: false + }); +} + +/** + * Fetch problem submissions + */ +export const useFetchProblemSubmission = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.problemSubmission], + queryFn: async () => + await axios + .get(`/api/submissions/${problemNum}`) + .then((res) => res.data), + refetchOnWindowFocus: false }); } + From 2f41cb88ffb37e2d4c674cc0c2d008762d31f726 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:55:30 -0700 Subject: [PATCH 42/60] feat(page:problemNum): render `VirtualTable` for `Problem submissions` ## what - render `VirtualTable` for `Problem submissions` - fetch problem submissions using react-query hook - render data using VirtualTable ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index bbb4ce0..04cfc04 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -10,7 +10,7 @@ import { CardHeader, CardTitle, } from "@/components/ui/card" -import { useFetchProblemNum, useFetchProblemRanklist, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; +import { useFetchProblemNum, useFetchProblemRanklist, useFetchProblemSubmission, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; @@ -53,13 +53,21 @@ const ProblemPage = ({ params }: problemPageProps) => { data: problemRanklistData, error: problemRanklistError, } = useFetchProblemRanklist(params.problemNum); + const { + isLoading: problemSubmissionIsLoading, + isSuccess: problemSubmissionIsSuccess, + isError: problemSubmissionIsError, + data: problemSubmissionData, + error: problemSubmissionError, + } = useFetchProblemSubmission(params.problemNum); if ( (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) || (submissionCountIsLoading || !submissionCountData) || (submissionLangIsLoading || !submissionLangData) || - (problemRanklistIsLoading || !problemRanklistData) + (problemRanklistIsLoading || !problemRanklistData) || + (problemSubmissionIsLoading || !problemSubmissionData) ) { return (
@@ -139,7 +147,11 @@ const ProblemPage = ({ params }: problemPageProps) => { {/* */}
-
submissions
+
+

Submissions

+ {/* */} + +
); From 8f19b98daef1ea2c7fd18a556a28c61581c0163c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:57:11 -0700 Subject: [PATCH 43/60] chore(utils:constants): use the limit value when fetching problem submissions ## what - use the limit value when fetching problem submissions ## how - uses the parameter `limit` value - default is 500 ## why - this will limit the number of submissions returned ## where - ./src/utils/constants.ts ## usage --- src/utils/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 2dd4a58..b481ea5 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -86,7 +86,7 @@ export const uhuntProblemSubmissionListUrl = ( startSubmission = moment().subtract(1, 'years').unix(), endSubmission = moment().unix(), limit = 500 -) => `${uhuntBaseApiUrl}/p/subs/${pid}/${startSubmission}/${endSubmission}/500`; +) => `${uhuntBaseApiUrl}/p/subs/${pid}/${startSubmission}/${endSubmission}/${limit}`; /** * Get User submissions using UserID From 1c40b5d12eed9427f4638343e79884f8c1b5d94d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 21:11:33 -0700 Subject: [PATCH 44/60] chore(components:charts): change radar chart grid opacity depending on theme ## what - change rader chart grid opacity depending on theme - set radar chart grid opacity to 0.3 in dark mode - set radar chart grid opacity to 1.0 in light mode ## how ## why - the opacity of 0.3 is barely visible in light mode - cant change the fill color of the radar chart grid ## where - ./src/components/charts/SubmissionLanguageRadarChart.tsx ## usage --- src/components/charts/SubmissionLanguageRadarChart.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/charts/SubmissionLanguageRadarChart.tsx b/src/components/charts/SubmissionLanguageRadarChart.tsx index 828c704..21c3a29 100644 --- a/src/components/charts/SubmissionLanguageRadarChart.tsx +++ b/src/components/charts/SubmissionLanguageRadarChart.tsx @@ -6,6 +6,7 @@ import { ResponsiveContainer, Tooltip, } from "recharts"; +import { useTheme } from "next-themes"; import ChartTooltip from "@/components/charts/Tooltip"; import { processSubmissionLanguageRadarChart } from "@/utils/dataProcessing"; @@ -16,11 +17,13 @@ type Props = { }; const SubmissionLanguageRadarChart = ({ data }: Props) => { + const { theme } = useTheme(); const processedData = processSubmissionLanguageRadarChart(data); + return ( - + Date: Wed, 10 Jan 2024 21:22:49 -0700 Subject: [PATCH 45/60] chore(page:problemNum): render problem number and title ## what - render problem number and title ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 04cfc04..29b757c 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -106,7 +106,7 @@ const ProblemPage = ({ params }: problemPageProps) => { const processedProblemVerdictData = processProblemNumBarChartData(problemNumData.data) return (
-

Problem page: {params.problemNum}

+

{params.problemNum}: {problemNumData.data.title}

{/* Submission verdicts bar chart */}
From 1fd42fa0f53232e8f10c7323566582e3e7c59c66 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:19:48 -0700 Subject: [PATCH 46/60] feat(shadcn:data-table): set DataTable height if provided ## what - set DataTable height if provided ## how - take `height` as a prop - set the height of the table if it's defined - set the table to overflow-y if height is defined ## why - a replacement for `VirtualTable` - VirtualTable struggles to scroll when theres high amounts of items to render. DataTable can handle high items without issue - to have the ability to set the size of the DataTable ## where - ./src/components/ui/data-table/index.tsx ## usage --- src/components/ui/data-table/index.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/ui/data-table/index.tsx b/src/components/ui/data-table/index.tsx index 30c1f7b..8bae903 100644 --- a/src/components/ui/data-table/index.tsx +++ b/src/components/ui/data-table/index.tsx @@ -37,11 +37,16 @@ import { DataTablePagination } from "@/components/ui/data-table/pagination" interface DataTableProps { columns: ColumnDef[] data: TData[] + /** + * height of the table. If specified, it will overflow the table contents + */ + height?: number } export function DataTable({ columns, data, + height }: DataTableProps) { const [sorting, setSorting] = useState([]) const [columnVisibility, setColumnVisibility] = useState({}) @@ -128,7 +133,7 @@ export function DataTable({
-
+
{table.getHeaderGroups().map((headerGroup) => ( From 6a6a205ce0b096e54ae2be7885af35d999ec7a42 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:25:00 -0700 Subject: [PATCH 47/60] refactor(page:problemNum): use `DataTable` to render ranklist and submissions ## what - use `DataTable` to render ranklist and submissions - set a max height to the DataTable ## how ## why - DataTable can handle high volumes of items when scrolling ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 29b757c..1c19af8 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -144,13 +144,11 @@ const ProblemPage = ({ params }: problemPageProps) => {

Ranklist (Top 10)

- {/* */} - +

Submissions

- {/* */} - +
From fc9a834ff85364eb505e52b8a71b3bc88ed47190 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:28:34 -0700 Subject: [PATCH 48/60] refactor(api:problemNum:submission): set submission limit to 500 ## what - set submission limit to 500 ## how ## why - Since the DataTable is being used to display problem submissions, it can handle a high amount of items to be rendered ## where - ./src/app/api/submissions/[problemNum]/route.ts ## usage --- src/app/api/submissions/[problemNum]/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/submissions/[problemNum]/route.ts b/src/app/api/submissions/[problemNum]/route.ts index 9de86ad..560683d 100644 --- a/src/app/api/submissions/[problemNum]/route.ts +++ b/src/app/api/submissions/[problemNum]/route.ts @@ -53,7 +53,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { problemData.pid, moment().subtract(1, "years").unix(), moment().unix(), - 20 + 500 ); const submissionResponse = await fetch(submissionsUrl, { cache: "no-cache" }); const submissionData: Submission["msg"][] = await submissionResponse.json(); From 1865362a9ab89600fbafcd7817bef4cef5529200 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:15:51 -0700 Subject: [PATCH 49/60] chore(page:problemNum): add `Loading` component for `/problems/[problemNum]` page ## what - add `Loading` component for `/problems/[problemNum]` page ## how ## why - this will be used to display when fetching data on the `/problems/[problemNum]` page ## where - ./src/app/problems/[problemNum]/loading.tsx ## usage --- src/app/problems/[problemNum]/loading.tsx | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/app/problems/[problemNum]/loading.tsx diff --git a/src/app/problems/[problemNum]/loading.tsx b/src/app/problems/[problemNum]/loading.tsx new file mode 100644 index 0000000..ae01a6d --- /dev/null +++ b/src/app/problems/[problemNum]/loading.tsx @@ -0,0 +1,28 @@ +import Loading from '@/components/ui/data-table/loading' +import { Skeleton } from '@/components/ui/skeleton' +import React from 'react' + +const ProblemNumLoading = () => { + return ( +
+ +
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+ ) +} + +export default ProblemNumLoading From 2df5b87ad0454115f779202705e14a91b2eaf53c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:17:39 -0700 Subject: [PATCH 50/60] chore(page:problemNum): use `Loading` component ## what - use `Loading` component - use component from `./src/app/problems/[problemNum]/loading.tsx` ## how ## why - this will be used to display when fetching data for `problems/[problemNum]` page ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 1c19af8..e3b64b6 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -18,7 +18,7 @@ import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeCha import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; import { DataTable } from "@/components/ui/data-table"; import { columns } from "./components/data-table/ranklistColumns"; -import VirtualTable from "@/components/virtual-table"; +import Loading from "./loading" type problemPageProps = { params: z.infer; @@ -70,9 +70,7 @@ const ProblemPage = ({ params }: problemPageProps) => { (problemSubmissionIsLoading || !problemSubmissionData) ) { return ( -
-

Loading: {params.problemNum}

-
+ ); } From 6d8b8c145218d07f50f61f5f3c280546be53c68a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:33:32 -0700 Subject: [PATCH 51/60] feat(page:problemNum): set title as link to view problem pdf ## what - set title as link to view problem pdf ## how ## why - to be able to view the problem that is currently loaded ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index e3b64b6..0d963e0 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -19,6 +19,8 @@ import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguage import { DataTable } from "@/components/ui/data-table"; import { columns } from "./components/data-table/ranklistColumns"; import Loading from "./loading" +import Link from "next/link"; +import { uhuntViewProblemUrl } from "@/utils/constants"; type problemPageProps = { params: z.infer; @@ -104,8 +106,10 @@ const ProblemPage = ({ params }: problemPageProps) => { const processedProblemVerdictData = processProblemNumBarChartData(problemNumData.data) return (
-

{params.problemNum}: {problemNumData.data.title}

-
+ + {params.problemNum}: {problemNumData.data.title} + +
{/* Submission verdicts bar chart */}
From 7a09975c6a0b5af82077a8d3feb5a5a8628a401f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:45:22 -0700 Subject: [PATCH 52/60] style(page:problemNum): format code ## what - format code ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 45 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 0d963e0..f55134f 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -4,13 +4,14 @@ import { AxiosError } from "axios"; import { z } from "zod"; import Error from "@/components/error"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { - Card, - CardContent, - CardHeader, - CardTitle, -} from "@/components/ui/card" -import { useFetchProblemNum, useFetchProblemRanklist, useFetchProblemSubmission, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; + useFetchProblemNum, + useFetchProblemRanklist, + useFetchProblemSubmission, + useFetchSubmissionCount, + useFetchSubmissionLang, +} from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; @@ -18,7 +19,7 @@ import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeCha import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; import { DataTable } from "@/components/ui/data-table"; import { columns } from "./components/data-table/ranklistColumns"; -import Loading from "./loading" +import Loading from "./loading"; import Link from "next/link"; import { uhuntViewProblemUrl } from "@/utils/constants"; @@ -40,7 +41,7 @@ const ProblemPage = ({ params }: problemPageProps) => { isError: submissionCountIsError, data: submissionCountData, error: submissionCountError, - } = useFetchSubmissionCount(params.problemNum) + } = useFetchSubmissionCount(params.problemNum); const { isLoading: submissionLangIsLoading, isSuccess: submissionLangIsSuccess, @@ -52,7 +53,7 @@ const ProblemPage = ({ params }: problemPageProps) => { isLoading: problemRanklistIsLoading, isSuccess: problemRanklistIsSuccess, isError: problemRanklistIsError, - data: problemRanklistData, + data: problemRanklistData, error: problemRanklistError, } = useFetchProblemRanklist(params.problemNum); const { @@ -63,7 +64,6 @@ const ProblemPage = ({ params }: problemPageProps) => { error: problemSubmissionError, } = useFetchProblemSubmission(params.problemNum); - if ( (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) || (submissionCountIsLoading || !submissionCountData) || @@ -71,9 +71,7 @@ const ProblemPage = ({ params }: problemPageProps) => { (problemRanklistIsLoading || !problemRanklistData) || (problemSubmissionIsLoading || !problemSubmissionData) ) { - return ( - - ); + return ; } if (problemNumIsError) { @@ -103,10 +101,15 @@ const ProblemPage = ({ params }: problemPageProps) => { // console.log(problemNumData); } - const processedProblemVerdictData = processProblemNumBarChartData(problemNumData.data) + const processedProblemVerdictData = processProblemNumBarChartData( problemNumData.data); + return (
- + {params.problemNum}: {problemNumData.data.title}
@@ -146,11 +149,19 @@ const ProblemPage = ({ params }: problemPageProps) => {

Ranklist (Top 10)

- +

Submissions

- +
From 49176ee087c06d964a219bbe929e9b03842bc5ee Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:54:57 -0700 Subject: [PATCH 53/60] docs(docs:images): update images for `/problems/[problemNum]` page ## what - update images for `/problems/[problemNum]` page - loading - data loaded ## how ## why ## where - ./docs/images/page-problems-num-loading.png - ./docs/images/page-problems-num.png ## usage --- docs/images/page-problems-num-loading.png | Bin 0 -> 88325 bytes docs/images/page-problems-num.png | Bin 0 -> 330377 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/page-problems-num-loading.png create mode 100644 docs/images/page-problems-num.png diff --git a/docs/images/page-problems-num-loading.png b/docs/images/page-problems-num-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..47917861a2bf021b2cd3da74985a258a6a584fd0 GIT binary patch literal 88325 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 Q5CZ-v$^rnGl%fCs0B5MMlmGw# literal 0 HcmV?d00001 From d78c3441b3de8176b1ba309f3bee57a94b9b68aa Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:56:30 -0700 Subject: [PATCH 54/60] docs(readme): display screenshots for `/problems/[problemNum]` page ## what - display screenshots for `/problems/[problemNum]` page ## how ## why ## where - ./README.md ## usage --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 4ae3bd0..53fd868 100644 --- a/README.md +++ b/README.md @@ -50,5 +50,9 @@ Check out our [Next.js deployment documentation](https://nextjs.org/docs/deploym ![Problems page 2](docs/images/page-problems.png) +### Problems page (`/problems/[problemNum]`) +![Problems num page 1](docs/images/page-problems-num-loading.png) + +![Problems num page 2](docs/images/page-problems-num.png) From 6fda608ba74df226651616d687f5973fd48ee5f2 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:11:53 -0700 Subject: [PATCH 55/60] refactor(hooks:problemNum): extract data after fetching ## what - extract data after fetching when fetching from `/api/problems/[problemNum]` ## how ## why - this will prevent error `variable may be undefined` when using the hooks data ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 33e507b..5e91d80 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -70,10 +70,11 @@ export const useFetchProblems = () => { export const useFetchProblemNum = (problemNum: number) => { return useQuery({ queryKey: [queryKey.problemNum], - queryFn: async () => await axios.get(`/api/problems/${problemNum}`), - refetchOnWindowFocus: false - }) -} + queryFn: async () => + await axios.get(`/api/problems/${problemNum}`).then((res) => res.data), + refetchOnWindowFocus: false, + }); +}; /** * Fetch submissions overtime count From 99ff8ef9a75a1ac5686ded7cf818549c3bb37ec8 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:26:36 -0700 Subject: [PATCH 56/60] refactor(page:problemNum): update reference when fetching problemNum stats ## what - update reference when fetching problemNum stats ## how ## why - to accommodate changes made in `./src/hooks/index.ts` - check 46ca37e ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index f55134f..acb2d30 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -65,11 +65,11 @@ const ProblemPage = ({ params }: problemPageProps) => { } = useFetchProblemSubmission(params.problemNum); if ( - (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) || - (submissionCountIsLoading || !submissionCountData) || - (submissionLangIsLoading || !submissionLangData) || - (problemRanklistIsLoading || !problemRanklistData) || - (problemSubmissionIsLoading || !problemSubmissionData) + problemNumIsLoading || + submissionCountIsLoading || + submissionLangIsLoading || + problemRanklistIsLoading || + problemSubmissionIsLoading ) { return ; } @@ -101,16 +101,16 @@ const ProblemPage = ({ params }: problemPageProps) => { // console.log(problemNumData); } - const processedProblemVerdictData = processProblemNumBarChartData( problemNumData.data); + const processedProblemVerdictData = processProblemNumBarChartData(problemNumData); return (
- {params.problemNum}: {problemNumData.data.title} + {params.problemNum}: {problemNumData.title}
{/* Submission verdicts bar chart */} From 6c2db2309cf8652ece6394c4564ad72e1566f0dc Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:29:32 -0700 Subject: [PATCH 57/60] style(hooks): format code ## what - format code ## how ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 5e91d80..c6ea4f5 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -49,7 +49,7 @@ export const useFetchLiveSubmission = (pollId = 0, fetchInterval = 5000) => { return data; }, refetchInterval: fetchInterval, - staleTime: fetchInterval + staleTime: fetchInterval, }); }; @@ -60,7 +60,7 @@ export const useFetchProblems = () => { return useQuery({ queryKey: [queryKey.allProblems], queryFn: async () => axios.get("/api/problems").then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); }; @@ -86,9 +86,9 @@ export const useFetchSubmissionCount = (problemNum: number) => { await axios .get(`/api/submissions/overtime/${problemNum}`) .then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); -} +}; /** * Fetch submissions by language @@ -100,9 +100,9 @@ export const useFetchSubmissionLang = (problemNum: number) => { await axios .get(`/api/submissions/language/${problemNum}`) .then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); -} +}; /** * Fetch problem ranklist @@ -114,9 +114,9 @@ export const useFetchProblemRanklist = (problemNum: number) => { await axios .get(`/api/problems/ranklist/${problemNum}`) .then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); -} +}; /** * Fetch problem submissions @@ -128,7 +128,6 @@ export const useFetchProblemSubmission = (problemNum: number) => { await axios .get(`/api/submissions/${problemNum}`) .then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); -} - +}; From 520d15a8a033dc195c0c17e0aa912cb08b2ae327 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:41:18 -0700 Subject: [PATCH 58/60] build(npm): add script `lint:tsc` and `lint:eslint` ## what - add npm script - `lint:tsc` - `lint:eslint` - update npm script - `lint` ## how ## why - to lint code using typescript and eslint separately and together ## where - ./package.json ## usage --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8033b32..88420a6 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "npm run lint:tsc && npm run lint:eslint", + "lint:tsc": "tsc --build tsconfig.json .", + "lint:eslint": "next lint" }, "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", From b1bd3d613d959b70df15062360dc7912a3f0a669 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:43:55 -0700 Subject: [PATCH 59/60] refactor(hooks): apply types returned when fetching ## what - apply types returned when fetching ## how ## why - to provide a data type when data is fetched ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index c6ea4f5..e6f5122 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,7 +1,7 @@ import axios from "axios"; import { useQuery } from "@tanstack/react-query"; -import { Submission } from "@/types"; +import { Problem, Submission } from "@/types"; /** * Enum for React Query Keys when using React-query @@ -59,7 +59,7 @@ export const useFetchLiveSubmission = (pollId = 0, fetchInterval = 5000) => { export const useFetchProblems = () => { return useQuery({ queryKey: [queryKey.allProblems], - queryFn: async () => axios.get("/api/problems").then((res) => res.data), + queryFn: async () => axios.get("/api/problems").then((res) => res.data), refetchOnWindowFocus: false, }); }; @@ -71,7 +71,7 @@ export const useFetchProblemNum = (problemNum: number) => { return useQuery({ queryKey: [queryKey.problemNum], queryFn: async () => - await axios.get(`/api/problems/${problemNum}`).then((res) => res.data), + await axios.get(`/api/problems/${problemNum}`).then((res) => res.data), refetchOnWindowFocus: false, }); }; @@ -112,7 +112,7 @@ export const useFetchProblemRanklist = (problemNum: number) => { queryKey: [queryKey.problemRanklist], queryFn: async () => await axios - .get(`/api/problems/ranklist/${problemNum}`) + .get(`/api/problems/ranklist/${problemNum}`) .then((res) => res.data), refetchOnWindowFocus: false, }); @@ -126,7 +126,7 @@ export const useFetchProblemSubmission = (problemNum: number) => { queryKey: [queryKey.problemSubmission], queryFn: async () => await axios - .get(`/api/submissions/${problemNum}`) + .get(`/api/submissions/${problemNum}`) .then((res) => res.data), refetchOnWindowFocus: false, }); From e91a596dac9fd7e587ca6e133e508a091a5b4b22 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:44:45 -0700 Subject: [PATCH 60/60] chore: apply types to the fetched data using react-query hooks ## what - apply types to the fetched data using react-query hooks ## how ## why - to deal with typescript errors - to accomodate changes made from d957416 ## where - ./src/app/problems/[problemNum]/page.tsx - ./src/app/problems/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 12 ++++++------ src/app/problems/page.tsx | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index acb2d30..9eeee8b 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -22,6 +22,7 @@ import { columns } from "./components/data-table/ranklistColumns"; import Loading from "./loading"; import Link from "next/link"; import { uhuntViewProblemUrl } from "@/utils/constants"; +import { Problem, Submission } from "@/types"; type problemPageProps = { params: z.infer; @@ -101,16 +102,15 @@ const ProblemPage = ({ params }: problemPageProps) => { // console.log(problemNumData); } - const processedProblemVerdictData = processProblemNumBarChartData(problemNumData); - + const processedProblemVerdictData = processProblemNumBarChartData( problemNumData as Problem); return (
- {params.problemNum}: {problemNumData.title} + {params.problemNum}: {( problemNumData as Problem ).title}
{/* Submission verdicts bar chart */} @@ -151,7 +151,7 @@ const ProblemPage = ({ params }: problemPageProps) => {

Ranklist (Top 10)

@@ -159,7 +159,7 @@ const ProblemPage = ({ params }: problemPageProps) => {

Submissions

diff --git a/src/app/problems/page.tsx b/src/app/problems/page.tsx index a1d05d6..30764b2 100644 --- a/src/app/problems/page.tsx +++ b/src/app/problems/page.tsx @@ -4,6 +4,7 @@ import { DataTable } from "@/components/ui/data-table"; import DataTableLoading from "@/components/ui/data-table/loading"; import { columns } from "@/app/problems/components/data-table/columns"; import { useFetchProblems } from "@/hooks"; +import { Problem } from "@/types"; const ProblemsPage = () => { const { data, isLoading, isError } = useFetchProblems(); @@ -24,7 +25,7 @@ const ProblemsPage = () => { return (

All Problems

- +
); };