import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { Button } from '@/renderer/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/renderer/components/ui/dialog'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/renderer/components/ui/form'; import { Input } from '@/renderer/components/ui/input'; import { Spinner } from '@/renderer/components/ui/spinner'; import { Textarea } from '@/renderer/components/ui/textarea'; import { useWorkspace } from '@/renderer/contexts/workspace'; import { useMutation } from '@/renderer/hooks/use-mutation'; const formSchema = z.object({ name: z.string().min(3, 'Name must be at least 3 characters long.'), description: z.string(), }); interface SpaceCreateDialogProps { open: boolean; onOpenChange: (open: boolean) => void; } export const SpaceCreateDialog = ({ open, onOpenChange, }: SpaceCreateDialogProps) => { const workspace = useWorkspace(); const { mutate, isPending } = useMutation(); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { name: '', description: '', }, }); const handleCancel = () => { form.reset(); onOpenChange(false); }; const handleSubmit = async (values: z.infer) => { if (isPending) { return; } if (values.name.length < 3) { return; } mutate({ input: { type: 'space_create', name: values.name, description: values.description, userId: workspace.userId, workspaceId: workspace.id, }, onSuccess() { onOpenChange(false); form.reset(); }, }); }; return ( Create space Create a new space to collaborate with your peers
( Name * )} /> ( Description