From de84c04280234f248027d197324b2f529f80494d Mon Sep 17 00:00:00 2001 From: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Date: Mon, 1 Mar 2021 23:44:16 +0200 Subject: [PATCH] feat(core): copy feature flags from main repo (#982) --- .../src/shared-controls/index.tsx | 9 +-- .../src/utils/featureFlags.ts | 59 +++++++++++++++++++ .../superset-ui-core/src/utils/index.ts | 1 + .../test/utils/featureFlag.test.ts | 33 +++++++++++ 4 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/featureFlags.ts create mode 100644 superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/utils/featureFlag.test.ts diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/index.tsx b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/index.tsx index 8d449969b6ac..5a9744469f5c 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/index.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/index.tsx @@ -35,9 +35,11 @@ */ import React from 'react'; import { + FeatureFlag, t, getCategoricalSchemeRegistry, getSequentialSchemeRegistry, + isFeatureEnabled, SequentialScheme, legacyValidateInteger, validateNonEmpty, @@ -483,12 +485,7 @@ const label_colors: SharedControlConfig<'ColorMapControl'> = { }), }; -// A quick and dirty patch, should be moved to the main repo in the future -export function isFeatureEnabled(feature: string) { - // @ts-ignore - return window && window.featureFlags && !!window.featureFlags[feature]; -} -const enableExploreDnd = isFeatureEnabled('ENABLE_EXPLORE_DRAG_AND_DROP'); +const enableExploreDnd = isFeatureEnabled(FeatureFlag.ENABLE_EXPLORE_DRAG_AND_DROP); const sharedControls = { metrics, diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/featureFlags.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/featureFlags.ts new file mode 100644 index 000000000000..665f4a218a57 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/featureFlags.ts @@ -0,0 +1,59 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +// We can codegen the enum definition based on a list of supported flags that we +// check into source control. We're hardcoding the supported flags for now. +export enum FeatureFlag { + ALLOW_DASHBOARD_DOMAIN_SHARDING = 'ALLOW_DASHBOARD_DOMAIN_SHARDING', + OMNIBAR = 'OMNIBAR', + CLIENT_CACHE = 'CLIENT_CACHE', + DYNAMIC_PLUGINS = 'DYNAMIC_PLUGINS', + SCHEDULED_QUERIES = 'SCHEDULED_QUERIES', + SQL_VALIDATORS_BY_ENGINE = 'SQL_VALIDATORS_BY_ENGINE', + ESTIMATE_QUERY_COST = 'ESTIMATE_QUERY_COST', + SHARE_QUERIES_VIA_KV_STORE = 'SHARE_QUERIES_VIA_KV_STORE', + SQLLAB_BACKEND_PERSISTENCE = 'SQLLAB_BACKEND_PERSISTENCE', + THUMBNAILS = 'THUMBNAILS', + LISTVIEWS_DEFAULT_CARD_VIEW = 'LISTVIEWS_DEFAULT_CARD_VIEW', + ENABLE_REACT_CRUD_VIEWS = 'ENABLE_REACT_CRUD_VIEWS', + DISABLE_DATASET_SOURCE_EDIT = 'DISABLE_DATASET_SOURCE_EDIT', + DISPLAY_MARKDOWN_HTML = 'DISPLAY_MARKDOWN_HTML', + ESCAPE_MARKDOWN_HTML = 'ESCAPE_MARKDOWN_HTML', + DASHBOARD_NATIVE_FILTERS = 'DASHBOARD_NATIVE_FILTERS', + DASHBOARD_CROSS_FILTERS = 'DASHBOARD_CROSS_FILTERS', + DASHBOARD_NATIVE_FILTERS_SET = 'DASHBOARD_NATIVE_FILTERS_SET', + VERSIONED_EXPORT = 'VERSIONED_EXPORT', + GLOBAL_ASYNC_QUERIES = 'GLOBAL_ASYNC_QUERIES', + ENABLE_TEMPLATE_PROCESSING = 'ENABLE_TEMPLATE_PROCESSING', + ENABLE_EXPLORE_DRAG_AND_DROP = 'ENABLE_EXPLORE_DRAG_AND_DROP', +} + +export type FeatureFlagMap = { + [key in FeatureFlag]?: boolean; +}; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +declare global { + interface Window { + featureFlags: FeatureFlagMap; + } +} + +export function isFeatureEnabled(feature: FeatureFlag) { + return window && window.featureFlags && !!window.featureFlags[feature]; +} diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/index.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/index.ts index df0ea96e16de..dd7524deb583 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/index.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/index.ts @@ -24,4 +24,5 @@ export { default as makeSingleton } from './makeSingleton'; export { default as promiseTimeout } from './promiseTimeout'; export { default as logging } from './logging'; export { default as removeDuplicates } from './removeDuplicates'; +export * from './featureFlags'; export * from './random'; diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/utils/featureFlag.test.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/utils/featureFlag.test.ts new file mode 100644 index 000000000000..7ea5adaf5401 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/utils/featureFlag.test.ts @@ -0,0 +1,33 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { FeatureFlag, isFeatureEnabled } from '../../src'; + +describe('isFeatureFlagEnabled', () => { + window.featureFlags = { + [FeatureFlag.CLIENT_CACHE]: true, + }; + it('returns false for unset feature flag', () => { + expect(isFeatureEnabled(FeatureFlag.ALLOW_DASHBOARD_DOMAIN_SHARDING)).toEqual(false); + }); + + it('returns true for set feature flag', () => { + expect(isFeatureEnabled(FeatureFlag.CLIENT_CACHE)).toEqual(true); + }); +});