Skip to content

Commit 0a7a922

Browse files
authored
Variant workspace breadcrumb item parentheses (#19599)
* Refactored breadcrumb variant name The parentheses will be added to unnamed variant ancestor items. * Adds `last-item` attribute (for semantics) * Imports tidy-up * Refactored `#getHref` to early exit for `.isFolder` Saves on the string allocation.
1 parent 6237ddc commit 0a7a922

File tree

2 files changed

+29
-24
lines changed

2 files changed

+29
-24
lines changed

src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-menu-breadcrumb/workspace-menu-breadcrumb.element.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@ import { UMB_WORKSPACE_CONTEXT } from '../../../workspace.context-token.js';
22
import { css, customElement, html, ifDefined, map, state } from '@umbraco-cms/backoffice/external/lit';
33
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
44
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
5+
import { UMB_MENU_STRUCTURE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/menu';
56
import { UMB_SECTION_CONTEXT } from '@umbraco-cms/backoffice/section';
6-
import {
7-
UMB_MENU_STRUCTURE_WORKSPACE_CONTEXT,
8-
type UmbMenuStructureWorkspaceContext,
9-
type UmbStructureItemModel,
10-
} from '@umbraco-cms/backoffice/menu';
7+
import type { UmbMenuStructureWorkspaceContext, UmbStructureItemModel } from '@umbraco-cms/backoffice/menu';
118

129
@customElement('umb-workspace-breadcrumb')
1310
export class UmbWorkspaceBreadcrumbElement extends UmbLitElement {
@@ -65,8 +62,8 @@ export class UmbWorkspaceBreadcrumbElement extends UmbLitElement {
6562
}
6663

6764
#getHref(structureItem: UmbStructureItemModel) {
68-
const workspaceBasePath = `section/${this.#sectionContext?.getPathname()}/workspace/${structureItem.entityType}/edit`;
69-
return structureItem.isFolder ? undefined : `${workspaceBasePath}/${structureItem.unique}`;
65+
if (structureItem.isFolder) return undefined;
66+
return `section/${this.#sectionContext?.getPathname()}/workspace/${structureItem.entityType}/edit/${structureItem.unique}`;
7067
}
7168

7269
override render() {
@@ -79,7 +76,7 @@ export class UmbWorkspaceBreadcrumbElement extends UmbLitElement {
7976
>${this.localize.string(structureItem.name)}</uui-breadcrumb-item
8077
>`,
8178
)}
82-
<uui-breadcrumb-item>${this._name}</uui-breadcrumb-item>
79+
<uui-breadcrumb-item last-item>${this._name}</uui-breadcrumb-item>
8380
</uui-breadcrumbs>
8481
`;
8582
}

src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.element.ts

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
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';
23
import { css, customElement, html, ifDefined, state } from '@umbraco-cms/backoffice/external/lit';
34
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
45
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
56
import { UmbVariantId } from '@umbraco-cms/backoffice/variant';
67
import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language';
8+
import { UMB_MENU_VARIANT_STRUCTURE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/menu';
79
import { UMB_SECTION_CONTEXT } from '@umbraco-cms/backoffice/section';
810
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';
1312

1413
@customElement('umb-workspace-variant-menu-breadcrumb')
1514
export class UmbWorkspaceVariantMenuBreadcrumbElement extends UmbLitElement {
@@ -96,31 +95,40 @@ export class UmbWorkspaceVariantMenuBreadcrumbElement extends UmbLitElement {
9695

9796
// TODO: we should move the fallback name logic to a helper class. It will be used in multiple places
9897
#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)';
105114
}
106115

107116
#getHref(structureItem: any) {
117+
if (structureItem.isFolder) return undefined;
108118
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}`;
112120
}
113121

114122
override render() {
115123
return html`
116124
<uui-breadcrumbs>
117125
${this._structure.map(
118126
(structureItem) =>
119-
html`<uui-breadcrumb-item href="${ifDefined(this.#getHref(structureItem))}"
127+
html`<uui-breadcrumb-item href=${ifDefined(this.#getHref(structureItem))}
120128
>${this.localize.string(this.#getItemVariantName(structureItem))}</uui-breadcrumb-item
121129
>`,
122130
)}
123-
<uui-breadcrumb-item>${this._name}</uui-breadcrumb-item>
131+
<uui-breadcrumb-item last-item>${this._name}</uui-breadcrumb-item>
124132
</uui-breadcrumbs>
125133
`;
126134
}

0 commit comments

Comments
 (0)