import { zodResolver } from "@hookform/resolvers/zod" import { Button, Heading, Input, Text, Textarea, toast } from "@medusajs/ui" import { useForm } from "react-hook-form" import { useTranslation } from "react-i18next" import { z } from "zod" import { Form } from "../../../../../components/common/form" import { RouteFocusModal, useRouteModal } from "../../../../../components/modals" import { KeyboundForm } from "../../../../../components/utilities/keybound-form" import { useCreateRbacPolicy } from "../../../../../hooks/api/rbac-policies" const CreatePolicySchema = z.object({ key: z.string().min(1), resource: z.string().min(1), operation: z.string().min(1), name: z.string().optional(), description: z.string().optional(), }) type CreatePolicyValues = z.infer export const CreatePolicyForm = () => { const { t } = useTranslation() const { handleSuccess } = useRouteModal() const form = useForm({ defaultValues: { key: "", resource: "", operation: "", name: "", description: "", }, resolver: zodResolver(CreatePolicySchema), }) const { mutateAsync, isPending } = useCreateRbacPolicy() const handleSubmit = form.handleSubmit(async (values) => { try { const { policy } = await mutateAsync({ key: values.key.trim(), resource: values.resource.trim(), operation: values.operation.trim(), name: values.name?.trim() || null, description: values.description?.trim() || null, }) toast.success(t("policies.create.successToast", { key: policy.key })) handleSuccess(`/settings/policies/${policy.id}`) } catch (error) { toast.error((error as Error).message) } }) return (
{t("policies.create.header")} {t("policies.create.hint")}
( {t("fields.key")} )} />
( {t("fields.resource")} )} /> ( {t("fields.operation")} )} />
( {t("fields.name")} )} /> ( {t("fields.description")}