"use client" import { Badge, Text } from "@medusajs/ui" import { toast } from '@kit/ui/sonner'; import React from "react"; import { convertToLocale } from "@lib/util/money" import { StoreCart, StorePromotion } from "@medusajs/types" import Trash from "@modules/common/icons/trash" import { Button } from '@kit/ui/button'; import { Form, FormControl, FormField, FormItem } from "@kit/ui/form"; import { Trans } from '@kit/ui/trans'; import { Input } from "@kit/ui/input"; import { useTranslation } from "react-i18next"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { addPromotionCodeAction, removePromotionCodeAction } from "./discount-code-actions"; const DiscountCodeSchema = z.object({ code: z.string().min(1), }) export default function DiscountCode({ cart }: { cart: StoreCart & { promotions: StorePromotion[] } }) { const { t } = useTranslation('cart'); const { promotions = [] } = cart; 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) => { 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')); form.reset() } else { toast.error(t('cart:discountCode.addError')); } } const form = useForm>({ defaultValues: { code: '', }, resolver: zodResolver(DiscountCodeSchema), }); return (

addPromotionCode(data.code))} className="w-full mb-2 flex gap-x-2 sm:flex-row flex-col gap-y-2 flex-1" > ( )} /> {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 && ( )}
) })}
)}
) }