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

hugh pushed a commit to branch hm/ar-filters
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 86ae7cc19cca6d153292cb98c4f6a8a0d266fbaa
Author: Hugh A. Miles II <[email protected]>
AuthorDate: Fri Jan 24 03:31:32 2025 +0000

    filter dropdown working
---
 .../src/features/alerts/AlertReportModal.tsx       | 22 +++++++++++++++++++---
 superset/config.py                                 |  2 +-
 superset/daos/dashboard.py                         | 16 ++++++++++++++++
 superset/dashboards/api.py                         |  4 ++++
 superset/views/base_api.py                         |  1 +
 5 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/superset-frontend/src/features/alerts/AlertReportModal.tsx 
b/superset-frontend/src/features/alerts/AlertReportModal.tsx
index 7e5592bdd1..aa7d7aa515 100644
--- a/superset-frontend/src/features/alerts/AlertReportModal.tsx
+++ b/superset-frontend/src/features/alerts/AlertReportModal.tsx
@@ -452,6 +452,9 @@ const AlertReportModal: 
FunctionComponent<AlertReportModalProps> = ({
   const [dashboardOptions, setDashboardOptions] = useState<MetaObject[]>([]);
   const [chartOptions, setChartOptions] = useState<MetaObject[]>([]);
   const [tabOptions, setTabOptions] = useState<TabNode[]>([]);
+  const [nativeFilterOptions, setNativeFilterOptions] = useState<object>([]);
+
+  console.log('nativeFilters', nativeFilterOptions);
 
   // Validation
   const [validationStatus, setValidationStatus] = useState<ValidationObject>({
@@ -823,16 +826,24 @@ const AlertReportModal: 
FunctionComponent<AlertReportModalProps> = ({
         endpoint: `/api/v1/dashboard/${dashboard.value}/tabs`,
       })
         .then(response => {
-          const { tab_tree: tabTree, all_tabs: allTabs } = 
response.json.result;
+          console.log(response.json.result);
+          const { tab_tree: tabTree, all_tabs: allTabs, native_filters: 
nativeFilters } = response.json.result;
           tabTree.push({
             title: 'All Tabs',
             // select tree only works with string value
             value: JSON.stringify(Object.keys(allTabs)),
           });
           setTabOptions(tabTree);
-
+          // console.log('setting native filters', nativeFilters);
+          // setNativeFilterOptions(nativeFilters);
+          
           const anchor = currentAlert?.extra?.dashboard?.anchor;
+          console.log('anchor', anchor);
           if (anchor) {
+              // const nativeFiltersOptions = 
nativeFilters[anchor].map((filter: any) => {value: filter.id, label: 
filter.name})
+              console.log('nativeFiltersOptions', nativeFilters[anchor]);
+              setNativeFilterOptions(nativeFilters[anchor].map((filter: any) 
=> ({value: filter.id, label: filter.name})));
+            
             try {
               const parsedAnchor = JSON.parse(anchor);
               if (Array.isArray(parsedAnchor)) {
@@ -876,6 +887,7 @@ const AlertReportModal: 
FunctionComponent<AlertReportModalProps> = ({
         return SupersetClient.get({
           endpoint: `/api/v1/report/related/dashboard?q=${query}`,
         }).then(response => {
+          console.log('dashboards', response.json.result);
           const list = response.json.result.map(
             (item: { value: number; text: string }) => ({
               value: item.value,
@@ -1049,6 +1061,7 @@ const AlertReportModal: 
FunctionComponent<AlertReportModalProps> = ({
     updateAlertState('chart', null);
     if (tabsEnabled) {
       setTabOptions([]);
+      setNativeFilterOptions([]);
       updateAnchorState('');
     }
   };
@@ -1764,9 +1777,12 @@ const AlertReportModal: 
FunctionComponent<AlertReportModalProps> = ({
                 />
               </>
               <>
+              <div className="control-label">{t('Select Dashboard 
Filter')}</div>
                 <Select 
                   ariaLabel={t('Select Filter')}
-                  value={"name"}
+                  value={"test"}
+                  // options={[{value: "test", label: "test"}, {value: 
"test2", label: "test2"}]}
+                  options={nativeFilterOptions}
                 />
                 <Select 
                   ariaLabel={t('Select Value')}
diff --git a/superset/config.py b/superset/config.py
index 89fbdf35a0..d920d11a75 100644
--- a/superset/config.py
+++ b/superset/config.py
@@ -498,7 +498,7 @@ DEFAULT_FEATURE_FLAGS: dict[str, bool] = {
     "EMBEDDED_SUPERSET": False,
     # Enables Alerts and reports new implementation
     "ALERT_REPORTS": False,
-    "ALERT_REPORT_TABS": False,
+    "ALERT_REPORT_TABS": True,
     "ALERT_REPORT_SLACK_V2": False,
     "DASHBOARD_RBAC": False,
     "ENABLE_ADVANCED_DATA_TYPES": False,
diff --git a/superset/daos/dashboard.py b/superset/daos/dashboard.py
index c9c119c54b..46f4d0b44a 100644
--- a/superset/daos/dashboard.py
+++ b/superset/daos/dashboard.py
@@ -19,6 +19,7 @@ from __future__ import annotations
 import logging
 from datetime import datetime
 from typing import Any
+from collections import defaultdict
 
 from flask import g
 from flask_appbuilder.models.sqla.interface import SQLAInterface
@@ -319,6 +320,21 @@ class DashboardDAO(BaseDAO[Dashboard]):
         cls.set_dash_metadata(dash, metadata, old_to_new_slice_ids)
         db.session.add(dash)
         return dash
+    
+    @classmethod
+    def get_native_filter_configuration(cls, id: int):
+        dashboard = cls.get_by_id_or_slug(id)
+        metadata = json.loads(dashboard.json_metadata or "{}")
+        native_filter_configuration = metadata.get(
+            "native_filter_configuration", []
+        )
+
+        tab_filters = defaultdict(list)
+        for filter in native_filter_configuration:
+            for tab_key in filter.get("tabsInScope", []):
+                tab_filters[tab_key].append(filter)
+
+        return tab_filters
 
     @classmethod
     def update_native_filters_config(
diff --git a/superset/dashboards/api.py b/superset/dashboards/api.py
index ab83a01d9d..3965041287 100644
--- a/superset/dashboards/api.py
+++ b/superset/dashboards/api.py
@@ -469,7 +469,11 @@ class DashboardRestApi(BaseSupersetModelRestApi):
         """  # noqa: E501
         try:
             tabs = DashboardDAO.get_tabs_for_dashboard(id_or_slug)
+            native_filters = 
DashboardDAO.get_native_filter_configuration(id_or_slug)
+
             result = self.tab_schema.dump(tabs)
+            result['native_filters'] = native_filters
+            
             return self.response(200, result=result)
 
         except (TypeError, ValueError) as err:
diff --git a/superset/views/base_api.py b/superset/views/base_api.py
index 682e8f8697..736c846bed 100644
--- a/superset/views/base_api.py
+++ b/superset/views/base_api.py
@@ -607,6 +607,7 @@ class BaseSupersetModelRestApi(BaseSupersetApiMixin, 
ModelRestApi):
             self._add_extra_ids_to_result(datamodel, column_name, ids, result)
             total_rows = len(result)
 
+        print('result', result)
         return self.response(200, count=total_rows, result=result)
 
     @expose("/distinct/<column_name>", methods=("GET",))

Reply via email to