[Dashboard] Fix Invalid Filter Blank Screen (#120530)

* Add better error handling for saved dashboard load
This commit is contained in:
Devon Thomson 2021-12-07 11:02:37 -05:00 committed by GitHub
parent defdc8c30b
commit 44c19bd2ca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 23 deletions

View file

@ -72,7 +72,7 @@ export const cleanFiltersForComparison = (filters: Filter[]) => {
export const cleanFiltersForSerialize = (filters: Filter[]): Filter[] => {
return filters.map((filter) => {
if (filter.meta.value) {
if (filter.meta?.value) {
delete filter.meta.value;
}
return filter;

View file

@ -8,10 +8,10 @@
import _ from 'lodash';
import { getDashboard60Warning, dashboardLoadingErrorStrings } from '../../dashboard_strings';
import { savedObjectToDashboardState } from './convert_dashboard_state';
import { DashboardState, DashboardBuildContext } from '../../types';
import { DashboardConstants, DashboardSavedObject } from '../..';
import { getDashboard60Warning } from '../../dashboard_strings';
import { migrateLegacyQuery } from './migrate_legacy_query';
import { cleanFiltersForSerialize } from './filter_utils';
import { ViewMode } from '../../services/embeddable';
@ -52,34 +52,33 @@ export const loadSavedDashboardState = async ({
return;
}
await indexPatterns.ensureDefaultDataView();
let savedDashboard: DashboardSavedObject | undefined;
try {
savedDashboard = (await savedDashboards.get({
const savedDashboard = (await savedDashboards.get({
id: savedDashboardId,
useResolve: true,
})) as DashboardSavedObject;
const savedDashboardState = savedObjectToDashboardState({
savedDashboard,
usageCollection,
showWriteControls,
savedObjectsTagging,
version: initializerContext.env.packageInfo.version,
});
const isViewMode = !showWriteControls || Boolean(savedDashboard.id);
savedDashboardState.viewMode = isViewMode ? ViewMode.VIEW : ViewMode.EDIT;
savedDashboardState.filters = cleanFiltersForSerialize(savedDashboardState.filters);
savedDashboardState.query = migrateLegacyQuery(
savedDashboardState.query || queryString.getDefaultQuery()
);
return { savedDashboardState, savedDashboard };
} catch (error) {
// E.g. a corrupt or deleted dashboard
notifications.toasts.addDanger(error.message);
notifications.toasts.addDanger(
dashboardLoadingErrorStrings.getDashboardLoadError(error.message)
);
history.push(DashboardConstants.LANDING_PAGE_PATH);
return;
}
if (!savedDashboard) return;
const savedDashboardState = savedObjectToDashboardState({
savedDashboard,
usageCollection,
showWriteControls,
savedObjectsTagging,
version: initializerContext.env.packageInfo.version,
});
const isViewMode = !showWriteControls || Boolean(savedDashboard.id);
savedDashboardState.viewMode = isViewMode ? ViewMode.VIEW : ViewMode.EDIT;
savedDashboardState.filters = cleanFiltersForSerialize(savedDashboardState.filters);
savedDashboardState.query = migrateLegacyQuery(
savedDashboardState.query || queryString.getDefaultQuery()
);
return { savedDashboardState, savedDashboard };
};

View file

@ -359,6 +359,14 @@ export const panelStorageErrorStrings = {
}),
};
export const dashboardLoadingErrorStrings = {
getDashboardLoadError: (message: string) =>
i18n.translate('dashboard.loadingError.errorMessage', {
defaultMessage: 'Error encountered while loading saved dashboard: {message}',
values: { message },
}),
};
/*
Empty Screen
*/