import { Card } from "@/src/components/ui/card"; import { Button } from "@/src/components/ui/button"; import { Input } from "@/src/components/ui/input"; import { api } from "@/src/utils/api"; import type * as z from "zod/v4"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { Form, FormControl, FormField, FormItem, FormMessage, } from "@/src/components/ui/form"; import { projectNameSchema } from "@/src/features/auth/lib/projectNameSchema"; import Header from "@/src/components/layouts/header"; import { usePostHogClientCapture } from "@/src/features/posthog-analytics/usePostHogClientCapture"; import { LockIcon } from "lucide-react"; import { useQueryProject } from "@/src/features/projects/hooks"; import { useSession } from "next-auth/react"; import { useHasProjectAccess } from "@/src/features/rbac/utils/checkProjectAccess"; export default function RenameProject() { const { update: updateSession } = useSession(); const { project } = useQueryProject(); const capture = usePostHogClientCapture(); const hasAccess = useHasProjectAccess({ projectId: project?.id, scope: "project:update", }); const form = useForm({ resolver: zodResolver(projectNameSchema), defaultValues: { name: "", }, }); const renameProject = api.projects.update.useMutation({ onSuccess: (_) => { void updateSession(); }, onError: (error) => form.setError("name", { message: error.message }), }); function onSubmit(values: z.infer) { if (!hasAccess || !project) return; capture("project_settings:rename_form_submit"); renameProject .mutateAsync({ projectId: project.id, newName: values.name, }) .then(() => { form.reset(); }) .catch((error) => { console.error(error); }); } return (
{form.getValues().name !== "" ? (

Your Project will be renamed from " {project?.name ?? ""} " to " {form.watch().name}".

) : (

Your Project is currently named " {project?.name ?? ""} ".

)}
(
{!hasAccess && ( )}
)} /> {hasAccess && ( )}
); }