chore: Chart context menu permissions cleanup (#30854)
diff --git a/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx b/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
index 9df0e73..e5a94ba 100644
--- a/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
+++ b/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
@@ -39,7 +39,6 @@
useTheme,
} from '@superset-ui/core';
import { RootState } from 'src/dashboard/types';
-import { findPermission } from 'src/utils/findPermission';
import { Menu } from 'src/components/Menu';
import { AntdDropdown as Dropdown } from 'src/components/index';
import { updateDataMask } from 'src/dataMask/actions';
@@ -47,6 +46,7 @@
import { getMenuAdjustedY } from '../utils';
import { MenuItemTooltip } from '../DisabledMenuItemTooltip';
import { DrillByMenuItems } from '../DrillBy/DrillByMenuItems';
+import { usePermissions } from './usePermissions';
export enum ContextMenuItem {
CrossFilter,
@@ -88,23 +88,8 @@
) => {
const theme = useTheme();
const dispatch = useDispatch();
- const canExplore = useSelector((state: RootState) =>
- findPermission('can_explore', 'Superset', state.user?.roles),
- );
- const canWriteExploreFormData = useSelector((state: RootState) =>
- findPermission('can_write', 'ExploreFormDataRestApi', state.user?.roles),
- );
- const canDatasourceSamples = useSelector((state: RootState) =>
- findPermission('can_samples', 'Datasource', state.user?.roles),
- );
- const canDownload = useSelector((state: RootState) =>
- findPermission('can_csv', 'Superset', state.user?.roles),
- );
- const canDrill = useSelector((state: RootState) =>
- findPermission('can_drill', 'Dashboard', state.user?.roles),
- );
- const canDrillBy = (canExplore || canDrill) && canWriteExploreFormData;
- const canDrillToDetail = (canExplore || canDrill) && canDatasourceSamples;
+ const { canDrillToDetail, canDrillBy, canDownload } = usePermissions();
+
const crossFiltersEnabled = useSelector<RootState, boolean>(
({ dashboardInfo }) => dashboardInfo.crossFiltersEnabled,
);
diff --git a/superset-frontend/src/components/Chart/ChartContextMenu/usePermissions.ts b/superset-frontend/src/components/Chart/ChartContextMenu/usePermissions.ts
new file mode 100644
index 0000000..ef45cdf
--- /dev/null
+++ b/superset-frontend/src/components/Chart/ChartContextMenu/usePermissions.ts
@@ -0,0 +1,51 @@
+/**
+ * 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 { useSelector } from 'react-redux';
+import { RootState } from 'src/dashboard/types';
+import { findPermission } from 'src/utils/findPermission';
+
+export const usePermissions = () => {
+ const canExplore = useSelector((state: RootState) =>
+ findPermission('can_explore', 'Superset', state.user?.roles),
+ );
+ const canWriteExploreFormData = useSelector((state: RootState) =>
+ findPermission('can_write', 'ExploreFormDataRestApi', state.user?.roles),
+ );
+ const canDatasourceSamples = useSelector((state: RootState) =>
+ findPermission('can_samples', 'Datasource', state.user?.roles),
+ );
+ const canDownload = useSelector((state: RootState) =>
+ findPermission('can_csv', 'Superset', state.user?.roles),
+ );
+ const canDrill = useSelector((state: RootState) =>
+ findPermission('can_drill', 'Dashboard', state.user?.roles),
+ );
+ const canDrillBy = (canExplore || canDrill) && canWriteExploreFormData;
+ const canDrillToDetail = (canExplore || canDrill) && canDatasourceSamples;
+
+ return {
+ canExplore,
+ canWriteExploreFormData,
+ canDatasourceSamples,
+ canDownload,
+ canDrill,
+ canDrillBy,
+ canDrillToDetail,
+ };
+};