From ad7333e00f567d904f67ef8e5a1f098bbfb21e79 Mon Sep 17 00:00:00 2001 From: Suren Date: Thu, 16 Mar 2023 19:37:40 +0530 Subject: [PATCH] Fix #9014: Crash on new context when expanding search service options (#9027) * #9014: Fix - Crash on new context when expanding search service options * Copyright updated --- web/client/plugins/SearchServicesConfig.jsx | 10 +++--- .../__tests__/SearchServicesConfig-test.jsx | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 web/client/plugins/__tests__/SearchServicesConfig-test.jsx diff --git a/web/client/plugins/SearchServicesConfig.jsx b/web/client/plugins/SearchServicesConfig.jsx index 156db1ca48..c301bbf6e4 100644 --- a/web/client/plugins/SearchServicesConfig.jsx +++ b/web/client/plugins/SearchServicesConfig.jsx @@ -213,12 +213,12 @@ class SearchServicesConfigPanel extends React.Component { } const SearchServicesPlugin = connect(({controls = {}, searchconfig = {}}) => ({ - enabled: controls.searchservicesconfig && controls.searchservicesconfig.enabled || false, + enabled: get(controls, "searchservicesconfig.enabled", false), pages: [ServiceList, WFSServiceProps, ResultsProps, WFSOptionalProps], - page: searchconfig && searchconfig.page || 0, - service: searchconfig && searchconfig.service, - initServiceValues: searchconfig && searchconfig.init_service_values, - textSearchConfig: searchconfig && searchconfig.textSearchConfig, + page: get(searchconfig, "page", 0), + service: get(searchconfig, "service", {}), + initServiceValues: get(searchconfig, "init_service_values", {}), + textSearchConfig: get(searchconfig, "textSearchConfig", {}), editIdx: searchconfig && searchconfig.editIdx }), { toggleControl, diff --git a/web/client/plugins/__tests__/SearchServicesConfig-test.jsx b/web/client/plugins/__tests__/SearchServicesConfig-test.jsx new file mode 100644 index 0000000000..31762c0711 --- /dev/null +++ b/web/client/plugins/__tests__/SearchServicesConfig-test.jsx @@ -0,0 +1,36 @@ +/* + * Copyright 2023, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ +import expect from 'expect'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import SearchServicesConfigPlugin from '../SearchServicesConfig'; +import { getPluginForTest } from './pluginsTestUtils'; + +describe('SearchServicesConfig Plugin', () => { + beforeEach(() => { + document.body.innerHTML = '
'; + }); + + afterEach(() => { + ReactDOM.unmountComponentAtNode(document.getElementById("container")); + document.body.innerHTML = ''; + }); + + it('creates a SearchServicesConfig plugin with default configuration', () => { + const {Plugin} = getPluginForTest(SearchServicesConfigPlugin, {}); + ReactDOM.render(, document.getElementById("container")); + expect(document.getElementById('search-services-config-editor')).toBeFalsy(); + }); + it('creates a SearchServicesConfig plugin with searchconfig null', () => { + const state = {controls: {searchservicesconfig: {enabled: true}}, searchconfig: null}; + const {Plugin} = getPluginForTest(SearchServicesConfigPlugin, state); + ReactDOM.render(, document.getElementById("container")); + expect(document.getElementById('search-services-config-editor')).toBeTruthy(); + expect(document.getElementsByClassName('services-config-editor')[0]).toBeTruthy(); + }); +});