import { useState } from 'react'; import { Stack, Button, Modal, Text, TextInput, Textarea, Select, Card, Switch } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; import { useTranslation } from 'react-i18next'; import {IconPlus} from '@tabler/icons-react'; import { AdvancedTable, ErrorState, ModalFooter, notify, PageHeader, useServerTable } from '@ema-platform/ui'; import { extractErrorMessage, useGetRanksQuery, useLocalized } from '@ema-platform/api'; import { useGetCertificationsQuery, useCreateCertificationMutation, useUpdateCertificationMutation, useDeleteCertificationMutation, } from '../../api/certification-api'; import { type Certification } from '../../types/certification'; import { certificationColumns } from './columns'; import { certificationActionsColumn } from './actions'; interface CertificationFormValues { nameEn: string; nameAm: string; descEn: string; descAm: string; rankKey: string | null; isActive: boolean; } function CertificationForm({ editing, rankOptions, isSubmitting, onSubmit, onCancel, }: { editing: Certification | null; rankOptions: { value: string; label: string }[]; isSubmitting: boolean; onSubmit: (values: CertificationFormValues, isEdit: boolean) => void; onCancel: () => void; }) { const { t } = useTranslation(); const [nameEn, setNameEn] = useState(editing?.name?.en ?? ''); const [nameAm, setNameAm] = useState(editing?.name?.am ?? ''); const [descEn, setDescEn] = useState(editing?.description?.en ?? ''); const [descAm, setDescAm] = useState(editing?.description?.am ?? ''); const [rankKey, setRankKey] = useState(editing?.rankKey ?? null); const [isActive, setIsActive] = useState(editing?.isActive ?? true); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!nameEn.trim() || !nameAm.trim()) { notify.error(t('certification.validation.nameRequired', 'Both English and Amharic names are required')); return; } onSubmit({ nameEn: nameEn.trim(), nameAm: nameAm.trim(), descEn, descAm, rankKey, isActive }, !!editing); }; return (
setNameEn(e.currentTarget.value)} size="sm" required /> setNameAm(e.currentTarget.value)} size="sm" required />