import { Button, type ButtonProps } from "@/src/components/ui/button"; import { Edit, LockIcon, PlusIcon, Trash } from "lucide-react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/src/components/ui/dialog"; import { useState, forwardRef } from "react"; import { DialogTrigger } from "@radix-ui/react-dialog"; import { DatasetForm } from "@/src/features/datasets/components/DatasetForm"; import { useHasProjectAccess } from "@/src/features/rbac/utils/checkProjectAccess"; import { type Prisma } from "@langfuse/shared"; import { usePostHogClientCapture } from "@/src/features/posthog-analytics/usePostHogClientCapture"; interface BaseDatasetButtonProps { mode: "create" | "update" | "delete"; projectId: string; className?: string; size?: ButtonProps["size"]; variant?: ButtonProps["variant"]; } interface CreateDatasetButtonProps extends BaseDatasetButtonProps { mode: "create"; folderPrefix?: string; } interface DeleteDatasetButtonProps extends BaseDatasetButtonProps { mode: "delete"; datasetId: string; datasetName: string; } interface UpdateDatasetButtonProps extends BaseDatasetButtonProps { mode: "update"; datasetId: string; datasetName: string; datasetDescription?: string; datasetMetadata?: Prisma.JsonValue; datasetInputSchema?: Prisma.JsonValue; datasetExpectedOutputSchema?: Prisma.JsonValue; icon?: boolean; } type DatasetActionButtonProps = | CreateDatasetButtonProps | UpdateDatasetButtonProps | DeleteDatasetButtonProps; export const DatasetActionButton = forwardRef< HTMLButtonElement, DatasetActionButtonProps >((props, ref) => { const capture = usePostHogClientCapture(); const [open, setOpen] = useState(false); const hasAccess = useHasProjectAccess({ projectId: props.projectId, scope: "datasets:CUD", }); return ( {props.mode === "update" ? ( props.icon ? ( ) : ( ) ) : props.mode === "delete" ? ( ) : ( )} {props.mode === "create" ? "Create new dataset" : props.mode === "delete" ? "Please confirm" : "Update dataset"} {props.mode === "delete" && ( This action cannot be undone and removes all the data associated with this dataset. )} {props.mode === "create" ? ( setOpen(false)} folderPrefix={props.folderPrefix} /> ) : props.mode === "delete" ? ( setOpen(false)} datasetId={props.datasetId} datasetName={props.datasetName} /> ) : ( setOpen(false)} datasetId={props.datasetId} datasetName={props.datasetName} datasetDescription={props.datasetDescription} datasetMetadata={props.datasetMetadata} datasetInputSchema={props.datasetInputSchema} datasetExpectedOutputSchema={props.datasetExpectedOutputSchema} /> )} ); }); DatasetActionButton.displayName = "DatasetActionButton";