mirror of
https://github.com/lux-tel/websites.git
synced 2026-10-30 20:31:36 +00:00
53 lines
1.8 KiB
TypeScript
53 lines
1.8 KiB
TypeScript
'use client';
|
|
|
|
import { QUERY } from '@/lib/constants';
|
|
import type {
|
|
EXPERIMENTAL_FEATURE_FLAG,
|
|
FEATURE_FLAG,
|
|
REMOTE_FEATURE_FLAG,
|
|
} from '@/lib/feature-flags';
|
|
import {
|
|
FeatureFlagProviderGeneric,
|
|
useExperimentalFeatureFlagGeneric,
|
|
useFeatureFlagGeneric,
|
|
useFeatureFlagsGeneric,
|
|
useSetExperimentalFeatureFlagGeneric,
|
|
useSetFeatureFlagGeneric,
|
|
} from '@session/feature-flags/providers/feature-flag-provider';
|
|
import { getRemoteFeatureFlagsGeneric } from '@session/feature-flags/remote';
|
|
import { useQuery } from '@tanstack/react-query';
|
|
import { useMemo } from 'react';
|
|
|
|
export const useFeatureFlag = useFeatureFlagGeneric<FEATURE_FLAG>;
|
|
export const useSetFeatureFlag = useSetFeatureFlagGeneric<FEATURE_FLAG>;
|
|
export const useFeatureFlags = useFeatureFlagsGeneric<FEATURE_FLAG | EXPERIMENTAL_FEATURE_FLAG>;
|
|
export const useExperimentalFeatureFlag =
|
|
useExperimentalFeatureFlagGeneric<EXPERIMENTAL_FEATURE_FLAG>;
|
|
export const useSetExperimentalFeatureFlag =
|
|
useSetExperimentalFeatureFlagGeneric<EXPERIMENTAL_FEATURE_FLAG>;
|
|
export const FeatureFlagProvider = FeatureFlagProviderGeneric<FEATURE_FLAG>;
|
|
|
|
export const useRemoteFeatureFlagsQuery = () => {
|
|
return useQuery<Set<REMOTE_FEATURE_FLAG>>({
|
|
queryKey: ['remoteFeatureFlags'],
|
|
staleTime: QUERY.STALE_TIME_REMOTE_FEATURE_FLAGS,
|
|
queryFn: async () => {
|
|
const { flags, error } = await getRemoteFeatureFlagsGeneric<REMOTE_FEATURE_FLAG>();
|
|
|
|
if (error) {
|
|
console.error(error);
|
|
}
|
|
|
|
return new Set(flags);
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useRemoteFeatureFlagQuery = (flag: REMOTE_FEATURE_FLAG) => {
|
|
const { data: flags, isLoading } = useRemoteFeatureFlagsQuery();
|
|
|
|
const enabled = useMemo(() => (flags ? flags.has(flag) : false), [flags, flag]);
|
|
|
|
return { enabled, isLoading };
|
|
};
|