import { useState } from "react";
import { useRouter } from "next/router";
import { api } from "@/src/utils/api";
import {
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
} from "@/src/components/ui/dialog";
import { Button } from "@/src/components/ui/button";
import { PlusIcon } from "lucide-react";
import { EvaluatorSelector } from "./evaluator-selector";
import { EvalTemplateForm } from "./template-form";
import { showSuccessToast } from "@/src/features/notifications/showSuccessToast";
import { SetupDefaultEvalModelCard } from "@/src/features/evals/components/set-up-default-eval-model-card";
import { useTemplateValidation } from "@/src/features/evals/hooks/useTemplateValidation";
import { Card } from "@/src/components/ui/card";
import { Skeleton } from "@/src/components/ui/skeleton";
import { type EvalTemplate } from "@langfuse/shared";
type SelectEvaluatorListProps = {
projectId: string;
};
export function SelectEvaluatorList({ projectId }: SelectEvaluatorListProps) {
const router = useRouter();
const [isCreateTemplateOpen, setIsCreateTemplateOpen] = useState(false);
const handleSelectEvaluator = (template: EvalTemplate) => {
router.push(`/project/${projectId}/evals/new?evaluator=${template.id}`);
};
const { isSelectionValid, selectedTemplate, setSelectedTemplate } =
useTemplateValidation({
projectId,
onValidSelection: handleSelectEvaluator,
});
// Fetch templates
const templates = api.evals.allTemplates.useQuery(
{
projectId,
},
{
enabled: Boolean(projectId),
},
);
const utils = api.useUtils();
const handleOpenCreateEvaluator = () => {
setIsCreateTemplateOpen(true);
};
const handleTemplateSelect = (templateId: string) => {
const template = templates.data?.templates.find((t) => t.id === templateId);
if (template) {
setSelectedTemplate(template);
}
};
return (
<>