The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/apps/meteor/ee/client/lib/onToggledFeature.ts

43 lines
855 B

import { QueryObserver } from '@tanstack/react-query';
import { queryClient } from '../../../client/lib/queryClient';
import type { BundleFeature } from '../../app/license/server/bundles';
import { fetchFeatures } from './fetchFeatures';
export const onToggledFeature = (
feature: BundleFeature,
{
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;
}
});
};