useIsFeatureEnabled.ts28 lines · main
1import { isFeatureEnabled, type Feature } from 'common'
2
3import { useEnabledFeaturesOverrideQuery } from '@/data/misc/enabled-features-override-query'
4import { useProfile } from '@/lib/profile'
5
6function useIsFeatureEnabled<T extends Feature[]>(
7 features: T
8): ReturnType<typeof isFeatureEnabled<T>>
9function useIsFeatureEnabled(features: Feature): ReturnType<typeof isFeatureEnabled>
10function useIsFeatureEnabled<T extends Feature | Feature[]>(features: T) {
11 const { profile } = useProfile()
12 const { data: override } = useEnabledFeaturesOverrideQuery()
13
14 const disabledFeatures = [
15 ...(profile?.disabled_features ?? []),
16 ...((override?.disabled_features ?? []) as Feature[]),
17 ]
18
19 // This code branch is to make the type checker happy, it's intentionally
20 // the same as the isFeatureEnabled function call below.
21 if (Array.isArray(features)) {
22 return isFeatureEnabled(features, disabledFeatures)
23 }
24
25 return isFeatureEnabled(features, disabledFeatures)
26}
27
28export { useIsFeatureEnabled }