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 ( <>
{templates.isLoading ? ( ) : templates.isError ? (
Error: {templates.error.message}
) : templates.data?.templates.length === 0 ? (
No evaluators found. Create a new evaluator to get started.
) : (
handleTemplateSelect(templateId) } />
)}
{!isSelectionValid && (
)}
Create new evaluator { setIsCreateTemplateOpen(false); void utils.evals.allTemplates.invalidate(); if (newTemplate) { setSelectedTemplate(newTemplate); } showSuccessToast({ title: "Evaluator created successfully", description: "You can now use this evaluator.", }); }} /> ); }