diff --git a/src/pages/resources/index.tsx b/src/pages/resources/index.tsx index f3a45bd..9d3a2e7 100644 --- a/src/pages/resources/index.tsx +++ b/src/pages/resources/index.tsx @@ -1,6 +1,8 @@ +import { Platform, RangeInput, Skill, SkillLevel } from "@prisma/client"; import { createProxySSGHelpers } from "@trpc/react-query/ssg"; import Head from "next/head"; import { useRouter } from "next/router"; +import { ParsedUrlQuery } from "querystring"; import ResourceTable from "~/components/ResourceTable"; import { appRouter } from "~/server/api/root"; import { prisma } from "~/server/db"; @@ -24,15 +26,64 @@ export async function getStaticProps() { }; } +interface ViewDetails { + page?: number; +} + +interface SearchQuery { + age?: RangeInput, + platforms?: Platform[], + skill_levels?: SkillLevel[], + skills?: Skill[], +} + +const parseQueryData = (query: ParsedUrlQuery): SearchQuery & ViewDetails => { + const view = { + page: Number(query["page"] ?? 1), + } + const filter: SearchQuery = {}; + + if (query["ages"]) { + const ages: number[] = []; + + if (Array.isArray(query["ages"])) { + const validRanges = query["ages"].filter((value) => { + return value.split("-").length == 2; + }); + + validRanges.forEach((value) => { + const split = value.split("-"); + ages.push(Number(split[0])); + ages.push(Number(split[1])); + }); + } else { + const split = query["ages"].split("-"); + ages.push(Number(split[0])); + ages.push(Number(split[1])); + } + + filter.age = { + min: Math.min(...ages), + max: Math.max(...ages), + } + } + + if (query["platforms"]) + + return {...filter, ...view}; +} + const Resources = () => { const router = useRouter() + + const queryData = parseQueryData(router.query); + const currentPage = queryData.page; + const query = api.auditoryResource.getAll.useQuery(); if (!query.data) { return <>> } - const currentPage = Number(router.query["page"] ?? 1) - return ( <>
diff --git a/src/pages/resources/search.tsx b/src/pages/resources/search.tsx index 55d578d..f9d236b 100644 --- a/src/pages/resources/search.tsx +++ b/src/pages/resources/search.tsx @@ -167,14 +167,12 @@ const ChoiceQuestion = ({question, formData, updateFormData}: {question: Questio const SearchForm = ({questions}: {questions: Question