UNPKG

@cran/lib.vue.ref

Version:

Vue Reactivity Extensions

25 lines (21 loc) 716 B
import { type WatchCallback, type WatchOptions, type WatchSource, watch } from "vue"; /** * @since 0.0.1 * @category Watch */ export function watchFilter<T, Immediate extends Readonly<boolean> = false> ( source: WatchSource<T>, filter: T | (( ...args: Parameters<WatchCallback< T, Immediate extends true ? T | undefined : T >> ) => boolean), cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchOptions<Immediate> ) { const filterFn = filter instanceof Function ? filter : function filterFn ( next: T ) { return next === filter; }; return watch(source, function onSourceChange ( ...args ) { if (filterFn(...args)) { cb(...args); } }, options); }