import { Feature } from 'data/profile/types' import { useProfile } from 'lib/profile' function checkFeature(feature: Feature, features?: Feature[]) { return !features?.includes(feature) ?? true } type SnakeToCamelCase = S extends `${infer First}_${infer Rest}` ? `${First}${SnakeToCamelCase>}` : S type FeatureToCamelCase = S extends `${infer P}:${infer R}` ? `${SnakeToCamelCase

}${Capitalize>}` : SnakeToCamelCase function featureToCamelCase(feature: Feature) { return feature .replace(/:/g, '_') .split('_') .map((word, index) => (index === 0 ? word : word[0].toUpperCase() + word.slice(1))) .join('') as FeatureToCamelCase } function useIsFeatureEnabled( features: T ): { [key in FeatureToCamelCase]: boolean } function useIsFeatureEnabled(features: Feature): boolean function useIsFeatureEnabled(features: T) { const { profile } = useProfile() if (Array.isArray(features)) { return Object.fromEntries( features.map((feature) => [ featureToCamelCase(feature), checkFeature(feature, profile?.disabled_features), ]) ) } return checkFeature(features, profile?.disabled_features) } export { useIsFeatureEnabled }