| 1 | import { Badge } from '@/components/ui/badge' |
| 2 | import { cn } |
| 3 | import type { statusEnum |
| 4 | import type { Role |
| 5 | |
| 6 | export type Status |
| 7 | |
| 8 | interface Variant { |
| 9 | className: string |
| 10 | clientLabel?: string |
| 11 | label: string |
| 12 | noClientClassName?: string |
| 13 | noClientLabel?: string |
| 14 | } |
| 15 | |
| 16 | const variants: Record |
| 17 | draft: { |
| 18 | label: 'Draft', |
| 19 | className: 'bg-muted text-muted-foreground border-muted', |
| 20 | }, |
| 21 | submitted_to_admin: { |
| 22 | label: 'Pending Review', |
| 23 | className: |
| 24 | 'bg-blue-100 text-blue-800 border-blue-200 dark:bg-blue-900/40 dark:text-blue-300 dark:border-blue-800', |
| 25 | }, |
| 26 | admin_accepted: { |
| 27 | label: 'Approved', |
| 28 | className: |
| 29 | 'bg-green-100 text-green-800 border-green-200 dark:bg-green-900/40 dark:text-green-300 dark:border-green-800', |
| 30 | }, |
| 31 | admin_rejected: { |
| 32 | label: 'Rejected', |
| 33 | className: |
| 34 | 'bg-red-100 text-red-800 border-red-200 dark:bg-red-900/40 dark:text-red-300 dark:border-red-800', |
| 35 | }, |
| 36 | submitted_to_client: { |
| 37 | label: 'Sent to Client', |
| 38 | clientLabel: 'Pending Your Signature', |
| 39 | noClientLabel: 'Finalized', |
| 40 | className: |
| 41 | 'bg-purple-100 text-purple-800 border-purple-200 dark:bg-purple-900/40 dark:text-purple-300 dark:border-purple-800', |
| 42 | noClientClassName: |
| 43 | 'bg-green-100 text-green-800 border-green-200 dark:bg-green-900/40 dark:text-green-300 dark:border-green-800', |
| 44 | }, |
| 45 | client_accepted: { |
| 46 | label: 'Client Signed', |
| 47 | clientLabel: 'Signed', |
| 48 | noClientLabel: 'Completed', |
| 49 | className: |
| 50 | 'bg-teal-100 text-teal-800 border-teal-300 dark:bg-teal-900/40 dark:text-teal-300 dark:border-teal-700', |
| 51 | }, |
| 52 | client_rejected: { |
| 53 | label: 'Client Declined', |
| 54 | clientLabel: 'Declined', |
| 55 | noClientLabel: 'Withdrawn', |
| 56 | className: |
| 57 | 'bg-red-100 text-red-800 border-red-200 dark:bg-red-900/40 dark:text-red-300 dark:border-red-800', |
| 58 | }, |
| 59 | changes_requested: { |
| 60 | label: 'Changes Requested', |
| 61 | className: |
| 62 | 'bg-amber-100 text-amber-800 border-amber-200 dark:bg-amber-900/40 dark:text-amber-300 dark:border-amber-800', |
| 63 | }, |
| 64 | } |
| 65 | |
| 66 | export default function StatusBadge |
| 67 | status, |
| 68 | role, |
| 69 | isClientInvolved = true, |
| 70 | }: { |
| 71 | status: Status |
| 72 | role?: Role |
| 73 | isClientInvolved?: boolean |
| 74 | }) { |
| 75 | const variant = |
| 76 | |
| 77 | let label = |
| 78 | if (!isClientInvolved && |
| 79 | label = variant. |
| 80 | } else if (role |
| 81 | label = variant. |
| 82 | } |
| 83 | |
| 84 | const className = |
| 85 | !isClientInvolved && variant |
| 86 | ? variant.noClientClassName |
| 87 | : variant.className |
| 88 | |
| 89 | return ( |
| 90 | <Badge className={ |
| 91 | {label} |
| 92 | </Badge> |
| 93 | ) |
| 94 | } |