mirror of
https://github.com/apache/superset.git
synced 2026-05-12 19:35:17 +00:00
117 lines
4.4 KiB
TypeScript
117 lines
4.4 KiB
TypeScript
/**
|
|
* 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 { logging as logger } from '@apache-superset/core/utils';
|
|
|
|
// 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 {
|
|
// PLEASE KEEP THE LIST SORTED ALPHABETICALLY
|
|
AlertsAttachReports = 'ALERTS_ATTACH_REPORTS',
|
|
AlertReports = 'ALERT_REPORTS',
|
|
AlertReportTabs = 'ALERT_REPORT_TABS',
|
|
AlertReportSlackV2 = 'ALERT_REPORT_SLACK_V2',
|
|
AlertReportWebhook = 'ALERT_REPORT_WEBHOOK',
|
|
AlertReportsFilter = 'ALERT_REPORTS_FILTER',
|
|
AllowFullCsvExport = 'ALLOW_FULL_CSV_EXPORT',
|
|
AvoidColorsCollision = 'AVOID_COLORS_COLLISION',
|
|
ChartPluginsExperimental = 'CHART_PLUGINS_EXPERIMENTAL',
|
|
ConfirmDashboardDiff = 'CONFIRM_DASHBOARD_DIFF',
|
|
CssTemplates = 'CSS_TEMPLATES',
|
|
DashboardVirtualization = 'DASHBOARD_VIRTUALIZATION',
|
|
DashboardVirtualizationDeferData = 'DASHBOARD_VIRTUALIZATION_DEFER_DATA',
|
|
DashboardRbac = 'DASHBOARD_RBAC',
|
|
DatapanelClosedByDefault = 'DATAPANEL_CLOSED_BY_DEFAULT',
|
|
DatasetFolders = 'DATASET_FOLDERS',
|
|
DateRangeTimeshiftsEnabled = 'DATE_RANGE_TIMESHIFTS_ENABLED',
|
|
DisableEmbeddedSupersetLogout = 'DISABLE_EMBEDDED_SUPERSET_LOGOUT',
|
|
/** @deprecated */
|
|
DrillToDetail = 'DRILL_TO_DETAIL',
|
|
DrillBy = 'DRILL_BY',
|
|
DynamicPlugins = 'DYNAMIC_PLUGINS',
|
|
EmbeddableCharts = 'EMBEDDABLE_CHARTS',
|
|
EmbeddedSuperset = 'EMBEDDED_SUPERSET',
|
|
EnableAdvancedDataTypes = 'ENABLE_ADVANCED_DATA_TYPES',
|
|
EnableExtensions = 'ENABLE_EXTENSIONS',
|
|
/** @deprecated */
|
|
EnableJavascriptControls = 'ENABLE_JAVASCRIPT_CONTROLS',
|
|
EnableTemplateProcessing = 'ENABLE_TEMPLATE_PROCESSING',
|
|
EscapeMarkdownHtml = 'ESCAPE_MARKDOWN_HTML',
|
|
EstimateQueryCost = 'ESTIMATE_QUERY_COST',
|
|
FabApiKeyEnabled = 'FAB_API_KEY_ENABLED',
|
|
FilterBarClosedByDefault = 'FILTERBAR_CLOSED_BY_DEFAULT',
|
|
GlobalAsyncQueries = 'GLOBAL_ASYNC_QUERIES',
|
|
GlobalTaskFramework = 'GLOBAL_TASK_FRAMEWORK',
|
|
GranularExportControls = 'GRANULAR_EXPORT_CONTROLS',
|
|
ListviewsDefaultCardView = 'LISTVIEWS_DEFAULT_CARD_VIEW',
|
|
Matrixify = 'MATRIXIFY',
|
|
ScheduledQueries = 'SCHEDULED_QUERIES',
|
|
SemanticLayers = 'SEMANTIC_LAYERS',
|
|
SqllabBackendPersistence = 'SQLLAB_BACKEND_PERSISTENCE',
|
|
SqlValidatorsByEngine = 'SQL_VALIDATORS_BY_ENGINE',
|
|
SshTunneling = 'SSH_TUNNELING',
|
|
TaggingSystem = 'TAGGING_SYSTEM',
|
|
Thumbnails = 'THUMBNAILS',
|
|
UseAnalogousColors = 'USE_ANALOGOUS_COLORS',
|
|
ForceSqlLabRunAsync = 'SQLLAB_FORCE_RUN_ASYNC',
|
|
SlackEnableAvatars = 'SLACK_ENABLE_AVATARS',
|
|
EnableDashboardScreenshotEndpoints = 'ENABLE_DASHBOARD_SCREENSHOT_ENDPOINTS',
|
|
EnableDashboardDownloadWebDriverScreenshot = 'ENABLE_DASHBOARD_DOWNLOAD_WEBDRIVER_SCREENSHOT',
|
|
TableV2TimeComparisonEnabled = 'TABLE_V2_TIME_COMPARISON_ENABLED',
|
|
AgGridTableEnabled = 'AG_GRID_TABLE_ENABLED',
|
|
}
|
|
|
|
export type ScheduleQueriesProps = {
|
|
JSONSCHEMA: {
|
|
[key: string]: string;
|
|
};
|
|
UISCHEMA: {
|
|
[key: string]: string;
|
|
};
|
|
VALIDATION: {
|
|
[key: string]: string;
|
|
};
|
|
};
|
|
export type FeatureFlagMap = {
|
|
[key in Exclude<FeatureFlag, FeatureFlag.ScheduledQueries>]?: boolean;
|
|
} & {
|
|
ScheduledQueries?: ScheduleQueriesProps;
|
|
};
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
declare global {
|
|
interface Window {
|
|
featureFlags: FeatureFlagMap;
|
|
}
|
|
}
|
|
|
|
export function initFeatureFlags(featureFlags?: FeatureFlagMap) {
|
|
if (!window.featureFlags) {
|
|
window.featureFlags = featureFlags || {};
|
|
}
|
|
}
|
|
|
|
export function isFeatureEnabled(feature: FeatureFlag): boolean {
|
|
try {
|
|
return !!window.featureFlags[feature as keyof FeatureFlagMap];
|
|
} catch (error) {
|
|
logger.error(`Failed to query feature flag ${feature}`);
|
|
}
|
|
return false;
|
|
}
|