19 lines
474 B
TypeScript
19 lines
474 B
TypeScript
import { ref, watch, type Ref } from 'vue'
|
|
|
|
/** Debounced mirror of a ref (no @vueuse dependency). */
|
|
export function refDebounced<T>(source: Ref<T>, ms: number): Ref<T> {
|
|
const debounced = ref(source.value) as Ref<T>
|
|
let timer: ReturnType<typeof setTimeout> | undefined
|
|
watch(
|
|
source,
|
|
(v) => {
|
|
if (timer) clearTimeout(timer)
|
|
timer = setTimeout(() => {
|
|
debounced.value = v
|
|
}, ms)
|
|
},
|
|
{ flush: 'sync' }
|
|
)
|
|
return debounced
|
|
}
|