From f0bea6e063aa1d4d0bfbc01414aa5e557beed3d4 Mon Sep 17 00:00:00 2001 From: rshen91 Date: Mon, 7 Oct 2024 10:04:07 -0600 Subject: [PATCH 1/2] initial commit --- .../public/dashboard_app/dashboard_app.tsx | 2 ++ .../_dashboard_container_strings.ts | 5 +++++ .../services/dashboard_backup_service.ts | 22 ++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx b/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx index ecb62bf8fc2b3b..a13dab0f43c0de 100644 --- a/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx +++ b/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx @@ -53,6 +53,7 @@ import { removeSearchSessionIdFromURL, } from './url/search_sessions_integration'; import { loadAndRemoveDashboardState, startSyncingExpandedPanelState } from './url/url_utils'; +import { DASHBOARD_FILTERS_LOCAL_KEY } from '../services/dashboard_backup_service'; export interface DashboardAppProps { history: History; @@ -135,6 +136,7 @@ export function DashboardApp({ screenshotModeService.getScreenshotContext('layout') === 'print' ? { viewMode: ViewMode.PRINT } : {}), + filters: JSON.parse(localStorage.getItem(DASHBOARD_FILTERS_LOCAL_KEY) ?? '[]'), }; }; diff --git a/src/plugins/dashboard/public/dashboard_container/_dashboard_container_strings.ts b/src/plugins/dashboard/public/dashboard_container/_dashboard_container_strings.ts index b553d45468273e..634e5ac69b05f0 100644 --- a/src/plugins/dashboard/public/dashboard_container/_dashboard_container_strings.ts +++ b/src/plugins/dashboard/public/dashboard_container/_dashboard_container_strings.ts @@ -90,6 +90,11 @@ export const backupServiceStrings = { defaultMessage: 'Error encountered while backing up view mode: {message}', values: { message }, }), + filtersStorageError: (message: string) => + i18n.translate('dashboard.filtersBackup.error', { + defaultMessage: 'Error encountered while backing up filters: {message}', + values: { message }, + }), getPanelsGetError: (message: string) => i18n.translate('dashboard.panelStorageError.getError', { defaultMessage: 'Error encountered while fetching unsaved changes: {message}', diff --git a/src/plugins/dashboard/public/services/dashboard_backup_service.ts b/src/plugins/dashboard/public/services/dashboard_backup_service.ts index 5ffff35ff3d779..7b5e4541052a30 100644 --- a/src/plugins/dashboard/public/services/dashboard_backup_service.ts +++ b/src/plugins/dashboard/public/services/dashboard_backup_service.ts @@ -14,6 +14,7 @@ import { ViewMode } from '@kbn/embeddable-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { set } from '@kbn/safer-lodash-set'; +import { Filter } from '@kbn/es-query'; import type { DashboardContainerInput } from '../../common'; import { backupServiceStrings } from '../dashboard_container/_dashboard_container_strings'; import { UnsavedPanelState } from '../dashboard_container/types'; @@ -24,6 +25,7 @@ export const DASHBOARD_PANELS_UNSAVED_ID = 'unsavedDashboard'; export const PANELS_CONTROL_GROUP_KEY = 'controlGroup'; const DASHBOARD_PANELS_SESSION_KEY = 'dashboardPanels'; const DASHBOARD_VIEWMODE_LOCAL_KEY = 'dashboardViewMode'; +export const DASHBOARD_FILTERS_LOCAL_KEY = 'dashboardFilters'; // this key is named `panels` for BWC reasons, but actually contains the entire dashboard state const DASHBOARD_STATE_SESSION_KEY = 'dashboardStateManagerPanels'; @@ -81,6 +83,21 @@ class DashboardBackupService implements DashboardBackupServiceType { } }; + public getFilters = (): Filter => { + return this.localStorage.get(DASHBOARD_FILTERS_LOCAL_KEY); + }; + + public storeFilters = (filters: Filter[]) => { + try { + this.localStorage.set(DASHBOARD_FILTERS_LOCAL_KEY, filters); + } catch (e) { + coreServices.notifications.toasts.addDanger({ + title: backupServiceStrings.filtersStorageError(e.message), + 'data-test-subj': 'dashboardFiltersBackupFailure', + }); + } + }; + public clearState(id = DASHBOARD_PANELS_UNSAVED_ID) { try { const dashboardStateStorage = @@ -117,7 +134,9 @@ class DashboardBackupService implements DashboardBackupServiceType { id ] as UnsavedPanelState | undefined; - return { dashboardState, panels }; + const filters = dashboardState?.filters; + + return { dashboardState, panels, filters }; } catch (e) { coreServices.notifications.toasts.addDanger({ title: backupServiceStrings.getPanelsGetError(e.message), @@ -135,6 +154,7 @@ class DashboardBackupService implements DashboardBackupServiceType { const dashboardStateStorage = this.sessionStorage.get(DASHBOARD_STATE_SESSION_KEY) ?? {}; set(dashboardStateStorage, [this.activeSpaceId, id], newState); this.sessionStorage.set(DASHBOARD_STATE_SESSION_KEY, dashboardStateStorage); + this.storeFilters(dashboardStateStorage[this.activeSpaceId][id]?.filters ?? []); const panelsStorage = this.sessionStorage.get(DASHBOARD_PANELS_SESSION_KEY) ?? {}; set(panelsStorage, [this.activeSpaceId, id], unsavedPanels); From 72201ddb0543e38044495468e81f07d940ba931b Mon Sep 17 00:00:00 2001 From: rshen91 Date: Tue, 8 Oct 2024 08:08:05 -0600 Subject: [PATCH 2/2] wip --- src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx | 5 +++-- .../dashboard/public/services/dashboard_backup_service.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx b/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx index a13dab0f43c0de..b02b7ea0ab0476 100644 --- a/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx +++ b/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx @@ -53,7 +53,7 @@ import { removeSearchSessionIdFromURL, } from './url/search_sessions_integration'; import { loadAndRemoveDashboardState, startSyncingExpandedPanelState } from './url/url_utils'; -import { DASHBOARD_FILTERS_LOCAL_KEY } from '../services/dashboard_backup_service'; +import { getDashboardBackupService } from '../services/dashboard_backup_service'; export interface DashboardAppProps { history: History; @@ -124,6 +124,7 @@ export function DashboardApp({ const getInitialInput = () => { const stateFromLocator = loadDashboardHistoryLocationState(getScopedHistory); const initialUrlState = loadAndRemoveDashboardState(kbnUrlStateStorage); + const filters = getDashboardBackupService().getFilters(); // Override all state with URL + Locator input return { @@ -136,7 +137,7 @@ export function DashboardApp({ screenshotModeService.getScreenshotContext('layout') === 'print' ? { viewMode: ViewMode.PRINT } : {}), - filters: JSON.parse(localStorage.getItem(DASHBOARD_FILTERS_LOCAL_KEY) ?? '[]'), + filters, }; }; diff --git a/src/plugins/dashboard/public/services/dashboard_backup_service.ts b/src/plugins/dashboard/public/services/dashboard_backup_service.ts index 7b5e4541052a30..900ed41473e107 100644 --- a/src/plugins/dashboard/public/services/dashboard_backup_service.ts +++ b/src/plugins/dashboard/public/services/dashboard_backup_service.ts @@ -83,7 +83,7 @@ class DashboardBackupService implements DashboardBackupServiceType { } }; - public getFilters = (): Filter => { + public getFilters = (): Filter[] => { return this.localStorage.get(DASHBOARD_FILTERS_LOCAL_KEY); };