RocketChat/Rocket.Chat

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

Summary

Maintainability
A
0 mins
Test Coverage
import type { LicenseModule } from '@rocket.chat/core-typings';
import { QueryObserver } from '@tanstack/react-query';

import { fetchFeatures } from './fetchFeatures';
import { queryClient } from './queryClient';

export const onToggledFeature = (
    feature: LicenseModule,
    {
        up,
        down,
    }: {
        up?: () => void;
        down?: () => void;
    },
): (() => void) => {
    const observer = new QueryObserver(queryClient, {
        queryKey: ['ee.features'],
        queryFn: fetchFeatures,
        staleTime: Infinity,
    });

    let enabled = false;

    return observer.subscribe((result) => {
        if (!result.isSuccess) {
            return;
        }

        const features = result.data;
        const hasFeature = features.includes(feature);

        if (!enabled && hasFeature) {
            up?.();
            enabled = true;
        }

        if (enabled && !hasFeature) {
            down?.();
            enabled = false;
        }
    });
};