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; certificationId: string;
titleEn: string; titleEn: string;
titleAm: string; titleAm: string;
descriptionEn: string;
descriptionAm: string;
form: string; form: string;
points: number; points: number;
days: number; days: number;
@@ -55,6 +57,8 @@ function QuestionForm({
const [certificationId, setCertificationId] = useState<string | null>(editing?.certificationId ?? null); const [certificationId, setCertificationId] = useState<string | null>(editing?.certificationId ?? null);
const [titleEn, setTitleEn] = useState(editing?.title?.en ?? ''); const [titleEn, setTitleEn] = useState(editing?.title?.en ?? '');
const [titleAm, setTitleAm] = useState(editing?.title?.am ?? ''); 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 [form, setForm] = useState<string | null>(editing?.form ?? null);
const [points, setPoints] = useState<number>(editing?.points ?? 0); const [points, setPoints] = useState<number>(editing?.points ?? 0);
const [days, setDays] = useState(editing?.time?.days ?? 0); const [days, setDays] = useState(editing?.time?.days ?? 0);
@@ -67,7 +71,7 @@ function QuestionForm({
notify.error('Please fill all required fields'); notify.error('Please fill all required fields');
return; return;
} }
onSubmit({ certificationId, titleEn, titleAm, form, points, days, hours, minutes }, !!editing); onSubmit({ certificationId, titleEn, titleAm, descriptionEn, descriptionAm, form, points, days, hours, minutes }, !!editing);
}; };
return ( return (
@@ -77,6 +81,8 @@ function QuestionForm({
<Select label="Certification" placeholder="Select certification" data={certOptions} value={certificationId} onChange={setCertificationId} size="sm" searchable required /> <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 (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 /> <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 /> <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 /> <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> <Text fz="sm" fw={500}>Time Allowed</Text>
@@ -120,17 +126,19 @@ export function QuestionPage() {
const resetForm = () => { setEditing(null); setShowForm(false); }; const resetForm = () => { setEditing(null); setShowForm(false); };
const handleSubmit = async (values: { 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; points: number; days: number; hours: number; minutes: number;
}, isEdit: boolean) => { }, isEdit: boolean) => {
const title = { en: values.titleEn, am: values.titleAm }; 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 }; const time = { days: values.days, hours: values.hours, minutes: values.minutes };
try { try {
if (isEdit && editing) { 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'); notify.success('Question updated');
} else { } 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'); notify.success('Question created');
} }
resetForm(); resetForm();

View File

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