RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/lib/tracker.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Tracker } from 'meteor/tracker';

export const asReactiveSource = <T>(subscribe: (cb: () => void) => () => void, getSnapshot: () => T) => {
    if (!Tracker.active) {
        return getSnapshot();
    }

    const computation = Tracker.currentComputation;
    const unsubscribe = subscribe(() => computation?.invalidate());

    computation?.onInvalidate(() => {
        unsubscribe();
    });

    return getSnapshot();
};