SPB Git forge

spb/fetcha

Public
11commits 1branches 0releases
1.5 MBsize
maindefault branch
16 days agolast push
TypeScript 97.5% SQL 1.4% Python 0.8%
1.7 KB · 46 lines tsx
Raw Blame History
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