Files
SKEEN-Proyecto/frontend/src/lib/utils.ts

41 lines
1.4 KiB
TypeScript

import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
/**
* Fecha de HOY en horario local (YYYY-MM-DD).
* No usar `new Date().toISOString().split('T')[0]`: convierte a UTC y, en la
* zona de la clínica (Tijuana, UTC-7/-8), a partir de las 16/17 h devuelve el
* día siguiente, con lo que los módulos mostraban "sin datos del día".
*/
export function todayLocal(d: Date = new Date()): string {
const y = d.getFullYear();
const m = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
return `${y}-${m}-${day}`;
}
type CsvCell = string | number | boolean | null | undefined;
/**
* Descarga un CSV (UTF-8 con BOM para que Excel respete acentos).
* Cada fila es un arreglo de celdas; se escapan comillas automáticamente.
*/
export function downloadCsv(filename: string, rows: CsvCell[][]) {
const csv = rows
.map((row) => row.map((cell) => `"${String(cell ?? '').replace(/"/g, '""')}"`).join(','))
.join('\r\n');
const blob = new Blob(['\uFEFF' + csv], { type: 'text/csv;charset=utf-8;' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = filename;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(url);
}