"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { createRepository } from "@/actions/repositories"; import { useSession } from "@/lib/auth-client"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { toast } from "sonner"; import { Loader2, Lock, Globe, BookMarked } from "lucide-react"; import Link from "next/link"; export default function NewRepoPage() { const router = useRouter(); const { data: session, isPending } = useSession(); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ name: "", description: "", visibility: "public" as "public" | "private", }); const username = (session?.user as { username?: string } | undefined)?.username || ""; async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!session?.user) { toast.error("You must be logged in"); return; } setLoading(true); try { await createRepository({ name: formData.name, description: formData.description || undefined, visibility: formData.visibility, }); toast.success("Repository created!"); router.push(`/${username}/${formData.name.toLowerCase().replace(/\s+/g, "-")}`); } catch (err) { toast.error(err instanceof Error ? err.message : "Failed to create repository"); } finally { setLoading(false); } } if (isPending) { return (
Please sign in to create a repository
A repository contains all project files, including the revision history.