47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
/**
|
|
* 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<string, any>, 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<number, string> = {
|
|
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]}`;
|
|
}
|