import { useState } from "react"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import * as z from "zod"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Competency, CompetencyCategory, CompetencyCreateRequest, CompetencyUpdateRequest } from "@/types"; // Define form schema const formSchema = z.object({ title: z.string().min(2, { message: "Title must be at least 2 characters." }), category: z.enum(["Core", "Technical", "Leadership", "Communication", "Teamwork"] as const), weightage: z.coerce .number() .min(1, { message: "Weightage must be at least 1." }) .max(100, { message: "Weightage must be at most 100." }), }); interface CompetencyDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSubmit: (data: CompetencyCreateRequest | CompetencyUpdateRequest) => void; competencyToEdit?: Competency; isLoading?: boolean; } export function CompetencyDialog({ open, onOpenChange, onSubmit, competencyToEdit, isLoading = false, }: CompetencyDialogProps) { const [error, setError] = useState(null); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { title: competencyToEdit?.title || "", category: competencyToEdit?.category || "Core", weightage: competencyToEdit?.weightage || 10, }, }); function handleSubmit(values: z.infer) { setError(null); if (competencyToEdit) { onSubmit({ competencyId: competencyToEdit.competencyId, title: values.title, category: values.category, weightage: values.weightage, }); } else { onSubmit({ title: values.title, category: values.category, weightage: values.weightage, }); } } return ( {competencyToEdit ? "Edit Competency" : "Create Competency"} {competencyToEdit ? "Edit the details of this competency." : "Add a new competency to the system." }
( Title )} /> ( Category )} /> ( Weightage (%) )} /> {error &&

{error}

}
); }