import { Customer } from "@medusajs/medusa" import { useAdminUpdateCustomer } from "medusa-react" import { useEffect } from "react" import { useForm } from "react-hook-form" import { useTranslation } from "react-i18next" import MetadataForm, { getMetadataFormValues, getSubmittableMetadata, MetadataFormType, } from "../../../components/forms/general/metadata-form" import Button from "../../../components/fundamentals/button" import LockIcon from "../../../components/fundamentals/icons/lock-icon" import InputField from "../../../components/molecules/input" import Modal from "../../../components/molecules/modal" import useNotification from "../../../hooks/use-notification" import { getErrorMessage } from "../../../utils/error-messages" import { nestedForm } from "../../../utils/nested-form" import { validateEmail } from "../../../utils/validate-email" type EditCustomerModalProps = { customer: Customer handleClose: () => void } type EditCustomerFormType = { first_name: string last_name: string email: string phone: string | null metadata: MetadataFormType } const EditCustomerModal = ({ handleClose, customer, }: EditCustomerModalProps) => { const { t } = useTranslation() const form = useForm({ defaultValues: getDefaultValues(customer), }) const { register, reset, handleSubmit, formState: { isDirty }, } = form const notification = useNotification() const updateCustomer = useAdminUpdateCustomer(customer.id) const onSubmit = handleSubmit((data) => { updateCustomer.mutate( { first_name: data.first_name, last_name: data.last_name, // @ts-ignore phone: data.phone, email: data.email, metadata: getSubmittableMetadata(data.metadata), }, { onSuccess: () => { handleClose() notification( t("details-success", "Success"), t( "details-successfully-updated-customer", "Successfully updated customer" ), "success" ) }, onError: (err) => { handleClose() notification( t("details-error", "Error"), getErrorMessage(err), "error" ) }, } ) }) useEffect(() => { reset(getDefaultValues(customer)) }, [customer]) return ( {t("details-customer-details", "Customer Details")}

{t("details-general", "General")}

Contact

!!validateEmail(value), disabled: customer.has_account, })} prefix={ customer.has_account && ( ) } disabled={customer.has_account} />

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

) } const getDefaultValues = (customer: Customer): EditCustomerFormType => { return { first_name: customer.first_name, email: customer.email, last_name: customer.last_name, phone: customer.phone, metadata: getMetadataFormValues(customer.metadata), } } export default EditCustomerModal