32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { type ClassValue, clsx } from 'clsx'
|
|
import { twMerge } from 'tailwind-merge'
|
|
|
|
export function cn(...inputs: ClassValue[]) {
|
|
return twMerge(clsx(inputs))
|
|
}
|
|
|
|
export function calculateScore(correct: number, total: number): number {
|
|
if (total === 0) return 0
|
|
return Math.round((correct / total) * 20 * 100) / 100
|
|
}
|
|
|
|
export function formatScore(score: number): string {
|
|
return score.toFixed(2)
|
|
}
|
|
|
|
// Formatage de date identique sur Node.js (serveur) et navigateur (client).
|
|
// toLocaleDateString() produit des résultats différents selon l'environnement,
|
|
// ce qui cause des erreurs d'hydration React #418.
|
|
const MONTHS_FR = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin',
|
|
'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.']
|
|
|
|
export function formatDate(dateStr: string | null | undefined): string {
|
|
if (!dateStr) return 'Jamais'
|
|
const d = new Date(dateStr)
|
|
if (isNaN(d.getTime())) return '—'
|
|
const day = String(d.getDate()).padStart(2, '0')
|
|
const month = MONTHS_FR[d.getMonth()]
|
|
const year = d.getFullYear()
|
|
return `${day} ${month} ${year}`
|
|
}
|