This is an automated email from the ASF dual-hosted git repository.
michaelsmolina pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 35da6ac270 fix: Dashboard hangs when initial filters cannot be loaded
(#29456)
35da6ac270 is described below
commit 35da6ac2707514aa9b5f203529bd296f91a89d84
Author: Michael S. Molina <[email protected]>
AuthorDate: Wed Jul 3 09:16:07 2024 -0300
fix: Dashboard hangs when initial filters cannot be loaded (#29456)
---
.../components/ErrorMessage/BasicErrorAlert.tsx | 2 +-
.../DashboardBuilder/DashboardBuilder.tsx | 27 +++++++++++++++++++++-
.../dashboard/components/DashboardBuilder/state.ts | 14 +++++------
3 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/superset-frontend/src/components/ErrorMessage/BasicErrorAlert.tsx
b/superset-frontend/src/components/ErrorMessage/BasicErrorAlert.tsx
index 27a1fbfd25..39ae748970 100644
--- a/superset-frontend/src/components/ErrorMessage/BasicErrorAlert.tsx
+++ b/superset-frontend/src/components/ErrorMessage/BasicErrorAlert.tsx
@@ -45,7 +45,7 @@ const StyledTitle = styled.span`
interface BasicErrorAlertProps {
title: string;
body: string;
- level: ErrorLevel;
+ level?: ErrorLevel;
}
export default function BasicErrorAlert({
diff --git
a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
index 6d64387c42..c48463b98a 100644
---
a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
+++
b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
@@ -76,6 +76,7 @@ import {
OPEN_FILTER_BAR_WIDTH,
EMPTY_CONTAINER_Z_INDEX,
} from 'src/dashboard/constants';
+import BasicErrorAlert from 'src/components/ErrorMessage/BasicErrorAlert';
import { getRootLevelTabsComponent, shouldFocusTabs } from './utils';
import DashboardContainer from './DashboardContainer';
import { useNativeFilters } from './state';
@@ -462,6 +463,7 @@ const DashboardBuilder: FC<DashboardBuilderProps> = () => {
const {
showDashboard,
+ missingInitialFilters,
dashboardFiltersOpen,
toggleDashboardFiltersOpen,
nativeFiltersEnabled,
@@ -673,7 +675,30 @@ const DashboardBuilder: FC<DashboardBuilderProps> = () => {
editMode={editMode}
marginLeft={dashboardContentMarginLeft}
>
- {showDashboard ? (
+ {missingInitialFilters.length > 0 ? (
+ <div
+ css={css`
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ flex: 1;
+ & div {
+ width: 500px;
+ }
+ `}
+ >
+ <BasicErrorAlert
+ title={t('Unable to load dashboard')}
+ body={t(
+ `The following filters have the 'Select first filter value
by default'
+ option checked and could not be loaded, which is
preventing the dashboard
+ from rendering: %s`,
+ missingInitialFilters.join(', '),
+ )}
+ />
+ </div>
+ ) : showDashboard ? (
<DashboardContainer topLevelTabs={topLevelTabs} />
) : (
<Loading />
diff --git
a/superset-frontend/src/dashboard/components/DashboardBuilder/state.ts
b/superset-frontend/src/dashboard/components/DashboardBuilder/state.ts
index 9b8af1dda3..b7e6c266de 100644
--- a/superset-frontend/src/dashboard/components/DashboardBuilder/state.ts
+++ b/superset-frontend/src/dashboard/components/DashboardBuilder/state.ts
@@ -47,17 +47,14 @@ export const useNativeFilters = () => {
filter => filter.requiredFirst,
);
const dataMask = useNativeFiltersDataMask();
+
+ const missingInitialFilters = requiredFirstFilter
+ .filter(({ id }) => dataMask[id]?.filterState?.value === undefined)
+ .map(({ name }) => name);
const showDashboard =
isInitialized ||
!nativeFiltersEnabled ||
- !(
- nativeFiltersEnabled &&
- requiredFirstFilter.length &&
- requiredFirstFilter.find(
- ({ id }) => dataMask[id]?.filterState?.value === undefined,
- )
- );
-
+ missingInitialFilters.length === 0;
const toggleDashboardFiltersOpen = useCallback(
(visible?: boolean) => {
setDashboardFiltersOpen(visible ?? !dashboardFiltersOpen);
@@ -84,6 +81,7 @@ export const useNativeFilters = () => {
return {
showDashboard,
+ missingInitialFilters,
dashboardFiltersOpen,
toggleDashboardFiltersOpen,
nativeFiltersEnabled,