feat: add description field to question entity commit

This commit is contained in:
mengstabketemaw
2026-06-27 10:20:41 +03:00
parent 1a472a6db3
commit b78b43a5c1
2 changed files with 15 additions and 4 deletions

View File

@@ -44,6 +44,8 @@ function QuestionForm({
certificationId: string;
titleEn: string;
titleAm: string;
descriptionEn: string;
descriptionAm: string;
form: string;
points: number;
days: number;
@@ -55,6 +57,8 @@ function QuestionForm({
const [certificationId, setCertificationId] = useState<string | null>(editing?.certificationId ?? null);
const [titleEn, setTitleEn] = useState(editing?.title?.en ?? '');
const [titleAm, setTitleAm] = useState(editing?.title?.am ?? '');
const [descriptionEn, setDescriptionEn] = useState(editing?.description?.en ?? '');
const [descriptionAm, setDescriptionAm] = useState(editing?.description?.am ?? '');
const [form, setForm] = useState<string | null>(editing?.form ?? null);
const [points, setPoints] = useState<number>(editing?.points ?? 0);
const [days, setDays] = useState(editing?.time?.days ?? 0);
@@ -67,7 +71,7 @@ function QuestionForm({
notify.error('Please fill all required fields');
return;
}
onSubmit({ certificationId, titleEn, titleAm, form, points, days, hours, minutes }, !!editing);
onSubmit({ certificationId, titleEn, titleAm, descriptionEn, descriptionAm, form, points, days, hours, minutes }, !!editing);
};
return (
@@ -77,6 +81,8 @@ function QuestionForm({
<Select label="Certification" placeholder="Select certification" data={certOptions} value={certificationId} onChange={setCertificationId} size="sm" searchable required />
<TextInput label="Title (English)" placeholder="Question in English" value={titleEn} onChange={(e) => setTitleEn(e.currentTarget.value)} size="sm" required />
<TextInput label="Title (Amharic)" placeholder="ጥያቄ በአማርኛ" value={titleAm} onChange={(e) => setTitleAm(e.currentTarget.value)} size="sm" required />
<Textarea label="Description (English)" placeholder="Question description in English" value={descriptionEn} onChange={(e) => setDescriptionEn(e.currentTarget.value)} size="sm" />
<Textarea label="Description (Amharic)" placeholder="ስለ ዝርዝር መረጃ" value={descriptionAm} onChange={(e) => setDescriptionAm(e.currentTarget.value)} size="sm" />
<Select label="Form" placeholder="Select form" data={[{ value: 'ESSAY', label: 'Essay' }, { value: 'CHOICE', label: 'Choice' }]} value={form} onChange={setForm} size="sm" required />
<NumberInput label="Points" placeholder="Points" value={points} onChange={(v) => setPoints(Number(v))} min={0} size="sm" required />
<Text fz="sm" fw={500}>Time Allowed</Text>
@@ -120,17 +126,19 @@ export function QuestionPage() {
const resetForm = () => { setEditing(null); setShowForm(false); };
const handleSubmit = async (values: {
certificationId: string; titleEn: string; titleAm: string; form: string;
certificationId: string; titleEn: string; titleAm: string;
descriptionEn: string; descriptionAm: string; form: string;
points: number; days: number; hours: number; minutes: number;
}, isEdit: boolean) => {
const title = { en: values.titleEn, am: values.titleAm };
const description = { en: values.descriptionEn, am: values.descriptionAm };
const time = { days: values.days, hours: values.hours, minutes: values.minutes };
try {
if (isEdit && editing) {
await updateQ({ id: editing.id, certificationId: values.certificationId, title, form: values.form as QuestionForm, points: values.points, time }).unwrap();
await updateQ({ id: editing.id, certificationId: values.certificationId, title, description, form: values.form as QuestionForm, points: values.points, time }).unwrap();
notify.success('Question updated');
} else {
await createQ({ certificationId: values.certificationId, title, form: values.form as QuestionForm, points: values.points, time }).unwrap();
await createQ({ certificationId: values.certificationId, title, description, form: values.form as QuestionForm, points: values.points, time }).unwrap();
notify.success('Question created');
}
resetForm();

View File

@@ -13,6 +13,7 @@ export interface Question {
certificationId: string;
certification?: { id: string; name: LocalePair };
title: LocalePair;
description: LocalePair;
form: QuestionForm;
time: EstimatedTime | null;
points: number;
@@ -29,6 +30,7 @@ export interface ListResponse<T> {
export interface CreateQuestionPayload {
certificationId: string;
title: LocalePair;
description: LocalePair;
form: QuestionForm;
time?: EstimatedTime;
points: number;
@@ -38,6 +40,7 @@ export interface UpdateQuestionPayload {
id: string;
certificationId?: string;
title?: LocalePair;
description?: LocalePair;
form?: QuestionForm;
time?: EstimatedTime;
points?: number;