'use client'; import React, { useState } from 'react'; import { convertToLocale } from '@lib/util/money'; import { StoreCart, StoreCartPromotion } from '@medusajs/types'; import { Badge, Text } from '@medusajs/ui'; import Trash from '@modules/common/icons/trash'; import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { Button } from '@kit/ui/button'; import { FormControl, FormField, FormItem } from '@kit/ui/form'; import { Input } from '@kit/ui/input'; import { toast } from '@kit/ui/sonner'; import { Trans } from '@kit/ui/trans'; import { addPromotionCodeAction, removePromotionCodeAction, } from './discount-code-actions'; export default function DiscountCode({ cart, }: { cart: StoreCart & { promotions: StoreCartPromotion[]; }; }) { const { t } = useTranslation('cart'); const { setValue, watch } = useFormContext(); const currentValue = watch('code'); const { promotions = [] } = cart; const [isAddingPromotionCode, setIsAddingPromotionCode] = useState(false); const removePromotionCode = async (code: string) => { const appliedCodes = promotions .filter((p) => p.code !== undefined) .map((p) => p.code!); const loading = toast.loading(t('cart:discountCode.removeLoading')); const result = await removePromotionCodeAction(code, appliedCodes); toast.dismiss(loading); if (result.success) { toast.success(t('cart:discountCode.removeSuccess')); } else { toast.error(t('cart:discountCode.removeError')); } }; const addPromotionCode = async (code: string) => { if (!code || code.length === 0) { return; } setIsAddingPromotionCode(true); const loading = toast.loading(t('cart:discountCode.addLoading')); const result = await addPromotionCodeAction(code); toast.dismiss(loading); if (result.success) { toast.success(t('cart:discountCode.addSuccess')); setValue('code', ''); } else { toast.error(t('cart:discountCode.addError')); } setIsAddingPromotionCode(false); }; return (

( )} />
{promotions.length > 0 && (

{promotions.map((promotion) => { return (
{promotion.code} {' '} ( {promotion.application_method?.value !== undefined && promotion.application_method.currency_code !== undefined && ( <> {promotion.application_method.type === 'percentage' ? `${promotion.application_method.value}%` : convertToLocale({ amount: Number( promotion.application_method.value, ), currency_code: promotion.application_method.currency_code, })} )} ) {/* {promotion.is_automatic && ( )} */} {!promotion.is_automatic && ( )}
); })}
)}
); }