TypeScript 97.5%
SQL 1.4%
Python 0.8%
1"use client";2import * as React from "react";3import { useRouter } from "next/navigation";4import { Plus } from "lucide-react";5import { Button } from "@/components/ui/button";6import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog";7import { ProjectForm } from "./project-form";89export function CreateProjectDialog({ defaultOpen, trigger, redirectToDetail = true }: { defaultOpen?: boolean; trigger?: React.ReactNode; redirectToDetail?: boolean }) {10 const router = useRouter();11 const [open, setOpen] = React.useState(Boolean(defaultOpen));12 return (13 <Dialog14 open={open}15 onOpenChange={(o) => {16 setOpen(o);17 // Drop ?new=1 from the URL when the dialog closes so a refresh does not reopen it.18 if (!o && defaultOpen) router.replace("/dashboard/projects");19 }}20 >21 <DialogTrigger asChild>22 {trigger ?? (23 <Button variant="primary">24 <Plus /> New project25 </Button>26 )}27 </DialogTrigger>28 <DialogContent size="lg" className="max-h-[calc(100dvh-2rem)] overflow-y-auto scrollbar-thin">29 <DialogHeader>30 <DialogTitle>Create project</DialogTitle>31 <DialogDescription>Projects isolate keys, usage, logs and limits. The new project becomes your current one.</DialogDescription>32 </DialogHeader>33 <ProjectForm34 mode="create"35 onCancel={() => setOpen(false)}36 onSuccess={(id) => {37 setOpen(false);38 if (redirectToDetail) router.push(`/dashboard/projects/${id}`);39 router.refresh();40 }}41 />42 </DialogContent>43 </Dialog>44 );45}46