"use client" import { Badge, Heading, Text } from "@medusajs/ui" import React, { useActionState } from "react"; import { applyPromotions, submitPromotionForm } from "@lib/data/cart" 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"; 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 validPromotions = promotions.filter( (promotion) => promotion.code !== code ) await applyPromotions( validPromotions.filter((p) => p.code === undefined).map((p) => p.code!) ) } const addPromotionCode = async (code: string) => { const codes = promotions .filter((p) => p.code === undefined) .map((p) => p.code!) codes.push(code.toString()) await applyPromotions(codes) form.reset() } const [message, formAction] = useActionState(submitPromotionForm, null) const form = useForm>({ defaultValues: { code: '', }, resolver: zodResolver(DiscountCodeSchema), }); return (
addPromotionCode(data.code))} className="w-full mb-2 flex gap-x-2" > ( )} />

{promotions.length > 0 && (
Promotion(s) applied: {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: promotion.application_method.value, currency_code: promotion.application_method .currency_code, })} )} ) {/* {promotion.is_automatic && ( )} */} {!promotion.is_automatic && ( )}
) })}
)}
) }