T-013 — sort la fonction debounce inline de audit-log.vue vers frontend/shared/utils/debounce.ts (auto-importe par Nuxt) et ajoute 3 tests Vitest (delay coalesce, derniere invocation gagne, plusieurs executions espacees). Pret pour reutilisation sur les prochaines pages avec recherche/filtres.
16 lines
646 B
TypeScript
16 lines
646 B
TypeScript
/**
|
|
* Utilitaire de debounce partage.
|
|
*
|
|
* Retarde l'execution d'une fonction : chaque appel reset un timer et
|
|
* l'execution reelle n'a lieu qu'apres `delay` ms sans nouvelle invocation.
|
|
* Utile pour eviter un spam d'appels reseau sur un champ de recherche
|
|
* (une requete par touche -> une seule requete apres la derniere frappe).
|
|
*/
|
|
export function debounce<T extends (...args: never[]) => void>(fn: T, delay: number): T {
|
|
let timer: ReturnType<typeof setTimeout> | null = null
|
|
return ((...args: Parameters<T>) => {
|
|
if (null !== timer) clearTimeout(timer)
|
|
timer = setTimeout(() => fn(...args), delay)
|
|
}) as T
|
|
}
|