import { useState } from "react";
import { SplashScreen } from "@/src/components/ui/splash-screen";
import { Braces, Code, ListTree, Upload } from "lucide-react";
import DocPopup from "@/src/components/layouts/doc-popup";
import Link from "next/link";
import {
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/src/components/ui/dialog";
import { CsvUploadDialog } from "@/src/features/datasets/components/CsvUploadDialog";
import { NewDatasetItemForm } from "@/src/features/datasets/components/NewDatasetItemForm";
import { useHasProjectAccess } from "@/src/features/rbac/utils/checkProjectAccess";
import { usePostHogClientCapture } from "@/src/features/posthog-analytics/usePostHogClientCapture";
import { cn } from "@/src/utils/tailwind";
interface DatasetItemEntryPointRowProps {
icon: React.ReactNode;
title: string;
description: string;
onClick?: () => void;
hasAccess?: boolean;
comingSoon?: boolean;
docPopup?: {
description: string;
href: string;
};
}
const DatasetItemEntryPointRow = ({
icon,
title,
description,
onClick,
hasAccess = true,
comingSoon = false,
docPopup,
}: DatasetItemEntryPointRowProps) => {
const disabled = !hasAccess || comingSoon;
return (
{icon}
{title}
{description}
{docPopup && (
)}
);
};
export const DatasetItemsOnboarding = ({
projectId,
datasetId,
}: {
projectId: string;
datasetId: string;
}) => {
const capture = usePostHogClientCapture();
const [isUploadDialogOpen, setIsUploadDialogOpen] = useState(false);
const [isNewItemDialogOpen, setIsNewItemDialogOpen] = useState(false);
const hasProjectAccess = useHasProjectAccess({
projectId,
scope: "datasets:CUD",
});
return (
}
title="Upload CSV"
description="Import dataset items from a CSV file"
onClick={() => {
if (hasProjectAccess) {
capture("dataset_item:upload_csv_button_click");
}
}}
hasAccess={hasProjectAccess}
/>
}
title="Add Manually"
description="Manually input a single item"
onClick={() => {
if (hasProjectAccess) {
capture("dataset_item:new_form_open");
}
}}
hasAccess={hasProjectAccess}
/>
Create dataset item
setIsNewItemDialogOpen(false)}
className="h-full overflow-y-auto"
/>
}
title="Add via Code"
description="Use our Python/TS/JS SDKs or custom API"
/>
}
title="Select Traces"
description="Coming soon!"
comingSoon
docPopup={{
description:
"Creating items from production data is supported on single trace level. Click to view docs for more details.",
href: "https://langfuse.com/docs/evaluation/experiments/datasets#create-items-from-production-data",
}}
/>
);
};