|
| 1 | +// Governance utility functions |
| 2 | + |
| 3 | +/** |
| 4 | + * Format a number as USD currency |
| 5 | + */ |
| 6 | +export const formatCurrency = (amount: number): string => { |
| 7 | + return new Intl.NumberFormat('en-US', { |
| 8 | + style: 'currency', |
| 9 | + currency: 'USD', |
| 10 | + maximumFractionDigits: 0, |
| 11 | + }).format(amount); |
| 12 | +}; |
| 13 | + |
| 14 | +/** |
| 15 | + * Get the appropriate Tailwind classes for a transparency score badge |
| 16 | + */ |
| 17 | +export const getTransparencyScoreClasses = (score: number): string => { |
| 18 | + if (score >= 90) return 'bg-green-100 text-green-800'; |
| 19 | + if (score >= 70) return 'bg-blue-100 text-blue-800'; |
| 20 | + if (score >= 50) return 'bg-yellow-100 text-yellow-800'; |
| 21 | + return 'bg-red-100 text-red-800'; |
| 22 | +}; |
| 23 | + |
| 24 | +/** |
| 25 | + * Get the appropriate Tailwind classes for a transparency score progress bar |
| 26 | + */ |
| 27 | +export const getTransparencyBarClasses = (score: number): string => { |
| 28 | + if (score >= 90) return 'bg-green-500'; |
| 29 | + if (score >= 70) return 'bg-blue-500'; |
| 30 | + if (score >= 50) return 'bg-yellow-500'; |
| 31 | + return 'bg-red-500'; |
| 32 | +}; |
| 33 | + |
| 34 | +/** |
| 35 | + * Get status badge classes based on status type |
| 36 | + */ |
| 37 | +export const getStatusBadgeClasses = (status: string): string => { |
| 38 | + const statusMap: Record<string, string> = { |
| 39 | + 'Paid': 'bg-green-100 text-green-800', |
| 40 | + 'Active': 'bg-green-100 text-green-800', |
| 41 | + 'Completed': 'bg-green-100 text-green-800', |
| 42 | + 'Pending': 'bg-yellow-100 text-yellow-800', |
| 43 | + 'Late': 'bg-red-100 text-red-800', |
| 44 | + 'Flagged': 'bg-red-100 text-red-800', |
| 45 | + 'Disputed': 'bg-gray-100 text-gray-800', |
| 46 | + 'Expired': 'bg-gray-100 text-gray-800', |
| 47 | + }; |
| 48 | + return statusMap[status] || 'bg-gray-100 text-gray-800'; |
| 49 | +}; |
| 50 | + |
| 51 | +/** |
| 52 | + * Get difference indicator classes (positive/negative/neutral) |
| 53 | + */ |
| 54 | +export const getDifferenceClasses = (difference: number): string => { |
| 55 | + if (difference > 0) return 'text-green-600'; |
| 56 | + if (difference < 0) return 'text-red-600'; |
| 57 | + return 'text-gray-600'; |
| 58 | +}; |
| 59 | + |
| 60 | +/** |
| 61 | + * Get allocation total indicator classes |
| 62 | + */ |
| 63 | +export const getAllocationClasses = (total: number): string => { |
| 64 | + if (total > 100) return 'text-red-600'; |
| 65 | + if (total < 100) return 'text-yellow-600'; |
| 66 | + return 'text-green-600'; |
| 67 | +}; |
| 68 | + |
| 69 | +/** |
| 70 | + * Get allocation bar background classes |
| 71 | + */ |
| 72 | +export const getAllocationBarClasses = (total: number): string => { |
| 73 | + if (total > 100) return 'bg-red-500'; |
| 74 | + if (total < 100) return 'bg-yellow-500'; |
| 75 | + return 'bg-green-500'; |
| 76 | +}; |
0 commit comments