"use client"; import { Button } from "@app/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@app/components/ui/form"; import { Input } from "@app/components/ui/input"; import { toast } from "@app/hooks/useToast"; import { zodResolver } from "@hookform/resolvers/zod"; import { AxiosResponse } from "axios"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { Credenza, CredenzaBody, CredenzaClose, CredenzaContent, CredenzaDescription, CredenzaFooter, CredenzaHeader, CredenzaTitle, } from "@app/components/Credenza"; import { useOrgContext } from "@app/hooks/useOrgContext"; import { CreateRoleBody, CreateRoleResponse } from "@server/routers/role"; import { formatAxiosError } from "@app/lib/api";; import { createApiClient } from "@app/lib/api"; import { useEnvContext } from "@app/hooks/useEnvContext"; type CreateRoleFormProps = { open: boolean; setOpen: (open: boolean) => void; afterCreate?: (res: CreateRoleResponse) => Promise; }; const formSchema = z.object({ name: z.string({ message: "Name is required" }).max(32), description: z.string().max(255).optional(), }); export default function CreateRoleForm({ open, setOpen, afterCreate, }: CreateRoleFormProps) { const { org } = useOrgContext(); const [loading, setLoading] = useState(false); const api = createApiClient(useEnvContext()); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { name: "", description: "", }, }); async function onSubmit(values: z.infer) { setLoading(true); const res = await api .put>( `/org/${org?.org.orgId}/role`, { name: values.name, description: values.description, } as CreateRoleBody ) .catch((e) => { toast({ variant: "destructive", title: "Failed to create role", description: formatAxiosError( e, "An error occurred while creating the role." ), }); }); if (res && res.status === 201) { toast({ variant: "default", title: "Role created", description: "The role has been successfully created.", }); if (open) { setOpen(false); } if (afterCreate) { afterCreate(res.data.data); } } setLoading(false); } return ( <> { setOpen(val); setLoading(false); form.reset(); }} > Create Role Create a new role to group users and manage their permissions.
( Role Name )} /> ( Description )} />
); }