|
1 |
| -import { UMB_VARIANT_WORKSPACE_CONTEXT, type UmbVariantDatasetWorkspaceContext } from '../../../contexts/index.js'; |
| 1 | +import { UMB_VARIANT_WORKSPACE_CONTEXT } from '../../../contexts/index.js'; |
| 2 | +import type { UmbVariantDatasetWorkspaceContext } from '../../../contexts/index.js'; |
2 | 3 | import { css, customElement, html, ifDefined, state } from '@umbraco-cms/backoffice/external/lit';
|
3 | 4 | import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
4 | 5 | import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
5 | 6 | import { UmbVariantId } from '@umbraco-cms/backoffice/variant';
|
6 | 7 | import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language';
|
| 8 | +import { UMB_MENU_VARIANT_STRUCTURE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/menu'; |
7 | 9 | import { UMB_SECTION_CONTEXT } from '@umbraco-cms/backoffice/section';
|
8 | 10 | import type { UmbAppLanguageContext } from '@umbraco-cms/backoffice/language';
|
9 |
| -import { |
10 |
| - UMB_MENU_VARIANT_STRUCTURE_WORKSPACE_CONTEXT, |
11 |
| - type UmbVariantStructureItemModel, |
12 |
| -} from '@umbraco-cms/backoffice/menu'; |
| 11 | +import type { UmbVariantStructureItemModel } from '@umbraco-cms/backoffice/menu'; |
13 | 12 |
|
14 | 13 | @customElement('umb-workspace-variant-menu-breadcrumb')
|
15 | 14 | export class UmbWorkspaceVariantMenuBreadcrumbElement extends UmbLitElement {
|
@@ -96,31 +95,40 @@ export class UmbWorkspaceVariantMenuBreadcrumbElement extends UmbLitElement {
|
96 | 95 |
|
97 | 96 | // TODO: we should move the fallback name logic to a helper class. It will be used in multiple places
|
98 | 97 | #getItemVariantName(structureItem: UmbVariantStructureItemModel) {
|
99 |
| - const fallbackName = |
100 |
| - structureItem.variants.find((variant) => variant.culture === this._appDefaultCulture)?.name ?? |
101 |
| - structureItem.variants[0].name ?? |
102 |
| - 'Unknown'; |
103 |
| - const name = structureItem.variants.find((variant) => this._workspaceActiveVariantId?.compare(variant))?.name; |
104 |
| - return name ?? `(${fallbackName})`; |
| 98 | + // If the active workspace is a variant, we will try to find the matching variant name. |
| 99 | + if (!this._workspaceActiveVariantId?.isInvariant()) { |
| 100 | + const variant = structureItem.variants.find((variantId) => this._workspaceActiveVariantId?.compare(variantId)); |
| 101 | + if (variant) { |
| 102 | + return variant.name; |
| 103 | + } |
| 104 | + } |
| 105 | + |
| 106 | + // If the active workspace is invariant, we will try to find the variant that matches the app default culture. |
| 107 | + const variant = structureItem.variants.find((variant) => variant.culture === this._appDefaultCulture); |
| 108 | + if (variant) { |
| 109 | + return `(${variant.name})`; |
| 110 | + } |
| 111 | + |
| 112 | + // If an active variant can not be found, then we fallback to the first variant name or a generic "unknown" label. |
| 113 | + return structureItem.variants?.[0]?.name ?? '(#general_unknown)'; |
105 | 114 | }
|
106 | 115 |
|
107 | 116 | #getHref(structureItem: any) {
|
| 117 | + if (structureItem.isFolder) return undefined; |
108 | 118 | const workspaceBasePath = `section/${this.#sectionContext?.getPathname()}/workspace/${structureItem.entityType}/edit`;
|
109 |
| - return structureItem.isFolder |
110 |
| - ? undefined |
111 |
| - : `${workspaceBasePath}/${structureItem.unique}/${this._workspaceActiveVariantId?.culture}`; |
| 119 | + return `${workspaceBasePath}/${structureItem.unique}/${this._workspaceActiveVariantId?.culture}`; |
112 | 120 | }
|
113 | 121 |
|
114 | 122 | override render() {
|
115 | 123 | return html`
|
116 | 124 | <uui-breadcrumbs>
|
117 | 125 | ${this._structure.map(
|
118 | 126 | (structureItem) =>
|
119 |
| - html`<uui-breadcrumb-item href="${ifDefined(this.#getHref(structureItem))}" |
| 127 | + html`<uui-breadcrumb-item href=${ifDefined(this.#getHref(structureItem))} |
120 | 128 | >${this.localize.string(this.#getItemVariantName(structureItem))}</uui-breadcrumb-item
|
121 | 129 | >`,
|
122 | 130 | )}
|
123 |
| - <uui-breadcrumb-item>${this._name}</uui-breadcrumb-item> |
| 131 | + <uui-breadcrumb-item last-item>${this._name}</uui-breadcrumb-item> |
124 | 132 | </uui-breadcrumbs>
|
125 | 133 | `;
|
126 | 134 | }
|
|
0 commit comments