| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import { cn } from 'ui'
- import { formatCurrency } from '@/lib/helpers'
- export interface ChargeBreakdownProps {
- subtotal: number
- subtotalLabel?: string
- total: number
- tax?: { amount: number; percentage: number }
- taxStatus?: 'calculated' | 'failed' | 'not_applicable'
- isFetching: boolean
- }
- export const ChargeBreakdown = ({
- subtotal,
- subtotalLabel = 'Subtotal',
- total,
- tax,
- taxStatus,
- isFetching,
- }: ChargeBreakdownProps) => {
- return (
- <div
- className={cn('text-foreground-light text-sm transition-opacity', isFetching && 'opacity-50')}
- >
- {total !== subtotal && (
- <div className="flex items-center justify-between gap-2 border-b border-muted text-sm">
- <div className="py-2">{subtotalLabel}</div>
- <div className="py-2 text-right tabular-nums" translate="no">
- {formatCurrency(subtotal)}
- </div>
- </div>
- )}
- {taxStatus === 'calculated' && tax && tax.amount > 0 && (
- <div className="flex items-center justify-between gap-2 border-b border-muted text-sm">
- <div className="py-2">Tax ({tax.percentage}%)</div>
- <div className="py-2 text-right tabular-nums" translate="no">
- {formatCurrency(tax.amount)}
- </div>
- </div>
- )}
- {taxStatus === 'failed' && (
- <div className="flex items-center justify-between gap-2 border-b border-muted text-sm">
- <div className="py-2 text-foreground-lighter">
- Tax could not be estimated and may be applied separately
- </div>
- </div>
- )}
- <div className="flex items-center justify-between gap-2 text-foreground text-base">
- <div className="py-2">Total due today</div>
- <div className="py-2 text-right tabular-nums" translate="no">
- {formatCurrency(total)}
- </div>
- </div>
- </div>
- )
- }
|