Skip to content

Commit

Permalink
feat(core): copy feature flags from main repo (apache-superset#982)
Browse files Browse the repository at this point in the history
  • Loading branch information
villebro authored and NejcZdovc committed Apr 20, 2021
1 parent 2a5b708 commit 0d43ee7
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,11 @@
*/
import React from 'react';
import {
FeatureFlag,
t,
getCategoricalSchemeRegistry,
getSequentialSchemeRegistry,
isFeatureEnabled,
SequentialScheme,
legacyValidateInteger,
validateNonEmpty,
Expand Down Expand Up @@ -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,
Expand Down
59 changes: 59 additions & 0 deletions packages/superset-ui-core/src/utils/featureFlags.ts
Original file line number Diff line number Diff line change
@@ -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];
}
1 change: 1 addition & 0 deletions packages/superset-ui-core/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
33 changes: 33 additions & 0 deletions packages/superset-ui-core/test/utils/featureFlag.test.ts
Original file line number Diff line number Diff line change
@@ -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);
});
});

0 comments on commit 0d43ee7

Please sign in to comment.