From 49cf77633c771e10bec829b2a5b0e3aca164f426 Mon Sep 17 00:00:00 2001 From: LaurensBartelds Date: Tue, 21 Apr 2026 21:46:19 +0200 Subject: [PATCH] feat: add QuestionRenderer dispatcher --- .../components/questions/QuestionRenderer.tsx | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 frontend/src/components/questions/QuestionRenderer.tsx diff --git a/frontend/src/components/questions/QuestionRenderer.tsx b/frontend/src/components/questions/QuestionRenderer.tsx new file mode 100644 index 0000000..28d85db --- /dev/null +++ b/frontend/src/components/questions/QuestionRenderer.tsx @@ -0,0 +1,38 @@ +import type { Question } from '../../types' +import MultipleChoice from './MultipleChoice' +import MultipleSelect from './MultipleSelect' +import ShortAnswer from './ShortAnswer' +import MathInput from './MathInput' +import Essay from './Essay' +import Match from './Match' +import OrderQuestion from './OrderQuestion' + +interface Props { + q: Question + value: unknown + onChange: (val: unknown) => void + locked?: boolean + graded?: boolean +} + +export default function QuestionRenderer({ q, value, onChange, locked, graded }: Props) { + switch (q.type) { + case 'multiple-choice': + return void} locked={locked} graded={graded} /> + case 'multiple-select': + return void} locked={locked} graded={graded} /> + case 'short-answer': + case 'translation': + return void} locked={locked} /> + case 'math-input': + return void} locked={locked} /> + case 'essay': + return } onChange={onChange as (v: Record) => void} locked={locked} /> + case 'match': + return } onChange={onChange as (v: Record) => void} locked={locked} graded={graded} /> + case 'order': + return void} locked={locked} graded={graded} /> + default: + return
Unsupported question type: {q.type}
+ } +}