import { HttpTypes } from "@medusajs/types" import { useMemo } from "react" import { UseFormReturn, useWatch } from "react-hook-form" import { useTranslation } from "react-i18next" import { DataGrid, createDataGridHelper, createDataGridPriceColumns, } from "../../../components/data-grid" import { useRouteModal } from "../../../components/modals/index" import { usePricePreferences } from "../../../hooks/api/price-preferences" import { useRegions } from "../../../hooks/api/regions.tsx" import { useStore } from "../../../hooks/api/store" import { ProductCreateSchemaType } from "../product-create/types" type VariantPricingFormProps = { form: UseFormReturn } export const VariantPricingForm = ({ form }: VariantPricingFormProps) => { const { store } = useStore() const { regions } = useRegions({ limit: 9999 }) const { price_preferences: pricePreferences } = usePricePreferences({}) const { setCloseOnEscape } = useRouteModal() const columns = useVariantPriceGridColumns({ currencies: store?.supported_currencies, regions, pricePreferences, }) const variants = useWatch({ control: form.control, name: "variants", }) as any return ( setCloseOnEscape(!editing)} /> ) } const columnHelper = createDataGridHelper< HttpTypes.AdminProductVariant, ProductCreateSchemaType >() const useVariantPriceGridColumns = ({ currencies = [], regions = [], pricePreferences = [], }: { currencies?: HttpTypes.AdminStore["supported_currencies"] regions?: HttpTypes.AdminRegion[] pricePreferences?: HttpTypes.AdminPricePreference[] }) => { const { t } = useTranslation() return useMemo(() => { return [ columnHelper.column({ id: t("fields.title"), header: t("fields.title"), cell: (context) => { const entity = context.row.original return (
{entity.title}
) }, disableHiding: true, }), ...createDataGridPriceColumns< HttpTypes.AdminProductVariant, ProductCreateSchemaType >({ currencies: currencies.map((c) => c.currency_code), regions, pricePreferences, getFieldName: (context, value) => { if (context.column.id?.startsWith("currency_prices")) { return `variants.${context.row.index}.prices.${value}` } return `variants.${context.row.index}.prices.${value}` }, t, }), ] }, [t, currencies, regions, pricePreferences]) }