Path: blob/main/components/dashboard/src/data/featureflag-query.ts
2500 views
/**1* Copyright (c) 2023 Gitpod GmbH. All rights reserved.2* Licensed under the GNU Affero General Public License (AGPL).3* See License.AGPL.txt in the project root for license information.4*/56import { getPrimaryEmail } from "@gitpod/public-api-common/lib/user-utils";7import { useQuery } from "@tanstack/react-query";8import { getExperimentsClient } from "../experiments/client";9import { useCurrentUser } from "../user-context";10import { useCurrentOrg } from "./organizations/orgs-query";1112const featureFlags = {13oidcServiceEnabled: false,14// Default to true to enable on gitpod dedicated until ff support is added for dedicated15orgGitAuthProviders: true,16userGitAuthProviders: false,17// Local SSH feature of VS Code Desktop Extension18gitpod_desktop_use_local_ssh_proxy: false,19enabledOrbitalDiscoveries: "",20// dummy specified dataops feature, default false21dataops: false,22enable_multi_org: false,23showBrowserExtensionPromotion: false,24enable_experimental_jbtb: false,25enabled_configuration_prebuild_full_clone: false,26enterprise_onboarding_enabled: false,27commit_annotation_setting_enabled: false,28};2930type FeatureFlags = typeof featureFlags;3132export const useFeatureFlag = <K extends keyof FeatureFlags>(featureFlag: K): FeatureFlags[K] | boolean => {33const user = useCurrentUser();34const org = useCurrentOrg().data;3536const queryKey = ["featureFlag", featureFlag, user?.id || "", org?.id || ""];3738const query = useQuery(queryKey, async () => {39const flagValue = await getExperimentsClient().getValueAsync(featureFlag, featureFlags[featureFlag], {40user: user && {41id: user.id,42email: getPrimaryEmail(user),43},44teamId: org?.id,45teamName: org?.name,46gitpodHost: window.location.host,47});48return flagValue;49});5051return query.data !== undefined ? query.data : featureFlags[featureFlag];52};5354export const useIsDataOps = () => {55return useFeatureFlag("dataops");56};575859