From 6ae719da6b67ae696d650e3fa7d3a9b9d8f3c109 Mon Sep 17 00:00:00 2001
From: Andreas Fernandez <a.fernandez@scripting-base.de>
Date: Thu, 9 Mar 2023 08:48:43 +0100
Subject: [PATCH] [BUGFIX] Explicitly import `Viewport` in LiveSearch

The result container in LiveSearch used to use `TYPO3.Backend` to access
the righthand module container of the TYPO3 backend scaffold, which is
bad practice as the dependency is defined somewhere. It's better to
explicitly import the `Viewport` module, providing the same
functionality.

Resolves: #100125
Releases: main
Change-Id: I139b26370739d568b190ef7375527e491086a694
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/78078
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: core-ci <typo3@b13.com>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Oliver Bartsch <bo@cedev.de>
---
 .../backend/live-search/element/result/result-container.ts   | 5 +++--
 .../live-search/element/result/result-container.js           | 4 ++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/Build/Sources/TypeScript/backend/live-search/element/result/result-container.ts b/Build/Sources/TypeScript/backend/live-search/element/result/result-container.ts
index 5903c63eec73..c696b16f0d4c 100644
--- a/Build/Sources/TypeScript/backend/live-search/element/result/result-container.ts
+++ b/Build/Sources/TypeScript/backend/live-search/element/result/result-container.ts
@@ -12,6 +12,7 @@
  */
 
 import LiveSearchConfigurator from '@typo3/backend/live-search/live-search-configurator';
+import Viewport from '@typo3/backend/viewport';
 import { customElement, property, query } from 'lit/decorators';
 import { html, LitElement, nothing, TemplateResult } from 'lit';
 import { lll } from '@typo3/core/lit-helper';
@@ -25,7 +26,7 @@ export const componentName = 'typo3-backend-live-search-result-container';
 
 @customElement(componentName)
 export class ResultContainer extends LitElement {
-  @property({ type: Object }) results: ResultItemInterface[]|null = null;
+  @property({ type: Object }) results: ResultItemInterface[] | null = null;
   @property({ type: Boolean, attribute: false }) loading: boolean = false;
 
   @query('typo3-backend-live-search-result-item-container') itemContainer: ItemContainer;
@@ -86,7 +87,7 @@ export class ResultContainer extends LitElement {
       invokeHandlers[resultItem.provider + '_' + action.identifier](resultItem, action);
     } else {
       // Default handler to open the URL
-      TYPO3.Backend.ContentContainer.setUrl(action.url);
+      Viewport.ContentContainer.setUrl(action.url);
     }
     this.dispatchEvent(new CustomEvent('live-search:item-chosen', {
       detail: { resultItem }
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/live-search/element/result/result-container.js b/typo3/sysext/backend/Resources/Public/JavaScript/live-search/element/result/result-container.js
index 9c88a682e8ae..37da8f7a524a 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/live-search/element/result/result-container.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/live-search/element/result/result-container.js
@@ -10,7 +10,7 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-var __decorate=function(e,t,n,r){var i,o=arguments.length,l=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(l=(o<3?i(l):o>3?i(t,n,l):i(t,n))||l);return o>3&&l&&Object.defineProperty(t,n,l),l};import LiveSearchConfigurator from"@typo3/backend/live-search/live-search-configurator.js";import{customElement,property,query}from"lit/decorators.js";import{html,LitElement,nothing}from"lit";import{lll}from"@typo3/core/lit-helper.js";import"@typo3/backend/live-search/element/result/item/item-container.js";import"@typo3/backend/live-search/element/result/result-detail-container.js";export const componentName="typo3-backend-live-search-result-container";let ResultContainer=class extends LitElement{constructor(){super(...arguments),this.results=null,this.loading=!1}connectedCallback(){super.connectedCallback(),this.addEventListener("livesearch:request-actions",this.onActionsRequested),this.addEventListener("livesearch:invoke-action",this.onActionInvoked)}disconnectedCallback(){this.removeEventListener("livesearch:request-actions",this.onActionsRequested),this.removeEventListener("livesearch:invoke-action",this.onActionInvoked),super.disconnectedCallback()}createRenderRoot(){return this}render(){return this.loading?html`<div class="d-flex flex-fill justify-content-center mt-2"><typo3-backend-spinner size="large"></typo3-backend-spinner></div>`:null===this.results?nothing:0===this.results.length?html`<div class="alert alert-info">${lll("liveSearch_listEmptyText")}</div>`:html`
+var __decorate=function(e,t,r,i){var n,o=arguments.length,l=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,r,i);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(l=(o<3?n(l):o>3?n(t,r,l):n(t,r))||l);return o>3&&l&&Object.defineProperty(t,r,l),l};import LiveSearchConfigurator from"@typo3/backend/live-search/live-search-configurator.js";import Viewport from"@typo3/backend/viewport.js";import{customElement,property,query}from"lit/decorators.js";import{html,LitElement,nothing}from"lit";import{lll}from"@typo3/core/lit-helper.js";import"@typo3/backend/live-search/element/result/item/item-container.js";import"@typo3/backend/live-search/element/result/result-detail-container.js";export const componentName="typo3-backend-live-search-result-container";let ResultContainer=class extends LitElement{constructor(){super(...arguments),this.results=null,this.loading=!1}connectedCallback(){super.connectedCallback(),this.addEventListener("livesearch:request-actions",this.onActionsRequested),this.addEventListener("livesearch:invoke-action",this.onActionInvoked)}disconnectedCallback(){this.removeEventListener("livesearch:request-actions",this.onActionsRequested),this.removeEventListener("livesearch:invoke-action",this.onActionInvoked),super.disconnectedCallback()}createRenderRoot(){return this}render(){return this.loading?html`<div class="d-flex flex-fill justify-content-center mt-2"><typo3-backend-spinner size="large"></typo3-backend-spinner></div>`:null===this.results?nothing:0===this.results.length?html`<div class="alert alert-info">${lll("liveSearch_listEmptyText")}</div>`:html`
       <typo3-backend-live-search-result-item-container .results="${this.results}"></typo3-backend-live-search-result-item-container>
       <typo3-backend-live-search-result-item-detail-container></typo3-backend-live-search-result-item-detail-container>
-    `}onActionsRequested(e){this.resultDetailContainer.resultItem=e.detail.resultItem}onActionInvoked(e){const t=LiveSearchConfigurator.getInvokeHandlers(),n=e.detail.resultItem,r=e.detail.action;void 0!==r&&("function"==typeof t[n.provider+"_"+r.identifier]?t[n.provider+"_"+r.identifier](n,r):TYPO3.Backend.ContentContainer.setUrl(r.url),this.dispatchEvent(new CustomEvent("live-search:item-chosen",{detail:{resultItem:n}})))}};__decorate([property({type:Object})],ResultContainer.prototype,"results",void 0),__decorate([property({type:Boolean,attribute:!1})],ResultContainer.prototype,"loading",void 0),__decorate([query("typo3-backend-live-search-result-item-container")],ResultContainer.prototype,"itemContainer",void 0),__decorate([query("typo3-backend-live-search-result-item-detail-container")],ResultContainer.prototype,"resultDetailContainer",void 0),ResultContainer=__decorate([customElement(componentName)],ResultContainer);export{ResultContainer};
\ No newline at end of file
+    `}onActionsRequested(e){this.resultDetailContainer.resultItem=e.detail.resultItem}onActionInvoked(e){const t=LiveSearchConfigurator.getInvokeHandlers(),r=e.detail.resultItem,i=e.detail.action;void 0!==i&&("function"==typeof t[r.provider+"_"+i.identifier]?t[r.provider+"_"+i.identifier](r,i):Viewport.ContentContainer.setUrl(i.url),this.dispatchEvent(new CustomEvent("live-search:item-chosen",{detail:{resultItem:r}})))}};__decorate([property({type:Object})],ResultContainer.prototype,"results",void 0),__decorate([property({type:Boolean,attribute:!1})],ResultContainer.prototype,"loading",void 0),__decorate([query("typo3-backend-live-search-result-item-container")],ResultContainer.prototype,"itemContainer",void 0),__decorate([query("typo3-backend-live-search-result-item-detail-container")],ResultContainer.prototype,"resultDetailContainer",void 0),ResultContainer=__decorate([customElement(componentName)],ResultContainer);export{ResultContainer};
\ No newline at end of file
-- 
GitLab