Files
arboretum/packages/web/src/composables/useDebouncedRef.ts
Johan LEROY 65ef616867
Some checks failed
CI / Build & test (Node 24) (push) Has been cancelled
CI / Pack & boot smoke (Node 22) (push) Has been cancelled
CI / No em/en dashes (push) Has been cancelled
CI / Build & test (Node 22) (push) Has been cancelled
Deploy site (production) / build-and-deploy (push) Successful in 20s
chore(typo): retire tous les tirets cadratins/demi-cadratins + garde CI
Remplace les 547 tirets cadratins (U+2014) et demi-cadratins (U+2013) des fichiers versionnés par la ponctuation contextuelle adaptée (point médian, deux-points, virgule, parenthèses ; tiret simple pour les plages), sur 122 fichiers (appli, vitrine, doc, tests, workflows, scripts).

Ajoute le job CI « lint-dashes » (git grep -P) qui échoue si un tiret cadratin/demi-cadratin réapparaît, hors logo binaire et captures brutes du terminal (fidélité des fixtures de détection de dialogue).
2026-07-17 16:44:00 +02:00

23 lines
765 B
TypeScript

import { ref, watch, onUnmounted, getCurrentInstance, type Ref } from 'vue';
/**
* Renvoie un miroir débouncé d'un ref source. Le ref source reste instantané (idéal pour un
* v-model d'input) ; le miroir ne se met à jour qu'après `delay` ms de stabilité : c'est lui
* que le pipeline de tri/filtre consomme, pour ne pas recalculer à chaque frappe.
*/
export function useDebouncedRef<T>(source: Ref<T>, delay = 150): Ref<T> {
const debounced = ref(source.value) as Ref<T>;
let timer: ReturnType<typeof setTimeout> | undefined;
watch(source, (v) => {
clearTimeout(timer);
timer = setTimeout(() => {
debounced.value = v;
}, delay);
});
if (getCurrentInstance()) onUnmounted(() => clearTimeout(timer));
return debounced;
}