@cran/lib.vue.ref
Version:
Vue Reactivity Extensions
25 lines (21 loc) • 716 B
text/typescript
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);
}