useIsFeatureEnabled.ts 1014 B

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