useIsFeatureEnabled.ts28 lines · main
| 1 | import { isFeatureEnabled, type Feature } from 'common' |
| 2 | |
| 3 | import { useEnabledFeaturesOverrideQuery } from '@/data/misc/enabled-features-override-query' |
| 4 | import { useProfile } from '@/lib/profile' |
| 5 | |
| 6 | function useIsFeatureEnabled<T extends Feature[]>( |
| 7 | features: T |
| 8 | ): ReturnType<typeof isFeatureEnabled<T>> |
| 9 | function useIsFeatureEnabled(features: Feature): ReturnType<typeof isFeatureEnabled> |
| 10 | function 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 | |
| 28 | export { useIsFeatureEnabled } |