import { useTranslation } from "react-i18next" import MetadataForm, { MetadataFormType, getSubmittableMetadata, } from "../../../forms/general/metadata-form" import ReservationForm, { GeneralFormType, } from "../components/reservation-form" import { AdminPostReservationsReq } from "@medusajs/medusa" import Button from "../../../fundamentals/button" import CrossIcon from "../../../fundamentals/icons/cross-icon" import FocusModal from "../../../molecules/modal/focus-modal" import { getErrorMessage } from "../../../../utils/error-messages" import { nestedForm } from "../../../../utils/nested-form" import { useAdminCreateReservation } from "medusa-react" import { useForm } from "react-hook-form" import useNotification from "../../../../hooks/use-notification" type NewReservationFormType = { general: GeneralFormType metadata: MetadataFormType } const NewReservation = ({ onClose, locationId, }: { onClose: () => void locationId?: string }) => { const { t } = useTranslation() const { mutateAsync: createReservation } = useAdminCreateReservation() const form = useForm({ defaultValues: { general: { location: locationId, item: undefined, description: undefined, quantity: 0, }, }, reValidateMode: "onBlur", mode: "onBlur", }) const { handleSubmit } = form const notification = useNotification() const onSubmit = async (data: NewReservationFormType) => { const payload = await createPayload(data) createReservation(payload, { onSuccess: () => { notification( t("new-success", "Success"), t( "new-successfully-created-reservation", "Successfully created reservation" ), "success" ) onClose() }, onError: (err: Error) => { notification(t("new-error", "Error"), getErrorMessage(err), "error") }, }) } return (

{t("new-reserve-item", "Reserve Item")}

{t("new-metadata", "Metadata")}

) } const createPayload = ( data: NewReservationFormType ): AdminPostReservationsReq => { return { location_id: data.general.location!, inventory_item_id: data.general.item!.id!, quantity: data.general.quantity, description: data.general.description, metadata: getSubmittableMetadata(data.metadata), } } export default NewReservation