import { Button, Heading, Text, toast } from "@medusajs/ui" import { RouteDrawer, useRouteModal } from "../../../components/modals" import { useTranslation } from "react-i18next" import { useMemo, useState } from "react" import { useConfirmImportProducts, useImportProducts } from "../../../hooks/api" import { UploadImport } from "./components/upload-import" import { ImportSummary } from "./components/import-summary" import { Trash } from "@medusajs/icons" import { FilePreview } from "../../../components/common/file-preview" import { getProductImportCsvTemplate } from "./helpers/import-template" export const ProductImport = () => { const { t } = useTranslation() return ( {t("products.import.header")} {t("products.import.description")} ) } const ProductImportContent = () => { const { t } = useTranslation() const [filename, setFilename] = useState() const { mutateAsync: importProducts, isPending, data } = useImportProducts() const { mutateAsync: confirm } = useConfirmImportProducts() const { handleSuccess } = useRouteModal() const productImportTemplateContent = useMemo(() => { return getProductImportCsvTemplate() }, []) const handleUploaded = async (file: File) => { setFilename(file.name) await importProducts( { file }, { onError: (err) => { toast.error(err.message) setFilename(undefined) }, } ) } const handleConfirm = async () => { if (!data?.transaction_id) { return } await confirm(data.transaction_id, { onSuccess: () => { toast.info(t("products.import.success.title"), { description: t("products.import.success.description"), }) handleSuccess() }, onError: (err) => { toast.error(err.message) }, }) } const uploadedFileActions = [ { actions: [ { label: t("actions.delete"), icon: , onClick: () => setFilename(undefined), }, ], }, ] return ( <> {t("products.import.upload.title")} {t("products.import.upload.description")} {filename ? ( ) : ( )} {data?.summary && !!filename && ( )} {t("products.import.template.title")} {t("products.import.template.description")} {t("actions.cancel")} {t("actions.import")} > ) }