/** * Safely gets a field value from an item, supporting nested fields with dot notation */ export function getFieldValue(item: any, field: string): any { if (!item) return ""; // Handle nested fields with dot notation (e.g., "user.name") if (field.includes(".")) { const parts = field.split("."); let value = item; for (const part of parts) { if (value === null || value === undefined) return ""; value = value[part]; } return value; } return item[field]; } /** * Gets a field label from translations or formats the field name */ export function getFieldLabel(field: string, translations: Record, lang: string): string { const t = translations[lang] || {}; return t[field] || field.charAt(0).toUpperCase() + field.slice(1).replace(/_/g, " "); } /** * Generates responsive grid classes based on the gridCols prop */ export function getGridClasses(gridCols: 1 | 2 | 3 | 4 | 5 | 6): string { const baseClass = "grid grid-cols-1 gap-4"; // Map gridCols to responsive classes const colClasses: Record = { 1: "", 2: "sm:grid-cols-2", 3: "sm:grid-cols-2 md:grid-cols-3", 4: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4", 5: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5", 6: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6" }; return `${baseClass} ${colClasses[gridCols]}`; }