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 { Textarea } from "@/components/ui/textarea"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Competency, CompetencyIndicator, CompetencyIndicatorCreateRequest, CompetencyIndicatorUpdateRequest } from "@/types"; // Define form schema const formSchema = z.object({ competencyId: z.number().min(1, { message: "Please select a competency." }), indicatorText: z.string().min(5, { message: "Indicator text must be at least 5 characters." }), }); interface CompetencyIndicatorDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSubmit: (data: CompetencyIndicatorCreateRequest | CompetencyIndicatorUpdateRequest) => void; indicatorToEdit?: CompetencyIndicator; competencies: Competency[]; isLoading?: boolean; } export function CompetencyIndicatorDialog({ open, onOpenChange, onSubmit, indicatorToEdit, competencies, isLoading = false, }: CompetencyIndicatorDialogProps) { const [error, setError] = useState(null); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { competencyId: indicatorToEdit?.competencyId || undefined, indicatorText: indicatorToEdit?.indicatorText || "", }, }); function handleSubmit(values: z.infer) { setError(null); if (indicatorToEdit) { onSubmit({ indicatorId: indicatorToEdit.indicatorId, competencyId: values.competencyId, indicatorText: values.indicatorText, }); } else { onSubmit({ competencyId: values.competencyId, indicatorText: values.indicatorText, }); } } return ( {indicatorToEdit ? "Edit Indicator" : "Create Indicator"} {indicatorToEdit ? "Edit the details of this competency indicator." : "Add a new competency indicator to the system." }
( Competency )} /> ( Indicator Text