This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch removing-DASHBOARD_CROSS_FILTERS-flag
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to
refs/heads/removing-DASHBOARD_CROSS_FILTERS-flag by this push:
new 0178f6cf00 removing flag and all that comes with it.
0178f6cf00 is described below
commit 0178f6cf008c5841b8d053f910ff199f22f3e67b
Author: Evan Rusackas <[email protected]>
AuthorDate: Fri Jan 10 12:55:25 2025 -0700
removing flag and all that comes with it.
---
RESOURCES/FEATURE_FLAGS.md | 1 -
UPDATING.md | 2 +-
.../superset-ui-core/src/utils/featureFlags.ts | 2 -
.../Chart/ChartContextMenu/ChartContextMenu.tsx | 4 +-
.../Chart/ChartContextMenu/useContextMenu.test.tsx | 1 -
.../src/components/Chart/ChartRenderer.jsx | 7 +-
.../src/dashboard/actions/dashboardState.js | 24 +++----
superset-frontend/src/dashboard/actions/hydrate.js | 18 +++--
.../src/dashboard/components/Dashboard.jsx | 7 +-
.../DashboardBuilder/DashboardBuilder.tsx | 6 +-
.../components/SliceHeaderControls/index.tsx | 1 -
.../FilterBarSettings/FilterBarSettings.test.tsx | 30 --------
.../FilterBar/FilterBarSettings/index.tsx | 11 +--
.../FilterBar/FilterControls/FilterControls.tsx | 22 ++----
.../nativeFilters/FilterBar/Horizontal.tsx | 29 +++-----
.../nativeFilters/FilterBar/Vertical.tsx | 12 +---
.../components/nativeFilters/selectors.ts | 82 ++++++++++------------
.../components/nativeFilters/utils.test.ts | 12 ----
.../dashboard/components/nativeFilters/utils.ts | 5 +-
.../src/dashboard/util/crossFilters.test.ts | 30 +-------
.../src/dashboard/util/crossFilters.ts | 9 +--
superset-frontend/src/dataMask/reducer.ts | 20 +++---
superset/config.py | 1 -
23 files changed, 93 insertions(+), 243 deletions(-)
diff --git a/RESOURCES/FEATURE_FLAGS.md b/RESOURCES/FEATURE_FLAGS.md
index a09fb00b55..1f346a13d4 100644
--- a/RESOURCES/FEATURE_FLAGS.md
+++ b/RESOURCES/FEATURE_FLAGS.md
@@ -97,7 +97,6 @@ These features flags currently default to True and **will be
removed in a future
[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
- AVOID_COLORS_COLLISION
-- DASHBOARD_CROSS_FILTERS
- DRILL_TO_DETAIL
- ENABLE_JAVASCRIPT_CONTROLS
- KV_STORE
diff --git a/UPDATING.md b/UPDATING.md
index 392e0cbb44..d43f8ef2f2 100644
--- a/UPDATING.md
+++ b/UPDATING.md
@@ -23,7 +23,7 @@ This file documents any backwards-incompatible changes in
Superset and
assists people when migrating to a new version.
## Next
-
+- [XXXX](x) Removed the previously deprecated `DASHBOARD_CROSS_FILTERS`
feature flag
- [31582](https://github.com/apache/superset/pull/31582) Removed the legacy
Area, Bar, Event Flow, Heatmap, Histogram, Line, Sankey, and Sankey Loop
charts. They were all automatically migrated to their ECharts counterparts with
the exception of the Event Flow and Sankey Loop charts which were removed as
they were not actively maintained and not widely used. If you were using the
Event Flow or Sankey Loop charts, you will need to find an alternative solution.
- [31198](https://github.com/apache/superset/pull/31198) Disallows by default
the use of the following ClickHouse functions: "version", "currentDatabase",
"hostName".
- [29798](https://github.com/apache/superset/pull/29798) Since 3.1.0, the
intial schedule for an alert or report was mistakenly offset by the specified
timezone's relation to UTC. The initial schedule should now begin at the
correct time.
diff --git
a/superset-frontend/packages/superset-ui-core/src/utils/featureFlags.ts
b/superset-frontend/packages/superset-ui-core/src/utils/featureFlags.ts
index e20d94c7d8..d4935f7883 100644
--- a/superset-frontend/packages/superset-ui-core/src/utils/featureFlags.ts
+++ b/superset-frontend/packages/superset-ui-core/src/utils/featureFlags.ts
@@ -30,8 +30,6 @@ export enum FeatureFlag {
AvoidColorsCollision = 'AVOID_COLORS_COLLISION',
ChartPluginsExperimental = 'CHART_PLUGINS_EXPERIMENTAL',
ConfirmDashboardDiff = 'CONFIRM_DASHBOARD_DIFF',
- /** @deprecated */
- DashboardCrossFilters = 'DASHBOARD_CROSS_FILTERS',
DashboardVirtualization = 'DASHBOARD_VIRTUALIZATION',
DashboardRbac = 'DASHBOARD_RBAC',
DatapanelClosedByDefault = 'DATAPANEL_CLOSED_BY_DEFAULT',
diff --git
a/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
b/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
index b3b3afbb81..53aefa382a 100644
---
a/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
+++
b/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
@@ -119,9 +119,7 @@ const ChartContextMenu = (
canDrillBy &&
isDisplayed(ContextMenuItem.DrillBy);
- const showCrossFilters =
- isFeatureEnabled(FeatureFlag.DashboardCrossFilters) &&
- isDisplayed(ContextMenuItem.CrossFilter);
+ const showCrossFilters = isDisplayed(ContextMenuItem.CrossFilter);
const isCrossFilteringSupportedByChart = getChartMetadataRegistry()
.get(formData.viz_type)
diff --git
a/superset-frontend/src/components/Chart/ChartContextMenu/useContextMenu.test.tsx
b/superset-frontend/src/components/Chart/ChartContextMenu/useContextMenu.test.tsx
index c06857d556..e1db166269 100644
---
a/superset-frontend/src/components/Chart/ChartContextMenu/useContextMenu.test.tsx
+++
b/superset-frontend/src/components/Chart/ChartContextMenu/useContextMenu.test.tsx
@@ -29,7 +29,6 @@ const CONTEXT_MENU_TEST_ID = 'chart-context-menu';
// @ts-ignore
global.featureFlags = {
- [FeatureFlag.DashboardCrossFilters]: true,
[FeatureFlag.DrillToDetail]: true,
[FeatureFlag.DrillBy]: true,
};
diff --git a/superset-frontend/src/components/Chart/ChartRenderer.jsx
b/superset-frontend/src/components/Chart/ChartRenderer.jsx
index d93e30a107..9440548620 100644
--- a/superset-frontend/src/components/Chart/ChartRenderer.jsx
+++ b/superset-frontend/src/components/Chart/ChartRenderer.jsx
@@ -24,8 +24,6 @@ import {
logging,
Behavior,
t,
- isFeatureEnabled,
- FeatureFlag,
getChartMetadataRegistry,
VizType,
} from '@superset-ui/core';
@@ -90,10 +88,7 @@ class ChartRenderer extends Component {
)?.suppressContextMenu;
this.state = {
showContextMenu:
- props.source === ChartSource.Dashboard &&
- !suppressContextMenu &&
- (isFeatureEnabled(FeatureFlag.DrillToDetail) ||
- isFeatureEnabled(FeatureFlag.DashboardCrossFilters)),
+ props.source === ChartSource.Dashboard && !suppressContextMenu,
inContextMenu: false,
legendState: undefined,
};
diff --git a/superset-frontend/src/dashboard/actions/dashboardState.js
b/superset-frontend/src/dashboard/actions/dashboardState.js
index 4ade6f3327..a4b0c9a748 100644
--- a/superset-frontend/src/dashboard/actions/dashboardState.js
+++ b/superset-frontend/src/dashboard/actions/dashboardState.js
@@ -353,16 +353,14 @@ export function saveDashboardRequest(data, id, saveType) {
if (lastModifiedTime) {
dispatch(saveDashboardRequestSuccess(lastModifiedTime));
}
- if (isFeatureEnabled(FeatureFlag.DashboardCrossFilters)) {
- const { chartConfiguration, globalChartConfiguration } =
- handleChartConfiguration();
- dispatch(
- saveChartConfiguration({
- chartConfiguration,
- globalChartConfiguration,
- }),
- );
- }
+ const { chartConfiguration, globalChartConfiguration } =
+ handleChartConfiguration();
+ dispatch(
+ saveChartConfiguration({
+ chartConfiguration,
+ globalChartConfiguration,
+ }),
+ );
dispatch(saveDashboardFinished());
dispatch(addSuccessToast(t('This dashboard was saved successfully.')));
return response;
@@ -437,10 +435,8 @@ export function saveDashboardRequest(data, id, saveType) {
) {
let chartConfiguration = {};
let globalChartConfiguration = {};
- if (isFeatureEnabled(FeatureFlag.DashboardCrossFilters)) {
- ({ chartConfiguration, globalChartConfiguration } =
- handleChartConfiguration());
- }
+ ({ chartConfiguration, globalChartConfiguration } =
+ handleChartConfiguration());
const updatedDashboard =
saveType === SAVE_TYPE_OVERWRITE_CONFIRMED
? data
diff --git a/superset-frontend/src/dashboard/actions/hydrate.js
b/superset-frontend/src/dashboard/actions/hydrate.js
index 8dd36a8063..55754b1c27 100644
--- a/superset-frontend/src/dashboard/actions/hydrate.js
+++ b/superset-frontend/src/dashboard/actions/hydrate.js
@@ -230,16 +230,14 @@ export const hydrateDashboard =
filterConfig: metadata?.native_filter_configuration || [],
});
- if (isFeatureEnabled(FeatureFlag.DashboardCrossFilters)) {
- const { chartConfiguration, globalChartConfiguration } =
- getCrossFiltersConfiguration(
- dashboardLayout.present,
- metadata,
- chartQueries,
- );
- metadata.chart_configuration = chartConfiguration;
- metadata.global_chart_configuration = globalChartConfiguration;
- }
+ const { chartConfiguration, globalChartConfiguration } =
+ getCrossFiltersConfiguration(
+ dashboardLayout.present,
+ metadata,
+ chartQueries,
+ );
+ metadata.chart_configuration = chartConfiguration;
+ metadata.global_chart_configuration = globalChartConfiguration;
const { roles } = user;
const canEdit = canUserEditDashboard(dashboard, user);
diff --git a/superset-frontend/src/dashboard/components/Dashboard.jsx
b/superset-frontend/src/dashboard/components/Dashboard.jsx
index 48e70c8fd4..762e120390 100644
--- a/superset-frontend/src/dashboard/components/Dashboard.jsx
+++ b/superset-frontend/src/dashboard/components/Dashboard.jsx
@@ -18,7 +18,7 @@
*/
import { PureComponent } from 'react';
import PropTypes from 'prop-types';
-import { isFeatureEnabled, t, FeatureFlag } from '@superset-ui/core';
+import { t } from '@superset-ui/core';
import { PluginContext } from 'src/components/DynamicPlugins';
import Loading from 'src/components/Loading';
@@ -163,10 +163,7 @@ class Dashboard extends PureComponent {
editMode,
} = this.props;
const { appliedFilters, appliedOwnDataCharts } = this;
- if (
- isFeatureEnabled(FeatureFlag.DashboardCrossFilters) &&
- !chartConfiguration
- ) {
+ if (!chartConfiguration) {
// For a first loading we need to wait for cross filters charts data
loaded to get all active filters
// for correct comparing of filters to avoid unnecessary requests
return;
diff --git
a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
index e5caed6968..7b890eb8a9 100644
---
a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
+++
b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
@@ -395,9 +395,6 @@ const DashboardBuilder = () => {
const fullSizeChartId = useSelector<RootState, number | null>(
state => state.dashboardState.fullSizeChartId,
);
- const crossFiltersEnabled = isFeatureEnabled(
- FeatureFlag.DashboardCrossFilters,
- );
const filterBarOrientation = useSelector<RootState, FilterBarOrientation>(
({ dashboardInfo }) =>
isFeatureEnabled(FeatureFlag.HorizontalFilterBar)
@@ -475,8 +472,7 @@ const DashboardBuilder = () => {
ELEMENT_ON_SCREEN_OPTIONS,
);
- const showFilterBar =
- (crossFiltersEnabled || nativeFiltersEnabled) && !editMode;
+ const showFilterBar = !editMode;
const offset =
FILTER_BAR_HEADER_HEIGHT +
diff --git
a/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx
b/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx
index af8cbd739b..0364a3735f 100644
--- a/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx
+++ b/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx
@@ -130,7 +130,6 @@ const SliceHeaderControls = (props:
SliceHeaderControlsProps) => {
useSelector<RootState, boolean>(
({ dashboardInfo }) => dashboardInfo.dash_edit_perm,
) &&
- isFeatureEnabled(FeatureFlag.DashboardCrossFilters) &&
getChartMetadataRegistry()
.get(props.slice.viz_type)
?.behaviors?.includes(Behavior.InteractiveChart);
diff --git
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
index e3a80d21e9..dde30c923a 100644
---
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
+++
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
@@ -104,33 +104,7 @@ test('Dropdown trigger does not render without dashboard
edit permissions', asyn
expect(screen.queryByRole('img', { name: 'gear' })).not.toBeInTheDocument();
});
-test('Dropdown trigger renders with FF DASHBOARD_CROSS_FILTERS on', async ()
=> {
- // @ts-ignore
- global.featureFlags = {
- [FeatureFlag.DashboardCrossFilters]: true,
- };
- await setup();
-
- expect(screen.getByRole('img', { name: 'gear' })).toBeInTheDocument();
-});
-
-test('Dropdown trigger does not render with FF DASHBOARD_CROSS_FILTERS off',
async () => {
- // @ts-ignore
- global.featureFlags = {
- [FeatureFlag.DashboardCrossFilters]: false,
- };
- await setup({
- dash_edit_perm: false,
- });
-
- expect(screen.queryByRole('img', { name: 'gear' })).not.toBeInTheDocument();
-});
-
test('Popover shows cross-filtering option on by default', async () => {
- // @ts-ignore
- global.featureFlags = {
- [FeatureFlag.DashboardCrossFilters]: true,
- };
await setup();
userEvent.click(screen.getByLabelText('gear'));
expect(screen.getByText('Enable cross-filtering')).toBeInTheDocument();
@@ -138,10 +112,6 @@ test('Popover shows cross-filtering option on by default',
async () => {
});
test('Can enable/disable cross-filtering', async () => {
- // @ts-ignore
- global.featureFlags = {
- [FeatureFlag.DashboardCrossFilters]: true,
- };
fetchMock.reset();
fetchMock.put('glob:*/api/v1/dashboard/1', {
result: {},
diff --git
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/index.tsx
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/index.tsx
index 9afc05b40c..404d737999 100644
---
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/index.tsx
+++
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/index.tsx
@@ -83,13 +83,9 @@ const FilterBarSettings = () => {
);
const [selectedFilterBarOrientation, setSelectedFilterBarOrientation] =
useState(filterBarOrientation);
- const isCrossFiltersFeatureEnabled = isFeatureEnabled(
- FeatureFlag.DashboardCrossFilters,
- );
- const shouldEnableCrossFilters =
- isCrossFiltersEnabled && isCrossFiltersFeatureEnabled;
+
const [crossFiltersEnabled, setCrossFiltersEnabled] = useState<boolean>(
- shouldEnableCrossFilters,
+ isCrossFiltersEnabled,
);
const canEdit = useSelector<RootState, boolean>(
({ dashboardInfo }) => dashboardInfo.dash_edit_perm,
@@ -188,7 +184,7 @@ const FilterBarSettings = () => {
divider: canSetHorizontalFilterBar,
});
}
- if (isCrossFiltersFeatureEnabled && canEdit) {
+ if (canEdit) {
items.push({
key: CROSS_FILTERS_MENU_KEY,
label: crossFiltersMenuItem,
@@ -222,7 +218,6 @@ const FilterBarSettings = () => {
crossFiltersMenuItem,
dashboardId,
filterValues,
- isCrossFiltersFeatureEnabled,
]);
if (!menuItems.length) {
diff --git
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControls.tsx
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControls.tsx
index d959026792..18126b2f99 100644
---
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControls.tsx
+++
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControls.tsx
@@ -62,15 +62,12 @@ import crossFiltersSelector from
'../CrossFilters/selectors';
import CrossFilter from '../CrossFilters/CrossFilter';
import { useFilterOutlined } from '../useFilterOutlined';
import { useChartsVerboseMaps } from '../utils';
-import { CrossFilterIndicator } from '../../selectors';
type FilterControlsProps = {
dataMaskSelected: DataMaskStateWithId;
onFilterSelectionChange: (filter: Filter, dataMask: DataMask) => void;
};
-const EMPTY_ARRAY: CrossFilterIndicator[] = [];
-
const FilterControls: FC<FilterControlsProps> = ({
dataMaskSelected,
onFilterSelectionChange,
@@ -94,20 +91,15 @@ const FilterControls: FC<FilterControlsProps> = ({
const chartLayoutItems = useChartLayoutItems();
const verboseMaps = useChartsVerboseMaps();
- const isCrossFiltersEnabled = isFeatureEnabled(
- FeatureFlag.DashboardCrossFilters,
- );
const selectedCrossFilters = useMemo(
() =>
- isCrossFiltersEnabled
- ? crossFiltersSelector({
- dataMask,
- chartIds,
- chartLayoutItems,
- verboseMaps,
- })
- : EMPTY_ARRAY,
- [chartIds, chartLayoutItems, dataMask, isCrossFiltersEnabled, verboseMaps],
+ crossFiltersSelector({
+ dataMask,
+ chartIds,
+ chartLayoutItems,
+ verboseMaps,
+ }),
+ [chartIds, chartLayoutItems, dataMask, verboseMaps],
);
const { filterControlFactory, filtersWithValues } = useFilterControlFactory(
dataMaskSelected,
diff --git
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Horizontal.tsx
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Horizontal.tsx
index 0e5b82aed2..13761afc4a 100644
---
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Horizontal.tsx
+++
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Horizontal.tsx
@@ -18,13 +18,7 @@
*/
import { FC, memo, useMemo } from 'react';
-import {
- DataMaskStateWithId,
- FeatureFlag,
- isFeatureEnabled,
- styled,
- t,
-} from '@superset-ui/core';
+import { DataMaskStateWithId, styled, t } from '@superset-ui/core';
import Loading from 'src/components/Loading';
import { RootState } from 'src/dashboard/types';
import { useChartLayoutItems } from 'src/dashboard/util/useChartLayoutItems';
@@ -35,7 +29,6 @@ import { useChartsVerboseMaps, getFilterBarTestId } from
'./utils';
import { HorizontalBarProps } from './types';
import FilterBarSettings from './FilterBarSettings';
import crossFiltersSelector from './CrossFilters/selectors';
-import { CrossFilterIndicator } from '../selectors';
const HorizontalBar = styled.div`
${({ theme }) => `
@@ -72,7 +65,6 @@ const FilterBarEmptyStateContainer = styled.div`
`}
`;
-const EMPTY_ARRAY: CrossFilterIndicator[] = [];
const HorizontalFilterBar: FC<HorizontalBarProps> = ({
actions,
dataMaskSelected,
@@ -85,22 +77,17 @@ const HorizontalFilterBar: FC<HorizontalBarProps> = ({
);
const chartIds = useChartIds();
const chartLayoutItems = useChartLayoutItems();
- const isCrossFiltersEnabled = isFeatureEnabled(
- FeatureFlag.DashboardCrossFilters,
- );
const verboseMaps = useChartsVerboseMaps();
const selectedCrossFilters = useMemo(
() =>
- isCrossFiltersEnabled
- ? crossFiltersSelector({
- dataMask,
- chartIds,
- chartLayoutItems,
- verboseMaps,
- })
- : EMPTY_ARRAY,
- [chartIds, chartLayoutItems, dataMask, isCrossFiltersEnabled, verboseMaps],
+ crossFiltersSelector({
+ dataMask,
+ chartIds,
+ chartLayoutItems,
+ verboseMaps,
+ }),
+ [chartIds, chartLayoutItems, dataMask, verboseMaps],
);
const hasFilters = filterValues.length > 0 || selectedCrossFilters.length >
0;
diff --git
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Vertical.tsx
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Vertical.tsx
index b76b65c133..dccf747973 100644
---
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Vertical.tsx
+++
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Vertical.tsx
@@ -30,7 +30,7 @@ import {
FC,
} from 'react';
import cx from 'classnames';
-import { FeatureFlag, isFeatureEnabled, styled, t } from '@superset-ui/core';
+import { styled, t } from '@superset-ui/core';
import Icons from 'src/components/Icons';
import Loading from 'src/components/Loading';
import { EmptyStateSmall } from 'src/components/EmptyState';
@@ -190,14 +190,6 @@ const VerticalFilterBar: FC<VerticalBarProps> = ({
[canEdit, dataMaskSelected, filterValues.length, onSelectionChange],
);
- const crossFilters = useMemo(
- () =>
- isFeatureEnabled(FeatureFlag.DashboardCrossFilters) ? (
- <CrossFiltersVertical />
- ) : null,
- [],
- );
-
return (
<FilterBarScrollContext.Provider value={isScrolling}>
<BarWrapper
@@ -230,7 +222,7 @@ const VerticalFilterBar: FC<VerticalBarProps> = ({
) : (
<div css={tabPaneStyle} onScroll={onScroll}>
<>
- {crossFilters}
+ <CrossFiltersVertical />
{filterControls}
</>
</div>
diff --git
a/superset-frontend/src/dashboard/components/nativeFilters/selectors.ts
b/superset-frontend/src/dashboard/components/nativeFilters/selectors.ts
index 232ff57de2..0539a4317a 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/selectors.ts
+++ b/superset-frontend/src/dashboard/components/nativeFilters/selectors.ts
@@ -21,11 +21,9 @@ import {
DataMaskStateWithId,
DataMaskType,
ensureIsArray,
- FeatureFlag,
Filters,
FilterState,
getColumnLabel,
- isFeatureEnabled,
NativeFilterType,
NO_TIME_RANGE,
QueryFormColumn,
@@ -289,39 +287,37 @@ export const selectChartCrossFilters = (
filterEmitter = false,
): Indicator[] | CrossFilterIndicator[] => {
let crossFilterIndicators: any = [];
- if (isFeatureEnabled(FeatureFlag.DashboardCrossFilters)) {
- crossFilterIndicators = Object.values(chartConfiguration)
- .filter(chartConfig => {
- const inScope =
- chartConfig.crossFilters?.chartsInScope?.includes(chartId);
- if (!filterEmitter && inScope) {
- return true;
- }
- if (filterEmitter && !inScope) {
- return true;
- }
- return false;
- })
- .map(chartConfig => {
- const filterIndicator = getCrossFilterIndicator(
- Number(chartConfig.id),
- dataMask[chartConfig.id],
- chartLayoutItems,
- );
- const filterStatus = getStatus({
- label: filterIndicator.value,
- column: filterIndicator.column
- ? getColumnLabel(filterIndicator.column)
- : undefined,
- type: DataMaskType.CrossFilters,
- appliedColumns,
- rejectedColumns,
- });
+ crossFilterIndicators = Object.values(chartConfiguration)
+ .filter(chartConfig => {
+ const inScope =
+ chartConfig.crossFilters?.chartsInScope?.includes(chartId);
+ if (!filterEmitter && inScope) {
+ return true;
+ }
+ if (filterEmitter && !inScope) {
+ return true;
+ }
+ return false;
+ })
+ .map(chartConfig => {
+ const filterIndicator = getCrossFilterIndicator(
+ Number(chartConfig.id),
+ dataMask[chartConfig.id],
+ chartLayoutItems,
+ );
+ const filterStatus = getStatus({
+ label: filterIndicator.value,
+ column: filterIndicator.column
+ ? getColumnLabel(filterIndicator.column)
+ : undefined,
+ type: DataMaskType.CrossFilters,
+ appliedColumns,
+ rejectedColumns,
+ });
- return { ...filterIndicator, status: filterStatus };
- })
- .filter(filter => filter.status === IndicatorStatus.CrossFilterApplied);
- }
+ return { ...filterIndicator, status: filterStatus };
+ })
+ .filter(filter => filter.status === IndicatorStatus.CrossFilterApplied);
return crossFilterIndicators;
};
@@ -379,16 +375,14 @@ export const selectNativeIndicatorsForChart = (
});
let crossFilterIndicators: any = [];
- if (isFeatureEnabled(FeatureFlag.DashboardCrossFilters)) {
- crossFilterIndicators = selectChartCrossFilters(
- dataMask,
- chartId,
- chartLayoutItems,
- chartConfiguration,
- appliedColumns,
- rejectedColumns,
- );
- }
+ crossFilterIndicators = selectChartCrossFilters(
+ dataMask,
+ chartId,
+ chartLayoutItems,
+ chartConfiguration,
+ appliedColumns,
+ rejectedColumns,
+ );
const indicators = crossFilterIndicators.concat(nativeFilterIndicators);
cachedNativeIndicatorsForChart[chartId] = indicators;
cachedNativeFilterDataForChart[chartId] = {
diff --git
a/superset-frontend/src/dashboard/components/nativeFilters/utils.test.ts
b/superset-frontend/src/dashboard/components/nativeFilters/utils.test.ts
index db21db547d..0f402ee134 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/utils.test.ts
+++ b/superset-frontend/src/dashboard/components/nativeFilters/utils.test.ts
@@ -56,18 +56,6 @@ describe('nativeFilterGate', () => {
});
describe('with cross filters and experimental feature flag enabled', () => {
- beforeAll(() => {
- isFeatureEnabledMock = jest
- .spyOn(uiCore, 'isFeatureEnabled')
- .mockImplementation((featureFlag: FeatureFlag) =>
- [FeatureFlag.DashboardCrossFilters].includes(featureFlag),
- );
- });
-
- afterAll(() => {
- isFeatureEnabledMock.mockRestore();
- });
-
it('should return true for regular chart', () => {
expect(nativeFilterGate([])).toEqual(true);
});
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/utils.ts
b/superset-frontend/src/dashboard/components/nativeFilters/utils.ts
index 734e0ce91f..ef577b354b 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/utils.ts
+++ b/superset-frontend/src/dashboard/components/nativeFilters/utils.ts
@@ -23,8 +23,6 @@ import {
EXTRA_FORM_DATA_APPEND_KEYS,
EXTRA_FORM_DATA_OVERRIDE_KEYS,
ExtraFormData,
- isFeatureEnabled,
- FeatureFlag,
Filter,
getChartMetadataRegistry,
QueryFormData,
@@ -150,8 +148,7 @@ export function getExtraFormData(
export function nativeFilterGate(behaviors: Behavior[]): boolean {
return (
!behaviors.includes(Behavior.NativeFilter) ||
- (isFeatureEnabled(FeatureFlag.DashboardCrossFilters) &&
- behaviors.includes(Behavior.InteractiveChart))
+ behaviors.includes(Behavior.InteractiveChart)
);
}
diff --git a/superset-frontend/src/dashboard/util/crossFilters.test.ts
b/superset-frontend/src/dashboard/util/crossFilters.test.ts
index 07e8064e7d..06a3aa2069 100644
--- a/superset-frontend/src/dashboard/util/crossFilters.test.ts
+++ b/superset-frontend/src/dashboard/util/crossFilters.test.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import sinon, { SinonStub } from 'sinon';
-import { Behavior, FeatureFlag } from '@superset-ui/core';
+import { Behavior } from '@superset-ui/core';
import * as core from '@superset-ui/core';
import { getCrossFiltersConfiguration } from './crossFilters';
import { DEFAULT_CROSS_FILTER_SCOPING } from '../constants';
@@ -146,11 +146,6 @@ afterEach(() => {
});
test('Generate correct cross filters configuration without initial
configuration', () => {
- // @ts-ignore
- global.featureFlags = {
- [FeatureFlag.DashboardCrossFilters]: true,
- };
-
// @ts-ignore
expect(getCrossFiltersConfiguration(DASHBOARD_LAYOUT, {}, CHARTS)).toEqual({
chartConfiguration: {
@@ -180,11 +175,6 @@ test('Generate correct cross filters configuration without
initial configuration
});
test('Generate correct cross filters configuration with initial
configuration', () => {
- // @ts-ignore
- global.featureFlags = {
- [FeatureFlag.DashboardCrossFilters]: true,
- };
-
expect(
getCrossFiltersConfiguration(
DASHBOARD_LAYOUT,
@@ -221,25 +211,7 @@ test('Generate correct cross filters configuration with
initial configuration',
});
});
-test('Return undefined if DASHBOARD_CROSS_FILTERS feature flag is disabled',
() => {
- // @ts-ignore
- global.featureFlags = {
- [FeatureFlag.DashboardCrossFilters]: false,
- };
- expect(
- getCrossFiltersConfiguration(
- DASHBOARD_LAYOUT,
- CHART_CONFIG_METADATA,
- CHARTS,
- ),
- ).toEqual(undefined);
-});
-
test('Recalculate charts in global filter scope when charts change', () => {
- // @ts-ignore
- global.featureFlags = {
- [FeatureFlag.DashboardCrossFilters]: true,
- };
expect(
getCrossFiltersConfiguration(
{
diff --git a/superset-frontend/src/dashboard/util/crossFilters.ts
b/superset-frontend/src/dashboard/util/crossFilters.ts
index 123435a430..04d3e368fc 100644
--- a/superset-frontend/src/dashboard/util/crossFilters.ts
+++ b/superset-frontend/src/dashboard/util/crossFilters.ts
@@ -19,10 +19,8 @@
import { cloneDeep } from 'lodash';
import {
Behavior,
- FeatureFlag,
getChartMetadataRegistry,
isDefined,
- isFeatureEnabled,
} from '@superset-ui/core';
import { getChartIdsInFilterScope } from './getChartIdsInFilterScope';
import {
@@ -38,8 +36,7 @@ import { CHART_TYPE } from './componentTypes';
export const isCrossFiltersEnabled = (
metadataCrossFiltersEnabled: boolean | undefined,
): boolean =>
- isFeatureEnabled(FeatureFlag.DashboardCrossFilters) &&
- (metadataCrossFiltersEnabled === undefined || metadataCrossFiltersEnabled);
+ metadataCrossFiltersEnabled === undefined || metadataCrossFiltersEnabled;
export const getCrossFiltersConfiguration = (
dashboardLayout: DashboardLayout,
@@ -49,10 +46,6 @@ export const getCrossFiltersConfiguration = (
>,
charts: ChartsState,
) => {
- if (!isFeatureEnabled(FeatureFlag.DashboardCrossFilters)) {
- return undefined;
- }
-
const chartLayoutItems = Object.values(dashboardLayout).filter(
item => item?.type === CHART_TYPE,
);
diff --git a/superset-frontend/src/dataMask/reducer.ts
b/superset-frontend/src/dataMask/reducer.ts
index b79f17fb1d..6d240b4989 100644
--- a/superset-frontend/src/dataMask/reducer.ts
+++ b/superset-frontend/src/dataMask/reducer.ts
@@ -24,8 +24,6 @@ import {
DataMask,
DataMaskStateWithId,
DataMaskWithId,
- isFeatureEnabled,
- FeatureFlag,
Filter,
FilterConfiguration,
Filters,
@@ -148,16 +146,14 @@ const dataMaskReducer = produce(
// TODO: update hydrate to .ts
// @ts-ignore
case HYDRATE_DASHBOARD:
- if (isFeatureEnabled(FeatureFlag.DashboardCrossFilters)) {
- Object.keys(
- // @ts-ignore
- action.data.dashboardInfo?.metadata?.chart_configuration,
- ).forEach(id => {
- cleanState[id] = {
- ...getInitialDataMask(id), // take initial data
- };
- });
- }
+ Object.keys(
+ // @ts-ignore
+ action.data.dashboardInfo?.metadata?.chart_configuration,
+ ).forEach(id => {
+ cleanState[id] = {
+ ...getInitialDataMask(id), // take initial data
+ };
+ });
fillNativeFilters(
// @ts-ignore
action.data.dashboardInfo?.metadata?.native_filter_configuration ??
diff --git a/superset/config.py b/superset/config.py
index f36ffade3c..af9874a128 100644
--- a/superset/config.py
+++ b/superset/config.py
@@ -491,7 +491,6 @@ DEFAULT_FEATURE_FLAGS: dict[str, bool] = {
"LISTVIEWS_DEFAULT_CARD_VIEW": False,
# When True, this escapes HTML (rather than rendering it) in Markdown
components
"ESCAPE_MARKDOWN_HTML": False,
- "DASHBOARD_CROSS_FILTERS": True, # deprecated
"DASHBOARD_VIRTUALIZATION": True,
# This feature flag is stil in beta and is not recommended for production
use.
"GLOBAL_ASYNC_QUERIES": False,