From 0590f74635ff4629067fb01705463d1fd8bf3961 Mon Sep 17 00:00:00 2001
From: Torben Hansen <derhansen@gmail.com>
Date: Sat, 27 Nov 2021 07:14:48 +0100
Subject: [PATCH] [BUGFIX] Fix JavaScript error in configuration module
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

When performing a search in the configuration module,
a JavaScript error will occur, if a possible expanded
tree node is not part of the search result.

This patch adds checks for existence of the scrollElement
variable.

Resolves: #96097
Releases: master, 11.5
Change-Id: I5977dd48487563ae30407f8cf126724acc9bcb0a
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/72320
Tested-by: core-ci <typo3@b13.com>
Tested-by: Stefan Bürk <stefan@buerk.tech>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Stefan Bürk <stefan@buerk.tech>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 .../Resources/Public/TypeScript/ConfigurationView.ts   | 10 ++++++----
 .../Resources/Public/JavaScript/ConfigurationView.js   |  2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/Build/Sources/TypeScript/lowlevel/Resources/Public/TypeScript/ConfigurationView.ts b/Build/Sources/TypeScript/lowlevel/Resources/Public/TypeScript/ConfigurationView.ts
index 14b7af246130..913d2d1db0db 100644
--- a/Build/Sources/TypeScript/lowlevel/Resources/Public/TypeScript/ConfigurationView.ts
+++ b/Build/Sources/TypeScript/lowlevel/Resources/Public/TypeScript/ConfigurationView.ts
@@ -37,13 +37,15 @@ class ConfigurationView {
       // scroll page down, so the just opened subtree is visible after reload and not hidden by doc header
       // Determine scrollTo position, either first ".active" (search) or latest clicked element
       let scrollElement = document.querySelector(self.location.hash);
-      if(document.querySelector('.list-tree .active ')) {
+      if (document.querySelector('.list-tree .active ')) {
         scrollElement = document.querySelector('.list-tree .active ');
-      } else {
-        document.querySelector(self.location.hash).parentElement.parentElement.classList.add('active');
+      } else if (scrollElement) {
+        scrollElement.parentElement.parentElement.classList.add('active');
       }
 
-      scrollElement.scrollIntoView({ block: 'center' });
+      if (scrollElement) {
+        scrollElement.scrollIntoView({ block: 'center' });
+      }
     }
   }
 }
diff --git a/typo3/sysext/lowlevel/Resources/Public/JavaScript/ConfigurationView.js b/typo3/sysext/lowlevel/Resources/Public/JavaScript/ConfigurationView.js
index 6b79a9b67ef7..4c3f45522afb 100644
--- a/typo3/sysext/lowlevel/Resources/Public/JavaScript/ConfigurationView.js
+++ b/typo3/sysext/lowlevel/Resources/Public/JavaScript/ConfigurationView.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-define(["require","exports","TYPO3/CMS/Core/DocumentService","TYPO3/CMS/Core/Event/RegularEvent"],(function(e,t,r,s){"use strict";return new class{constructor(){if(this.searchForm=document.querySelector("#ConfigurationView"),this.searchField=this.searchForm.querySelector('input[name="searchString"]'),this.searchResultShown=""!==this.searchField.value,r.ready().then(()=>{new s("search",()=>{""===this.searchField.value&&this.searchResultShown&&this.searchForm.submit()}).bindTo(this.searchField)}),self.location.hash){let e=document.querySelector(self.location.hash);document.querySelector(".list-tree .active ")?e=document.querySelector(".list-tree .active "):document.querySelector(self.location.hash).parentElement.parentElement.classList.add("active"),e.scrollIntoView({block:"center"})}}}}));
\ No newline at end of file
+define(["require","exports","TYPO3/CMS/Core/DocumentService","TYPO3/CMS/Core/Event/RegularEvent"],(function(e,t,r,s){"use strict";return new class{constructor(){if(this.searchForm=document.querySelector("#ConfigurationView"),this.searchField=this.searchForm.querySelector('input[name="searchString"]'),this.searchResultShown=""!==this.searchField.value,r.ready().then(()=>{new s("search",()=>{""===this.searchField.value&&this.searchResultShown&&this.searchForm.submit()}).bindTo(this.searchField)}),self.location.hash){let e=document.querySelector(self.location.hash);document.querySelector(".list-tree .active ")?e=document.querySelector(".list-tree .active "):e&&e.parentElement.parentElement.classList.add("active"),e&&e.scrollIntoView({block:"center"})}}}}));
\ No newline at end of file
-- 
GitLab