You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.4 KiB
74 lines
2.4 KiB
import React from 'react'
|
|
import { Badge } from '@/components/ui/badge'
|
|
import { Ic } from '@/icons'
|
|
import type { FactorStatus } from '../types'
|
|
|
|
import { useTranslation } from '@/i18n'
|
|
|
|
interface Props {
|
|
status: FactorStatus
|
|
className?: string
|
|
}
|
|
|
|
export function BillingStatusBadge({ status, className }: Props) {
|
|
const { t } = useTranslation()
|
|
|
|
switch (status) {
|
|
case 'awaiting_payment':
|
|
return (
|
|
<Badge
|
|
variant="outline"
|
|
className={`bg-amber-500/15 text-amber-700 dark:text-amber-300 border-amber-500/30 gap-1.5 font-medium ${className || ''}`}
|
|
>
|
|
<Ic name="clock" className="size-3.5 text-amber-500 shrink-0" />
|
|
<span>{t('billing.statusAwaiting')}</span>
|
|
</Badge>
|
|
)
|
|
case 'pending':
|
|
return (
|
|
<Badge
|
|
variant="outline"
|
|
className={`bg-blue-500/15 text-blue-700 dark:text-blue-300 border-blue-500/30 gap-1.5 font-medium animate-pulse ${className || ''}`}
|
|
>
|
|
<Ic name="clock" className="size-3.5 text-blue-500 shrink-0" />
|
|
<span>{t('billing.statusPending')}</span>
|
|
</Badge>
|
|
)
|
|
case 'approved':
|
|
return (
|
|
<Badge
|
|
variant="outline"
|
|
className={`bg-emerald-500/15 text-emerald-700 dark:text-emerald-300 border-emerald-500/30 gap-1.5 font-medium ${className || ''}`}
|
|
>
|
|
<Ic name="checkCircle" className="size-3.5 text-emerald-500 shrink-0" />
|
|
<span>{t('billing.statusApproved')}</span>
|
|
</Badge>
|
|
)
|
|
case 'rejected':
|
|
return (
|
|
<Badge
|
|
variant="outline"
|
|
className={`bg-rose-500/15 text-rose-700 dark:text-rose-300 border-rose-500/30 gap-1.5 font-medium ${className || ''}`}
|
|
>
|
|
<Ic name="xCircle" className="size-3.5 text-rose-500 shrink-0" />
|
|
<span>{t('billing.statusRejected')}</span>
|
|
</Badge>
|
|
)
|
|
case 'expired':
|
|
return (
|
|
<Badge
|
|
variant="outline"
|
|
className={`bg-slate-500/15 text-slate-600 dark:text-slate-400 border-slate-500/30 gap-1.5 font-medium ${className || ''}`}
|
|
>
|
|
<Ic name="clock" className="size-3.5 text-slate-500 shrink-0" />
|
|
<span>{t('billing.statusExpired')}</span>
|
|
</Badge>
|
|
)
|
|
default:
|
|
return (
|
|
<Badge variant="outline" className={className}>
|
|
{status}
|
|
</Badge>
|
|
)
|
|
}
|
|
}
|