"use client" import * as DialogPrimitive from "@radix-ui/react-dialog" import { Loader2, XIcon } from "lucide-react" import { useEffect, useState } from "react" import { dmSans125ClassName, dmSansClassName } from "@/lib/fonts" import { useSpaceContext, useUpdateSpace } from "@/hooks/use-space-context" import { CONTEXT_PRESETS } from "@/components/add-space-modal" import { DEFAULT_PROJECT_ID } from "@lib/constants" import { cn } from "@lib/utils" import { Button } from "@ui/components/button" import { Dialog, DialogContent, DialogTitle } from "@repo/ui/components/dialog" const INPUT_SHADOW = "0px 1px 2px 0px rgba(0,43,87,0.1), inset 0px 0px 0px 1px rgba(43,49,67,0.08), inset 0px 1px 1px 0px rgba(0,0,0,0.08), inset 0px 2px 4px 0px rgba(0,0,0,0.02)" type EditSpaceModalProps = { containerTag: string currentName: string currentEmoji?: string open: boolean onOpenChange: (open: boolean) => void } export function EditSpaceModal({ containerTag, currentName, currentEmoji = "📁", open, onOpenChange, }: EditSpaceModalProps) { const isDefault = !containerTag || containerTag === DEFAULT_PROJECT_ID const { data, isLoading } = useSpaceContext(containerTag, open) const update = useUpdateSpace() const [name, setName] = useState(currentName) const [context, setContext] = useState("") useEffect(() => { if (!open) return setName(data?.name ?? currentName ?? "") setContext(data?.entityContext ?? "") }, [open, data?.name, data?.entityContext, currentName]) const handleSave = () => { update.mutate( { containerTag, name: isDefault ? undefined : name.trim() || undefined, entityContext: context.trim() ? context.trim() : null, }, { onSuccess: () => onOpenChange(false) }, ) } return (
Edit space

Rename this space and tell Nova what to remember in it.

Close
{currentEmoji}
setName(e.target.value)} disabled={isDefault || update.isPending} placeholder="Space name" maxLength={120} className={cn( "flex-1 bg-[#14161A] border border-[rgba(82,89,102,0.2)] px-4 py-3 rounded-[12px] text-[#fafafa] text-[14px] placeholder:text-[#737373] focus:outline-none focus:ring-1 focus:ring-[rgba(115,115,115,0.3)] disabled:opacity-60", dmSansClassName(), )} style={{ boxShadow: INPUT_SHADOW }} />
{isDefault && ( The default space can't be renamed. )}
What to remember Optional