Re_Figma_Code/src/pages/DetailedReports/utils/formatting.ts

73 lines
2.4 KiB
TypeScript

/**
* Formatting utility functions for Detailed Reports
*/
import { formatHoursMinutes } from '@/utils/slaTracker';
/**
* Format TAT hours (working hours to working days)
* Backend returns working hours, so we divide by 8 (working hours per day) not 24
*/
export function formatTAT(hours: number | null | undefined): string {
if (!hours && hours !== 0) return 'N/A';
const WORKING_HOURS_PER_DAY = 8;
if (hours < WORKING_HOURS_PER_DAY) return formatHoursMinutes(hours);
const days = Math.floor(hours / WORKING_HOURS_PER_DAY);
const remainingHours = hours % WORKING_HOURS_PER_DAY;
return remainingHours > 0 ? `${days}d ${formatHoursMinutes(remainingHours)}` : `${days}d`;
}
/**
* Format date for display
*/
export function formatDate(date: string | null | undefined): string {
if (!date) return 'N/A';
try {
const d = new Date(date);
return d.toLocaleDateString('en-US', {
year: 'numeric',
month: 'short',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
});
} catch {
return date;
}
}
/**
* Format date for CSV export (no commas, consistent format)
*/
export function formatDateForCSV(date: string | null | undefined): string {
if (!date) return 'N/A';
try {
const d = new Date(date);
// Format: YYYY-MM-DD HH:MM (no commas, Excel-friendly)
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
const hours = String(d.getHours()).padStart(2, '0');
const minutes = String(d.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}`;
} catch {
return date;
}
}
/**
* Map activity type to display label
*/
export function mapActivityType(type: string, _activityDescription?: string): string {
const typeLower = (type || '').toLowerCase();
if (typeLower.includes('created') || typeLower.includes('create')) return 'Created Request';
if (typeLower.includes('approval') || typeLower.includes('approved')) return 'Approved Request';
if (typeLower.includes('rejection') || typeLower.includes('rejected')) return 'Rejected Request';
if (typeLower.includes('comment')) return 'Added Comment';
if (typeLower.includes('view') || typeLower.includes('viewed')) return 'Viewed Request';
if (typeLower.includes('upload') || typeLower.includes('document')) return 'Uploaded Document';
if (typeLower.includes('login')) return 'Login';
return type || 'Activity';
}