This is an automated email from the ASF dual-hosted git repository.

amitmiran pushed a commit to branch 1.2
in repository https://gitbox.apache.org/repos/asf/superset.git

commit d63c6373a8c0886d2f4e01f7171ccca7c423e665
Author: simcha90 <56388545+simch...@users.noreply.github.com>
AuthorDate: Wed Apr 28 07:49:03 2021 +0300

    feat(native-filters): Show/Hide filter bar by metdata ff (#14261)
    
    * fix:fix get permission function
    
    * feat: hide native filters by metadata
    
    * fix: fix show_native_filters name
    
    * fix: metadata
    
    * chore: add migration to hide native_filters in all existing dashboards
    
    * chore: fix pre-commit
    
    * fix: make migration migration dashboard with filter_box only
    
    * fix: pre-commit
    
    * feat: hide filter bar if no permission edit and no filters
    
    * fix: remove migration
    
    Co-authored-by: amitmiran137 <amit.mi...@nielsen.com>
    (cherry picked from commit 2486fd4f6d8d873a46fca129ddd7fda2838c13f5)
---
 superset-frontend/src/dashboard/actions/hydrate.js          | 11 +++++++----
 .../components/DashboardBuilder/DashboardBuilder.tsx        | 13 ++++++++++---
 .../components/nativeFilters/FilterBar/Header/index.tsx     |  3 ++-
 superset-frontend/src/dashboard/types.ts                    |  5 +++++
 superset/dashboards/schemas.py                              |  1 +
 5 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/superset-frontend/src/dashboard/actions/hydrate.js 
b/superset-frontend/src/dashboard/actions/hydrate.js
index 0206d91..9e4e2b0 100644
--- a/superset-frontend/src/dashboard/actions/hydrate.js
+++ b/superset-frontend/src/dashboard/actions/hydrate.js
@@ -302,6 +302,13 @@ export const hydrateDashboard = (dashboardData, chartData, 
datasourcesData) => (
     filterSetsConfig: metadata?.filter_sets_configuration || [],
   });
 
+  if (!metadata) {
+    metadata = {};
+  }
+
+  metadata.show_native_filters =
+    dashboardData?.metadata?.show_native_filters ?? true;
+
   if (isFeatureEnabled(FeatureFlag.DASHBOARD_CROSS_FILTERS)) {
     // If user just added cross filter to dashboard it's not saving it scope 
on server,
     // so we tweak it until user will update scope and will save it in server
@@ -314,10 +321,6 @@ export const hydrateDashboard = (dashboardData, chartData, 
datasourcesData) => (
           ) ?? {}
         )?.behaviors ?? [];
 
-      if (!metadata) {
-        metadata = {};
-      }
-
       if (!metadata.chart_configuration) {
         metadata.chart_configuration = {};
       }
diff --git 
a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
 
b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
index 463a770..23b332e 100644
--- 
a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
+++ 
b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
@@ -102,6 +102,12 @@ const DashboardBuilder: FC<DashboardBuilderProps> = () => {
   const dashboardLayout = useSelector<RootState, DashboardLayout>(
     state => state.dashboardLayout.present,
   );
+  const showNativeFilters = useSelector<RootState, boolean>(
+    state => state.dashboardInfo.metadata?.show_native_filters,
+  );
+  const canEdit = useSelector<RootState, boolean>(
+    ({ dashboardInfo }) => dashboardInfo.dash_edit_perm,
+  );
   const editMode = useSelector<RootState, boolean>(
     state => state.dashboardState.editMode,
   );
@@ -112,9 +118,10 @@ const DashboardBuilder: FC<DashboardBuilderProps> = () => {
   const filters = useFilters();
   const filterValues = Object.values<Filter>(filters);
 
-  const nativeFiltersEnabled = isFeatureEnabled(
-    FeatureFlag.DASHBOARD_NATIVE_FILTERS,
-  );
+  const nativeFiltersEnabled =
+    showNativeFilters &&
+    isFeatureEnabled(FeatureFlag.DASHBOARD_NATIVE_FILTERS) &&
+    (canEdit || (!canEdit && filterValues.length !== 0));
 
   const [dashboardFiltersOpen, setDashboardFiltersOpen] = useState(true);
 
diff --git 
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Header/index.tsx
 
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Header/index.tsx
index f9844a9..096e58b 100644
--- 
a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Header/index.tsx
+++ 
b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Header/index.tsx
@@ -28,6 +28,7 @@ import FilterConfigurationLink from 
'src/dashboard/components/nativeFilters/Filt
 import { useFilters } from 
'src/dashboard/components/nativeFilters/FilterBar/state';
 import { Filter } from 'src/dashboard/components/nativeFilters/types';
 import { getFilterBarTestId } from '..';
+import { RootState } from '../../../../types';
 
 const TitleArea = styled.h4`
   display: flex;
@@ -79,7 +80,7 @@ const Header: FC<HeaderProps> = ({
 }) => {
   const filters = useFilters();
   const filterValues = Object.values<Filter>(filters);
-  const canEdit = useSelector<any, boolean>(
+  const canEdit = useSelector<RootState, boolean>(
     ({ dashboardInfo }) => dashboardInfo.dash_edit_perm,
   );
 
diff --git a/superset-frontend/src/dashboard/types.ts 
b/superset-frontend/src/dashboard/types.ts
index 7731a7a..ddc5d8c 100644
--- a/superset-frontend/src/dashboard/types.ts
+++ b/superset-frontend/src/dashboard/types.ts
@@ -44,6 +44,10 @@ export type Chart = {
 export type DashboardLayout = { [key: string]: LayoutItem };
 export type DashboardLayoutState = { present: DashboardLayout };
 export type DashboardState = { editMode: boolean; directPathToChild: string[] 
};
+export type DashboardInfo = {
+  dash_edit_perm: boolean;
+  metadata: { show_native_filters: boolean };
+};
 
 /** Root state of redux */
 export type RootState = {
@@ -53,6 +57,7 @@ export type RootState = {
   dashboardLayout: DashboardLayoutState;
   dashboardFilters: {};
   dashboardState: DashboardState;
+  dashboardInfo: DashboardInfo;
   dataMask: DataMaskStateWithId;
   dashboardInfo: JsonObject;
   impressionId: string;
diff --git a/superset/dashboards/schemas.py b/superset/dashboards/schemas.py
index 0d89c2c..6293373 100644
--- a/superset/dashboards/schemas.py
+++ b/superset/dashboards/schemas.py
@@ -106,6 +106,7 @@ def validate_json_metadata(value: Union[bytes, bytearray, 
str]) -> None:
 
 
 class DashboardJSONMetadataSchema(Schema):
+    show_native_filters = fields.Boolean()
     # native_filter_configuration is for dashboard-native filters
     native_filter_configuration = fields.List(fields.Dict(), allow_none=True)
     # chart_configuration for now keeps data about cross-filter scoping for 
charts

Reply via email to