import { useT } from "@agent-native/core/client/i18n"; import { IconLoader2 } from "@tabler/icons-react"; import { FormEvent, useState } from "react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { useCreateSpace } from "@/hooks/use-library"; import { cn } from "@/lib/utils"; const SPACE_COLORS = [ "#2563EB", "#059669", "#D97706", "#DC2626", "#7C3AED", "#0891B2", "#4F46E5", "#18181B", ]; interface CreateSpaceDialogProps { open: boolean; onOpenChange: (open: boolean) => void; organizationId?: string; onCreated?: (space: any) => void; } export function CreateSpaceDialog({ open, onOpenChange, organizationId, onCreated, }: CreateSpaceDialogProps) { const t = useT(); const createSpace = useCreateSpace(); const [name, setName] = useState(""); const [color, setColor] = useState(SPACE_COLORS[0]); function reset() { setName(""); setColor(SPACE_COLORS[0]); } function handleSubmit(event: FormEvent) { event.preventDefault(); const trimmed = name.trim(); if (!trimmed || createSpace.isPending) return; createSpace.mutate( { name: trimmed, color, iconEmoji: null, ...(organizationId ? { organizationId } : {}), }, { onSuccess: (space) => { toast.success(t("createSpaceDialog.spaceCreated")); reset(); onOpenChange(false); onCreated?.(space); }, onError: (err: any) => { toast.error(err?.message ?? t("createSpaceDialog.createFailed")); }, }, ); } return ( { onOpenChange(nextOpen); if (!nextOpen) reset(); }} > {t("createSpaceDialog.newSpace")} {t("createSpaceDialog.description")}
setName(event.target.value)} placeholder="Engineering" disabled={createSpace.isPending} />
{SPACE_COLORS.map((value) => (
); }