"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 "@/shared/hooks"; import { cn, formatIsoDate } from "@/shared/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; } function GridVariant({ ref, subscription, showActions, formatCurrency, onViewClick, className, }: { ref: React.Ref; subscription: Subscription; showActions: boolean; formatCurrency: ReturnType["formatCurrency"]; onViewClick: ((subscription: Subscription) => void) | undefined; className: string | undefined; }) { return (
{getSubscriptionStatusIcon(subscription.status)}

{subscription.productName}

Service ID: {subscription.serviceId}

Price

{formatCurrency(subscription.amount)}

{getBillingCycleLabel(subscription.cycle)}

Next Due

{formatIsoDate(subscription.nextDue)}

{showActions && (

Created {formatIsoDate(subscription.registrationDate)}

)}
); } function ListVariant({ ref, subscription, showActions, formatCurrency, onViewClick, className, }: { ref: React.Ref; subscription: Subscription; showActions: boolean; formatCurrency: ReturnType["formatCurrency"]; onViewClick: ((subscription: Subscription) => void) | undefined; className: string | undefined; }) { return (
{getSubscriptionStatusIcon(subscription.status)}

{subscription.productName}

Service ID: {subscription.serviceId}

{formatCurrency(subscription.amount)}

{getBillingCycleLabel(subscription.cycle)}

{formatIsoDate(subscription.nextDue)}

Next due

{showActions && (
)}
); } export const SubscriptionCard = forwardRef( ({ subscription, variant = "list", showActions = true, onViewClick, className }, ref) => { const { formatCurrency } = useFormatCurrency(); if (variant === "grid") { return ( ); } return ( ); } ); SubscriptionCard.displayName = "SubscriptionCard";