|
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