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 { Role, AssessmentArea, RoleAssessmentQuestion, RoleAssessmentQuestionCreateRequest, RoleAssessmentQuestionUpdateRequest } from "@/types"; // Define form schema const formSchema = z.object({ roleId: z.number().min(1, { message: "Please select a role." }), areaId: z.number().min(1, { message: "Please select an assessment area." }), questionText: z.string().min(5, { message: "Question text must be at least 5 characters." }), }); interface RoleAssessmentQuestionDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSubmit: (data: RoleAssessmentQuestionCreateRequest | RoleAssessmentQuestionUpdateRequest) => void; questionToEdit?: RoleAssessmentQuestion; roles: Role[]; assessmentAreas: AssessmentArea[]; isLoading?: boolean; } export function RoleAssessmentQuestionDialog({ open, onOpenChange, onSubmit, questionToEdit, roles, assessmentAreas, isLoading = false, }: RoleAssessmentQuestionDialogProps) { const [error, setError] = useState(null); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { roleId: questionToEdit?.roleId || undefined, areaId: questionToEdit?.areaId || undefined, questionText: questionToEdit?.questionText || "", }, }); function handleSubmit(values: z.infer) { setError(null); if (questionToEdit) { onSubmit({ questionId: questionToEdit.questionId, roleId: values.roleId, areaId: values.areaId, questionText: values.questionText, }); } else { onSubmit({ roleId: values.roleId, areaId: values.areaId, questionText: values.questionText, }); } } return ( {questionToEdit ? "Edit Assessment Question" : "Create Assessment Question"} {questionToEdit ? "Edit the details of this assessment question." : "Add a new assessment question for a specific role." }
( Role )} /> ( Assessment Area )} /> ( Question Text