import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { Stack, Group, Button, Modal, Text, TextInput, Textarea, Card, Select, NumberInput, Tabs, SimpleGrid, } from "@mantine/core"; import { useDisclosure } from "@mantine/hooks"; import { useTranslation } from "react-i18next"; import { IconPlus, IconInfoCircle, IconClipboardList, } from "@tabler/icons-react"; import { notify, useErrorHandler, AdvancedTable, useServerTable, ModalFooter, AmharicDatePicker } from "@ema-platform/ui"; import { LICENSE_PERMISSIONS, RequirePermission } from "@ema-platform/auth"; import { useGetCertificationsQuery } from "../../../certification/api/certification-api"; import { RANK_KEY_OPTIONS } from "../../../certification/types/certification"; import { useGetExamsQuery, useCreateExamMutation, useUpdateExamMutation, useDeleteExamMutation, } from "../../api/exam-api"; import type { Exam } from "../../types/exam"; import { examColumns } from "./columns"; import { examActionsColumn } from "./actions"; import { ErrorState, PageHeader } from '@ema-platform/ui'; function ExamForm({ editing, certOptions, isSubmitting, onSubmit, onCancel, }: { editing: Exam | null; certOptions: { value: string; label: string }[]; isSubmitting: boolean; onSubmit: (values: any, isEdit: boolean) => void; onCancel: () => void; }) { const { t } = useTranslation(); const [certificationId, setCertificationId] = useState( editing?.certificationId ?? null, ); const [titleEn, setTitleEn] = useState(editing?.title?.en ?? ""); const [titleAm, setTitleAm] = useState(editing?.title?.am ?? ""); const [directionEn, setDirectionEn] = useState(editing?.direction?.en ?? ""); const [directionAm, setDirectionAm] = useState(editing?.direction?.am ?? ""); const [date, setDate] = useState(editing?.date ?? ""); const [days, setDays] = useState(editing?.givenTime?.days ?? 0); const [hours, setHours] = useState(editing?.givenTime?.hours ?? 0); const [minutes, setMinutes] = useState(editing?.givenTime?.minutes ?? 0); const [type, setType] = useState(editing?.type ?? null); const [form, setForm] = useState(editing?.form ?? null); const [venue, setVenue] = useState(editing?.venue ?? ""); const [adminMethod, setAdminMethod] = useState( editing?.administrationMethod ?? null, ); const [evalMethod, setEvalMethod] = useState( editing?.evaluationMethod ?? null, ); const [selMethod, setSelMethod] = useState( editing?.selectionMethod ?? null, ); const [cuttingPoint, setCuttingPoint] = useState( editing?.cuttingPoint ?? 0, ); const [status, setStatus] = useState(editing?.status ?? null); const [activeTab, setActiveTab] = useState("basic"); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!certificationId || !titleEn || !titleAm || !date || !venue) { setActiveTab("basic"); notify.error(t("exam.form.fillRequiredBasic")); return; } if ((directionEn || directionAm) && !(directionEn && directionAm)) { setActiveTab("basic"); notify.error(t("exam.form.directionBothLanguages")); return; } if (!type || !form || !adminMethod || !evalMethod || !cuttingPoint) { setActiveTab("settings"); notify.error(t("exam.form.fillRequiredSettings")); return; } onSubmit( { certificationId, titleEn, titleAm, directionEn, directionAm, date, days, hours, minutes, type, form, venue, adminMethod, evalMethod, selMethod, cuttingPoint, status, }, !!editing, ); }; return (
}> {t("exam.form.basicInfo")} } > {t("exam.form.settings")}