"use client"; import { forwardRef } from "react"; import { CalendarIcon, ArrowTopRightOnSquareIcon } from "@heroicons/react/24/outline"; import { StatusPill } from "@/components/atoms/status-pill"; import { Button } from "@/components/atoms/button"; import { SubCard } from "@/components/molecules/SubCard/SubCard"; import type { Subscription } from "@customer-portal/domain/subscriptions"; import { useFormatCurrency } from "@/lib/hooks/useFormatCurrency"; import { cn, formatIsoDate } from "@/lib/utils"; import { getBillingCycleLabel, getSubscriptionStatusIcon, getSubscriptionStatusVariant, } from "@/features/subscriptions/utils/status-presenters"; interface SubscriptionCardProps { subscription: Subscription; variant?: "list" | "grid"; showActions?: boolean; onViewClick?: (subscription: Subscription) => void; className?: string; } const formatDate = (dateString: string | undefined) => { return formatIsoDate(dateString); }; export const SubscriptionCard = forwardRef( ({ subscription, variant = "list", showActions = true, onViewClick, className }, ref) => { const { formatCurrency } = useFormatCurrency(); const handleViewClick = () => { if (onViewClick) { onViewClick(subscription); } }; if (variant === "grid") { return (
{/* Header */}
{getSubscriptionStatusIcon(subscription.status)}

{subscription.productName}

Service ID: {subscription.serviceId}

{/* Details */}

Price

{formatCurrency(subscription.amount)}

{getBillingCycleLabel(subscription.cycle)}

Next Due

{formatDate(subscription.nextDue)}

{/* Actions */} {showActions && (

Created {formatDate(subscription.registrationDate)}

)}
); } // List variant (default) return (
{getSubscriptionStatusIcon(subscription.status)}

{subscription.productName}

Service ID: {subscription.serviceId}

{formatCurrency(subscription.amount)}

{getBillingCycleLabel(subscription.cycle)}

{formatDate(subscription.nextDue)}

Next due

{showActions && (
)}
); } ); SubscriptionCard.displayName = "SubscriptionCard";