Skip to content

Commit db10cb7

Browse files
committed
PEER-234: Add question details
Signed-off-by: SeeuSim <[email protected]>
1 parent bbb3a35 commit db10cb7

File tree

5 files changed

+35
-24
lines changed

5 files changed

+35
-24
lines changed

frontend/src/lib/hooks/use-collab.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export const useCollab = (roomId: string) => {
4646
let provider = null;
4747
try {
4848
provider = new WebsocketProvider(COLLAB_WS, roomId, doc);
49+
provider.connect();
4950
} catch (err) {
5051
const { name, message } = err as Error;
5152
console.error(
@@ -85,7 +86,7 @@ export const useCollab = (roomId: string) => {
8586
provider.disconnect();
8687
};
8788
}
88-
}, [editorRef]);
89+
}, [editorRef, roomId]);
8990
return {
9091
editorRef,
9192
extensions: [...extensions, langExtension],
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { getQuestionDetails } from '@/services/question-service';
2+
import { queryOptions } from '@tanstack/react-query';
3+
4+
export const questionDetailsQuery = (id: number) =>
5+
queryOptions({
6+
queryKey: ['qn', 'details', id],
7+
queryFn: async ({ signal: _ }) => getQuestionDetails(id),
8+
});

frontend/src/lib/router.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const router = createBrowserRouter([
4242
},
4343
{
4444
path: ROUTES.INTERVIEW,
45-
loader: interviewRoomLoader,
45+
loader: interviewRoomLoader(queryClient),
4646
element: <InterviewRoom />,
4747
},
4848
],

frontend/src/routes/interview/[room]/main.tsx

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,38 @@
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';
24

35
import { Editor } from '@/components/blocks/interview/editor';
6+
import { QuestionDetails } from '@/components/blocks/questions/details';
47
import { Card } from '@/components/ui/card';
8+
import { questionDetailsQuery } from '@/lib/queries/question-details';
59
import { ROUTES } from '@/lib/routes';
610

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+
};
1722
};
18-
};
1923

2024
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]);
2230
return !questionId || !roomId ? (
2331
<Navigate to={ROUTES.HOME} />
2432
) : (
2533
<div className='flex flex-1 overflow-hidden'>
2634
<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 }} />
2836
</Card>
2937
<div className='flex flex-1 flex-col overflow-hidden'>
3038
<Editor room={roomId as string} />

frontend/src/routes/questions/details/main.tsx

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { QueryClient, queryOptions, useSuspenseQuery } from '@tanstack/react-query';
1+
import { QueryClient, useSuspenseQuery } from '@tanstack/react-query';
22
import { useMemo } from 'react';
33
import { LoaderFunctionArgs, useLoaderData } from 'react-router-dom';
44

@@ -7,14 +7,8 @@ import { Card } from '@/components/ui/card';
77

88
import { useCrumbs } from '@/lib/hooks/use-crumbs';
99
import { usePageTitle } from '@/lib/hooks/use-page-title';
10-
import { getQuestionDetails } from '@/services/question-service';
1110
import { QuestionDetails } from '@/components/blocks/questions/details';
12-
13-
const questionDetailsQuery = (id: number) =>
14-
queryOptions({
15-
queryKey: ['qn', 'details', id],
16-
queryFn: async ({ signal: _ }) => getQuestionDetails(id),
17-
});
11+
import { questionDetailsQuery } from '@/lib/queries/question-details';
1812

1913
export const loader =
2014
(queryClient: QueryClient) =>

0 commit comments

Comments
 (0)