import { ButtonContainer } from '@/components/button-container'; import { InputWithLabel } from '@/components/forms/input-with-label'; import { Button } from '@/components/ui/button'; import { useAppParams } from '@/hooks/use-app-params'; import { handleError, useTRPC } from '@/integrations/trpc/react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { PlusIcon, Trash2Icon } from 'lucide-react'; import { useFieldArray, useForm } from 'react-hook-form'; import { toast } from 'sonner'; import { popModal } from '.'; import { ModalContent, ModalHeader } from './Modal/Container'; interface IForm { id: string; type: string; name: string; properties: { key: string; value: string }[]; } export default function AddGroup() { const { projectId } = useAppParams(); const queryClient = useQueryClient(); const trpc = useTRPC(); const { register, handleSubmit, control, formState } = useForm({ defaultValues: { id: '', type: '', name: '', properties: [], }, }); const { fields, append, remove } = useFieldArray({ control, name: 'properties', }); const mutation = useMutation( trpc.group.create.mutationOptions({ onSuccess() { queryClient.invalidateQueries(trpc.group.list.pathFilter()); queryClient.invalidateQueries(trpc.group.types.pathFilter()); toast('Success', { description: 'Group created.' }); popModal(); }, onError: handleError, }), ); return (
{ const props = Object.fromEntries( properties .filter((p) => p.key.trim() !== '') .map((p) => [p.key.trim(), String(p.value)]), ); mutation.mutate({ projectId, ...values, properties: props }); })} >
Properties
{fields.map((field, index) => (
))}
); }