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",))
