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 { useCreateRefundReason } from "../../../../../hooks/api" const RefundReasonCreateSchema = z.object({ label: z.string().min(1), code: z.string().min(1), description: z.string().optional(), }) export const RefundReasonCreateForm = () => { const { t } = useTranslation() const { handleSuccess } = useRouteModal() const form = useForm>({ defaultValues: { label: "", code: "", description: "", }, resolver: zodResolver(RefundReasonCreateSchema), }) const generateCodeFromLabel = (label: string) => { return label .toLowerCase() .replace(/[^a-z0-9]/g, "_") .replace(/_+/g, "_") .replace(/^_|_$/g, "") } const { mutateAsync, isPending } = useCreateRefundReason() const handleSubmit = form.handleSubmit(async (data) => { await mutateAsync(data, { onSuccess: ({ refund_reason }) => { toast.success( t("refundReasons.create.successToast", { label: refund_reason.label, }) ) handleSuccess(`../`) }, onError: (error) => { toast.error(error.message) }, }) }) return (
{t("refundReasons.create.header")} {t("refundReasons.create.subtitle")}
{ return ( {t("refundReasons.fields.label.label")} { if ( !form.getFieldState("code").isTouched || !form.getValues("code") ) { form.setValue( "code", generateCodeFromLabel(e.target.value) ) } field.onChange(e) }} /> ) }} />
{ return ( {t("refundReasons.fields.code.label")} ) }} />
{ return ( {t("refundReasons.fields.description.label")}