From 208a1a1fffa1f415570fe6b437fe3e4a983039be Mon Sep 17 00:00:00 2001 From: falendikategar Date: Fri, 16 Aug 2024 14:10:33 +0700 Subject: [PATCH] Reapply "create: fetch data in assessmentsQueries to FE still error" This reverts commit 51d249f4c6f466ee42ef95ade704c597deabb849. --- .../queries/assessmentsQueries.ts | 72 ++++++++++ .../assessments/index.lazy.tsx | 131 ++++++++++++++++++ .../_dashboardLayout/assessments/index.tsx | 5 + 3 files changed, 208 insertions(+) create mode 100644 apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts create mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx create mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx diff --git a/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts b/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts new file mode 100644 index 0000000..c15dd34 --- /dev/null +++ b/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts @@ -0,0 +1,72 @@ +import client from "@/honoClient"; +import fetchRPC from "@/utils/fetchRPC"; +import { queryOptions } from "@tanstack/react-query"; +import { InferRequestType } from "hono"; + +export const questionsQueryOptions = (page: number, limit: number, q?: string) => + queryOptions({ + queryKey: ["questions", { page, limit, q }], + queryFn: async () => { + const result = await fetchRPC( + client.assessments.getAllQuestions.$get({ + query: { + limit: String(limit), + page: String(page), + q, + }, + }) + ); + console.log('Result from fetchRPC:', result); + return result; + }, + }); + + +export const getUserByIdQueryOptions = (userId: string | undefined) => + queryOptions({ + queryKey: ["user", userId], + queryFn: () => + fetchRPC( + client.users[":id"].$get({ + param: { + id: userId!, + }, + query: {}, + }) + ), + enabled: Boolean(userId), + }); + +export const createUser = async ( + form: InferRequestType["form"] +) => { + return await fetchRPC( + client.users.$post({ + form, + }) + ); +}; + +export const updateUser = async ( + form: InferRequestType<(typeof client.users)[":id"]["$patch"]>["form"] & { + id: string; + } +) => { + return await fetchRPC( + client.users[":id"].$patch({ + param: { + id: form.id, + }, + form, + }) + ); +}; + +export const deleteUser = async (id: string) => { + return await fetchRPC( + client.users[":id"].$delete({ + param: { id }, + form: {}, + }) + ); +}; diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx new file mode 100644 index 0000000..15175be --- /dev/null +++ b/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx @@ -0,0 +1,131 @@ +import { createLazyFileRoute } from '@tanstack/react-router' + +import { Button } from "@/shadcn/components/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/shadcn/components/ui/card" +import { Label } from "@/shadcn/components/ui/label" +import { RadioGroup, RadioGroupItem } from "@/shadcn/components/ui/radio-group" +// import ExtractQueryDataType from '@/types/ExtractQueryDataType' +// import { createColumnHelper } from '@tanstack/react-table' +import { questionsQueryOptions } from "@/modules/assessmentsManagement/queries/assessmentsQueries"; +// import { useForm } from '@mantine/form' +import { useQuery } from '@tanstack/react-query' + +// type DataType = ExtractQueryDataType; +// const columnHelper = useForm(); + +export function CardWithAssessment() { + // const { handleSubmit, form } = useForm(); + + const { page = 1, limit = 10, q = '' } = {} + + const { data, isLoading, isError } = useQuery(questionsQueryOptions(page, limit, q)); + + console.log(data) + + if (isLoading) return
Loading...
; + if (isError) return
Error fetching data
; + + // const groupedQuestions = data?.reduce((acc, item) => { + // const { subAspectId, subAspectName } = item; + // if (!acc[subAspectId]) { + // acc[subAspectId] = { + // subAspectName, + // questions: [], + // }; + // } + // acc[subAspectId].questions.push(item); + // return acc; + // }, {} as Record); + + + const renderQuestions = () => { + return data?.data.map((subAspect) => ( +
+

{subAspect.subAspectName}

+ {data?.data.map((question) => ( +
+ + + {data?.data.map((option) => ( +
+ + +
+ ))} +
+
+ ))} +
+ )); + }; + + const renderQuestionNumbers = () => { + const questionNumbers: number[] = []; + data?.data.forEach((subAspect) => { + data?.data.forEach((question, index) => { + questionNumbers.push(index + 1); + }); + }); + + return questionNumbers.map((num) => ( + + )); + }; + + return ( + +
+ + Pertanyaan + + Bacalah pertanyaan dengan hati-hati dan jawablah dengan teliti! + + + +
+
+ {renderQuestions()} +
+
+
+ + + + +
+
+ + Daftar Nomor + + +
+
+ {renderQuestionNumbers()} +
+
+
+
+
+ ); +} + +export const Route = createLazyFileRoute('/_dashboardLayout/assessments/')({ + component: () => +
+

+ Halaman Assessments +

+ +
+}) \ No newline at end of file diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx new file mode 100644 index 0000000..57a1b20 --- /dev/null +++ b/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx @@ -0,0 +1,5 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/_dashboardLayout/assessments/')({ + component: () =>
Hello /_dashboardLayout/assessments/!
+}) \ No newline at end of file