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