platform-hooks.ts•2.87 kB
import {
QueryClient,
useMutation,
useSuspenseQuery,
} from '@tanstack/react-query';
import { t } from 'i18next';
import { toast } from '@/components/ui/use-toast';
import { authenticationSession } from '@/lib/authentication-session';
import {
METRIC_TO_LIMIT_MAPPING,
METRIC_TO_USAGE_MAPPING,
} from '@activepieces/ee-shared';
import {
isNil,
PlatformUsageMetric,
PlatformWithoutSensitiveData,
} from '@activepieces/shared';
import { platformApi } from '../lib/platforms-api';
import { flagsHooks } from './flags-hooks';
export const platformHooks = {
isCopilotEnabled: () => {
const { platform } = platformHooks.useCurrentPlatform();
return Object.keys(platform?.copilotSettings?.providers ?? {}).length > 0;
},
useCurrentPlatform: () => {
const currentPlatformId = authenticationSession.getPlatformId();
const query = useSuspenseQuery({
queryKey: ['platform', currentPlatformId],
queryFn: platformApi.getCurrentPlatform,
staleTime: Infinity,
});
return {
platform: query.data,
refetch: async () => {
await query.refetch();
},
setCurrentPlatform: (
queryClient: QueryClient,
platform: PlatformWithoutSensitiveData,
) => {
queryClient.setQueryData(['platform', currentPlatformId], platform);
},
};
},
useUpdateLisenceKey: (queryClient: QueryClient) => {
const currentPlatformId = authenticationSession.getPlatformId();
return useMutation({
mutationFn: async (tempLicenseKey: string) => {
if (tempLicenseKey.trim() === '') return;
await platformApi.verifyLicenseKey(tempLicenseKey.trim());
},
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: ['platform', currentPlatformId],
});
queryClient.invalidateQueries({
queryKey: flagsHooks.queryKey,
});
toast({
title: t('Success'),
description: t('License activated successfully!'),
});
},
onError: () => {
toast({
title: t('Error'),
description: t('Activation failed, invalid license key'),
variant: 'destructive',
});
},
});
},
useCheckResourceIsLocked: (
resource: Exclude<
PlatformUsageMetric,
PlatformUsageMetric.AI_CREDITS | PlatformUsageMetric.TASKS
>,
): boolean => {
const { platform } = platformHooks.useCurrentPlatform();
const plan = platform.plan;
const usage = platform.usage;
if (isNil(usage)) {
return false;
}
const limitKey = METRIC_TO_LIMIT_MAPPING[resource];
const usageKey = METRIC_TO_USAGE_MAPPING[resource];
const limit = plan[limitKey];
const currentUsage = usage[usageKey];
if (!isNil(limit) && currentUsage > limit) {
return true;
}
return false;
},
};