Render all URLs in document workspace info tab and ensure protocol-less links can be used to access the intended URL. (#17926)
* Render all URLs in document workspace info tab and ensure protocol-less links can be used to access the intended URL. * Removed unused import. * Removed scheme from resolved URL.
This commit is contained in:
@@ -10,6 +10,7 @@ import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
|
||||
import { observeMultiple } from '@umbraco-cms/backoffice/observable-api';
|
||||
import { DocumentVariantStateModel } from '@umbraco-cms/backoffice/external/backend-api';
|
||||
import { debounce } from '@umbraco-cms/backoffice/utils';
|
||||
import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language';
|
||||
|
||||
interface UmbDocumentInfoViewLink {
|
||||
culture: string;
|
||||
@@ -36,6 +37,9 @@ export class UmbDocumentWorkspaceViewInfoLinksElement extends UmbLitElement {
|
||||
@state()
|
||||
private _links: Array<UmbDocumentInfoViewLink> = [];
|
||||
|
||||
@state()
|
||||
private _defaultCulture?: string;
|
||||
|
||||
#urls: Array<UmbDocumentUrlModel> = [];
|
||||
|
||||
#documentWorkspaceContext?: typeof UMB_DOCUMENT_WORKSPACE_CONTEXT.TYPE;
|
||||
@@ -75,17 +79,19 @@ export class UmbDocumentWorkspaceViewInfoLinksElement extends UmbLitElement {
|
||||
this.#setLinks();
|
||||
});
|
||||
});
|
||||
|
||||
this.consumeContext(UMB_APP_LANGUAGE_CONTEXT, (instance) => {
|
||||
this.observe(instance.appDefaultLanguage, (value) => {
|
||||
this._defaultCulture = value?.unique;
|
||||
this.#setLinks();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
#setLinks() {
|
||||
const possibleVariantCultures = this._variantOptions?.map((variantOption) => variantOption.culture) ?? [];
|
||||
const possibleUrlCultures = this.#urls.map((link) => link.culture);
|
||||
const possibleCultures = [...new Set([...possibleVariantCultures, ...possibleUrlCultures])].filter(
|
||||
Boolean,
|
||||
) as string[];
|
||||
|
||||
const links: Array<UmbDocumentInfoViewLink> = possibleCultures.map((culture) => {
|
||||
const url = this.#urls.find((link) => link.culture === culture)?.url;
|
||||
const links: Array<UmbDocumentInfoViewLink> = this.#urls.map((u) => {
|
||||
const culture = u.culture ?? this._defaultCulture ?? "";
|
||||
const url = u.url;
|
||||
const state = this._variantOptions?.find((variantOption) => variantOption.culture === culture)?.variant?.state;
|
||||
return { culture, url, state };
|
||||
});
|
||||
@@ -93,6 +99,18 @@ export class UmbDocumentWorkspaceViewInfoLinksElement extends UmbLitElement {
|
||||
this._links = links;
|
||||
}
|
||||
|
||||
#getTargetUrl (url: string | undefined) {
|
||||
if (!url || url.length === 0) {
|
||||
return url;
|
||||
}
|
||||
|
||||
if (url.includes(".") && !url.includes("//")) {
|
||||
return "//" + url;
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
async #requestUrls() {
|
||||
if (this._isNew) return;
|
||||
if (!this._unique) return;
|
||||
@@ -181,7 +199,7 @@ export class UmbDocumentWorkspaceViewInfoLinksElement extends UmbLitElement {
|
||||
}
|
||||
|
||||
return html`
|
||||
<a class="link-item" href=${link.url} target="_blank">
|
||||
<a class="link-item" href=${this.#getTargetUrl(link.url)} target="_blank">
|
||||
<span>
|
||||
${this.#renderLinkCulture(link.culture)}
|
||||
<span>${link.url}</span>
|
||||
|
||||
Reference in New Issue
Block a user