From 5f81622270d71f214aaa9ebe5f0aba5f4e82631b Mon Sep 17 00:00:00 2001 From: Antonio <34042064+Desvelao@users.noreply.github.com> Date: Thu, 29 Aug 2024 12:51:27 +0200 Subject: [PATCH] Keep the appState filters on refreshing page (#6950) fix(modules): keep the appState filters on refreshing page --- .../public/components/overview/overview.tsx | 13 ++++- .../main/public/utils/migrate_legacy_query.ts | 50 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 plugins/main/public/utils/migrate_legacy_query.ts diff --git a/plugins/main/public/components/overview/overview.tsx b/plugins/main/public/components/overview/overview.tsx index f8f36df351..12476ad0a7 100644 --- a/plugins/main/public/components/overview/overview.tsx +++ b/plugins/main/public/components/overview/overview.tsx @@ -26,6 +26,8 @@ import { } from '../../services/resolves'; import { useRouterSearch } from '../common/hooks'; import NavigationService from '../../react-services/navigation-service'; +import { cloneDeep } from 'lodash'; +import { migrateLegacyQuery } from '../../utils/migrate_legacy_query'; export const Overview: React.FC = withRouteResolvers({ enableMenu, @@ -56,7 +58,7 @@ export const Overview: React.FC = withRouteResolvers({ const appStateFromUrl = osdUrlStateStorage.get('_a') as AppState; let initialAppState = { - ...data.query.queryString.getDefaultQuery(), + query: migrateLegacyQuery(data.query.queryString.getDefaultQuery()), ...appStateFromUrl, }; const appStateContainer = createStateContainer(initialAppState); @@ -80,6 +82,15 @@ export const Overview: React.FC = withRouteResolvers({ stateStorage: osdUrlStateStorage, }); + // sync initial app filters from state to filterManager + // https://github.com/opensearch-project/OpenSearch-Dashboards/blob/2.13.0/src/plugins/dashboard/public/application/utils/use/use_dashboard_app_state.tsx#L84-L86 + data.query.filterManager.setAppFilters( + cloneDeep(appStateContainer.getState().filters), + ); + data.query.queryString.setQuery( + migrateLegacyQuery(appStateContainer.getState().query), + ); + const stopSyncingQueryAppStateWithStateContainer = connectToQueryState( data.query, appStateContainer, diff --git a/plugins/main/public/utils/migrate_legacy_query.ts b/plugins/main/public/utils/migrate_legacy_query.ts new file mode 100644 index 0000000000..d3f9eefcfe --- /dev/null +++ b/plugins/main/public/utils/migrate_legacy_query.ts @@ -0,0 +1,50 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + * + * Any modifications Copyright OpenSearch Contributors. See + * GitHub history for details. + */ + +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { has } from 'lodash'; +import { Query } from 'src/plugins/data/public'; + +/** + * Creates a standardized query object from old queries that were either strings or pure OpenSearch query DSL + * + * @param query - a legacy query, what used to be stored in SearchSource's query property + * @return Object + */ + +export function migrateLegacyQuery( + query: Query | { [key: string]: any } | string, +): Query { + // Lucene was the only option before, so language-less queries are all lucene + if (!has(query, 'language')) { + return { query, language: 'lucene' }; + } + + return query as Query; +}