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[]}) => { const [formData, setFormData] = useState<(Record)>({}); - console.log(formData); - const questionComponents = questions.map((question, index) => { return }) return ( -
+ {questionComponents}
diff --git a/src/server/api/routers/auditoryResources.ts b/src/server/api/routers/auditoryResources.ts index 2eb22d4..2e016e1 100644 --- a/src/server/api/routers/auditoryResources.ts +++ b/src/server/api/routers/auditoryResources.ts @@ -1,3 +1,4 @@ +import { Platform } from "@prisma/client"; import { z } from "zod"; import { @@ -20,4 +21,18 @@ export const auditoryResourceRouter = createTRPCRouter({ getAll: publicProcedure.query(({ ctx }) => { return ctx.prisma.auditoryResource.findMany(); }), + + search: publicProcedure + .input(z.object({ + ages: z.object({ + min: z.number().int(), + max: z.number().int(), + }).optional(), + platforms: z.string().array().optional() + })) + .query(({ctx}) => { + return { + test: "hello", + }; + }), });