|
1 |
| -import { LoaderFunctionArgs, Navigate, useLoaderData } from 'react-router-dom'; |
| 1 | +import { QueryClient, useSuspenseQuery } from '@tanstack/react-query'; |
| 2 | +import { useMemo } from 'react'; |
| 3 | +import { type LoaderFunctionArgs, Navigate, useLoaderData } from 'react-router-dom'; |
2 | 4 |
|
3 | 5 | import { Editor } from '@/components/blocks/interview/editor';
|
| 6 | +import { QuestionDetails } from '@/components/blocks/questions/details'; |
4 | 7 | import { Card } from '@/components/ui/card';
|
| 8 | +import { questionDetailsQuery } from '@/lib/queries/question-details'; |
5 | 9 | import { ROUTES } from '@/lib/routes';
|
6 | 10 |
|
7 |
| -export const loader = ({ params, request }: LoaderFunctionArgs) => { |
8 |
| - const roomId = params.roomId; |
9 |
| - const url = new URL(request.url); |
10 |
| - const questionId = url.searchParams.get('questionId'); |
11 |
| - |
12 |
| - // TODO: Load question data (copy from question loader) |
13 |
| - |
14 |
| - return { |
15 |
| - roomId, |
16 |
| - questionId, |
| 11 | +export const loader = |
| 12 | + (queryClient: QueryClient) => |
| 13 | + async ({ params, request }: LoaderFunctionArgs) => { |
| 14 | + const roomId = params.roomId; |
| 15 | + const url = new URL(request.url); |
| 16 | + const questionId = Number.parseInt(url.searchParams.get('questionId')!); |
| 17 | + await queryClient.ensureQueryData(questionDetailsQuery(questionId)); |
| 18 | + return { |
| 19 | + roomId, |
| 20 | + questionId, |
| 21 | + }; |
17 | 22 | };
|
18 |
| -}; |
19 | 23 |
|
20 | 24 | export const InterviewRoom = () => {
|
21 |
| - const { roomId, questionId } = useLoaderData() as ReturnType<typeof loader>; |
| 25 | + const { questionId, roomId } = useLoaderData() as Awaited<ReturnType<ReturnType<typeof loader>>>; |
| 26 | + const { data: details } = useSuspenseQuery(questionDetailsQuery(questionId)); |
| 27 | + const questionDetails = useMemo(() => { |
| 28 | + return details.question; |
| 29 | + }, [details]); |
22 | 30 | return !questionId || !roomId ? (
|
23 | 31 | <Navigate to={ROUTES.HOME} />
|
24 | 32 | ) : (
|
25 | 33 | <div className='flex flex-1 overflow-hidden'>
|
26 | 34 | <Card className='border-border m-4 w-1/3 max-w-[500px] overflow-hidden p-4 md:w-2/5'>
|
27 |
| - {/* Question Deets */} |
| 35 | + <QuestionDetails {...{ questionDetails }} /> |
28 | 36 | </Card>
|
29 | 37 | <div className='flex flex-1 flex-col overflow-hidden'>
|
30 | 38 | <Editor room={roomId as string} />
|
|
0 commit comments