import { Group, Box, Button, TextInput, Stack, Textarea } from "@mantine/core"; import React from "react"; import { useForm, zodResolver } from "@mantine/form"; import * as z from "zod"; import { useUpdateSpaceMutation } from "@/features/space/queries/space-query.ts"; import { ISpace } from "@/features/space/types/space.types.ts"; const formSchema = z.object({ name: z.string().min(2).max(50), description: z.string().max(250), slug: z .string() .min(2) .max(50) .regex( /^[a-zA-Z0-9]+$/, "Space slug must be alphanumeric. No special characters", ), }); type FormValues = z.infer; interface EditSpaceFormProps { space: ISpace; readOnly?: boolean; } export function EditSpaceForm({ space, readOnly }: EditSpaceFormProps) { const updateSpaceMutation = useUpdateSpaceMutation(); const form = useForm({ validate: zodResolver(formSchema), initialValues: { name: space?.name, description: space?.description || "", slug: space.slug, }, }); const handleSubmit = async (values: { name?: string; description?: string; slug?: string; }) => { const spaceData: Partial = { spaceId: space.id, }; if (form.isDirty("name")) { spaceData.name = values.name; } if (form.isDirty("description")) { spaceData.description = values.description; } if (form.isDirty("slug")) { spaceData.slug = values.slug; } await updateSpaceMutation.mutateAsync(spaceData); form.resetDirty(); }; return ( <>
handleSubmit(values))}>