Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Commit c8bbe76

Browse files
Merge branch 'main' into v14/chore/eslint-jsdocs
2 parents c88606a + 9e85ffe commit c8bbe76

File tree

14 files changed

+187
-103
lines changed

14 files changed

+187
-103
lines changed

examples/block-custom-view/block-custom-view.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import { html, customElement, LitElement, property, css } from '@umbraco-cms/bac
33
import { UmbElementMixin } from '@umbraco-cms/backoffice/element-api';
44
import type { UmbBlockDataType, UmbBlockEditorCustomViewElement } from '@umbraco-cms/backoffice/extension-registry';
55

6+
// eslint-disable-next-line local-rules/enforce-umb-prefix-on-element-name
67
@customElement('example-block-custom-view')
8+
// eslint-disable-next-line local-rules/umb-class-prefix
79
export class ExampleBlockCustomView extends UmbElementMixin(LitElement) implements UmbBlockEditorCustomViewElement {
810
//
911
@property({ attribute: false })
@@ -13,7 +15,7 @@ export class ExampleBlockCustomView extends UmbElementMixin(LitElement) implemen
1315
return html`
1416
<div class="uui-text">
1517
<h5 class="uui-text">My Custom View</h5>
16-
<p>Headline: ${this.content.headline}</p>
18+
<p>Headline: ${this.content?.headline}</p>
1719
</div>
1820
`;
1921
}

src/apps/backoffice/backoffice.context.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ export class UmbBackofficeContext extends UmbContextBase<UmbBackofficeContext> {
1919
#allowedSections = new UmbBasicState<Array<UmbExtensionManifestInitializer<ManifestSection>>>([]);
2020
public readonly allowedSections = this.#allowedSections.asObservable();
2121

22-
#verison = new UmbStringState(undefined);
23-
public readonly version = this.#verison.asObservable();
22+
#version = new UmbStringState(undefined);
23+
public readonly version = this.#version.asObservable();
2424

2525
constructor(host: UmbControllerHost) {
2626
super(host, UMB_BACKOFFICE_CONTEXT);
@@ -70,7 +70,7 @@ export class UmbBackofficeContext extends UmbContextBase<UmbBackofficeContext> {
7070
) ?? [];
7171

7272
const version = [major, minor, patch].join('.') + (prerelease ? `-${prerelease}` : '');
73-
this.#verison.setValue(version);
73+
this.#version.setValue(version);
7474
}
7575

7676
public setActiveSectionAlias(alias: string) {

src/packages/block/block-grid/property-editors/block-grid-area-type-permission/block-grid-area-type-permission.element.ts

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-ed
77
import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/data-type';
88
import type { UmbBlockTypeWithGroupKey } from '@umbraco-cms/backoffice/block-type';
99
import type { UUIComboboxElement, UUIComboboxEvent, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui';
10+
import { UmbRepositoryItemsManager } from '@umbraco-cms/backoffice/repository';
11+
import {
12+
UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS,
13+
type UmbDocumentTypeItemModel,
14+
} from '@umbraco-cms/backoffice/document-type';
1015

1116
@customElement('umb-property-editor-ui-block-grid-area-type-permission')
1217
export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement
@@ -24,20 +29,41 @@ export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement
2429
@state()
2530
private _value: Array<UmbBlockGridTypeAreaTypePermission> = [];
2631

32+
_blockTypes: Array<UmbBlockTypeWithGroupKey> = [];
33+
2734
@state()
28-
private _blockTypes: Array<UmbBlockTypeWithGroupKey> = [];
35+
private _blockTypesWithElementName: Array<{ type: UmbBlockTypeWithGroupKey; name: string }> = [];
2936

3037
@state()
3138
private _blockGroups: Array<UmbBlockGridTypeGroupType> = [];
3239

40+
#itemsManager = new UmbRepositoryItemsManager<UmbDocumentTypeItemModel>(
41+
this,
42+
UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS,
43+
(x) => x.unique,
44+
);
45+
3346
constructor() {
3447
super();
3548

49+
this.observe(this.#itemsManager.items, (items) => {
50+
this._blockTypesWithElementName = items
51+
.map((item) => {
52+
const blockType = this._blockTypes.find((block) => block.contentElementTypeKey === item.unique);
53+
if (blockType) {
54+
return { type: blockType, name: item.name };
55+
}
56+
return undefined;
57+
})
58+
.filter((x) => x !== undefined) as Array<{ type: UmbBlockTypeWithGroupKey; name: string }>;
59+
});
60+
3661
this.consumeContext(UMB_DATA_TYPE_WORKSPACE_CONTEXT, async (context) => {
3762
this.observe(
3863
await context.propertyValueByAlias<Array<UmbBlockTypeWithGroupKey>>('blocks'),
3964
(blockTypes) => {
4065
this._blockTypes = blockTypes ?? [];
66+
this.#itemsManager.setUniques(blockTypes.map((block) => block.contentElementTypeKey));
4167
},
4268
'observeBlockType',
4369
);
@@ -103,7 +129,7 @@ export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement
103129
this._value,
104130
(permission) => permission,
105131
(permission, index) => {
106-
const showCategoryHeader = this._blockGroups.length && this._blockTypes.length;
132+
const showCategoryHeader = this._blockGroups.length > 0 && this._blockTypesWithElementName.length > 0;
107133
108134
return html`<div class="permission-setting">
109135
<uui-combobox
@@ -169,13 +195,13 @@ export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement
169195

170196
#renderBlockTypes(area: UmbBlockGridTypeAreaTypePermission) {
171197
return repeat(
172-
this._blockTypes,
173-
(block) => block.contentElementTypeKey,
198+
this._blockTypesWithElementName,
199+
(block) => block.type.contentElementTypeKey,
174200
(block) =>
175201
html`<uui-combobox-list-option
176-
.value=${block.contentElementTypeKey}
177-
?selected=${area.elementTypeKey === block.contentElementTypeKey}>
178-
${block.label}
202+
.value=${block.type.contentElementTypeKey}
203+
?selected=${area.elementTypeKey === block.type.contentElementTypeKey}>
204+
${block.name}
179205
</uui-combobox-list-option>`,
180206
);
181207
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import type { ManifestTypes } from '../models/index.js';
22
import { manifest as menuAliasConditionManifest } from './menu-alias.condition.js';
3+
import { manifest as multipleAppLanguagesConditionManifest } from './multiple-app-languages.condition.js';
34
import { manifest as sectionAliasConditionManifest } from './section-alias.condition.js';
45
import { manifest as switchConditionManifest } from './switch.condition.js';
56

67
export const manifests: Array<ManifestTypes> = [
78
menuAliasConditionManifest,
9+
multipleAppLanguagesConditionManifest,
810
sectionAliasConditionManifest,
911
switchConditionManifest,
1012
];

src/packages/core/extension-registry/conditions/menu-alias.condition.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ export class UmbMenuAliasCondition extends UmbConditionBase<MenuAliasConditionCo
1717
super(host, args);
1818

1919
this.consumeContext(UMB_MENU_CONTEXT, (context) => {
20-
this.observe(context.alias, (MenuAlias) => {
21-
this.permitted = MenuAlias === this.config.match;
22-
});
20+
this.observe(
21+
context.alias,
22+
(MenuAlias) => {
23+
this.permitted = MenuAlias === this.config.match;
24+
},
25+
'observeAlias',
26+
);
2327
});
2428
}
2529
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { UmbConditionBase } from './condition-base.controller.js';
2+
import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language';
3+
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
4+
import type {
5+
ManifestCondition,
6+
UmbConditionConfigBase,
7+
UmbConditionControllerArguments,
8+
UmbExtensionCondition,
9+
} from '@umbraco-cms/backoffice/extension-api';
10+
11+
export type UmbMultipleAppLanguageConditionConfig = UmbConditionConfigBase;
12+
13+
export class UmbMultipleAppLanguageCondition
14+
extends UmbConditionBase<UmbMultipleAppLanguageConditionConfig>
15+
implements UmbExtensionCondition
16+
{
17+
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<UmbMultipleAppLanguageConditionConfig>) {
18+
super(host, args);
19+
20+
this.consumeContext(UMB_APP_LANGUAGE_CONTEXT, (context) => {
21+
this.observe(
22+
context.moreThanOneLanguage,
23+
(moreThanOneLanguage) => {
24+
this.permitted = moreThanOneLanguage;
25+
},
26+
'observeLanguages',
27+
);
28+
});
29+
}
30+
}
31+
32+
export const manifest: ManifestCondition = {
33+
type: 'condition',
34+
name: 'Multiple App Languages Condition',
35+
alias: 'Umb.Condition.MultipleAppLanguages',
36+
api: UmbMultipleAppLanguageCondition,
37+
};

src/packages/core/extension-registry/conditions/section-alias.condition.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@ export class UmbSectionAliasCondition
2424

2525
if (permissionCheck !== undefined) {
2626
this.consumeContext(UMB_SECTION_CONTEXT, (context) => {
27-
this.observe(context.alias, (sectionAlias) => {
28-
this.permitted = sectionAlias ? permissionCheck!(sectionAlias) : false;
29-
});
27+
this.observe(
28+
context.alias,
29+
(sectionAlias) => {
30+
this.permitted = sectionAlias ? permissionCheck!(sectionAlias) : false;
31+
},
32+
'observeAlias',
33+
);
3034
});
3135
}
3236
}

src/packages/core/extension-registry/conditions/types.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { CollectionBulkActionPermissionConditionConfig } from '../../collec
33
import type { UmbSectionUserPermissionConditionConfig } from '../../section/conditions/index.js';
44
import type { SectionAliasConditionConfig } from './section-alias.condition.js';
55
import type { SwitchConditionConfig } from './switch.condition.js';
6+
import type { UmbMultipleAppLanguageConditionConfig } from './multiple-app-languages.condition.js';
67
import type {
78
WorkspaceAliasConditionConfig,
89
WorkspaceEntityTypeConditionConfig,
@@ -29,8 +30,9 @@ export type ConditionTypes =
2930
| CollectionBulkActionPermissionConditionConfig
3031
| SectionAliasConditionConfig
3132
| SwitchConditionConfig
33+
| UmbConditionConfigBase
3234
| UmbDocumentUserPermissionConditionConfig
35+
| UmbMultipleAppLanguageConditionConfig
3336
| UmbSectionUserPermissionConditionConfig
3437
| WorkspaceAliasConditionConfig
35-
| WorkspaceEntityTypeConditionConfig
36-
| UmbConditionConfigBase;
38+
| WorkspaceEntityTypeConditionConfig;

src/packages/documents/document-types/property-editors/document-type-picker/property-editor-ui-document-type-picker.element.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export class UmbPropertyEditorUIDocumentTypePickerElement extends UmbLitElement
4545
.min=${this.min}
4646
.max=${this.max}
4747
.value=${this.value}
48-
?elementTypesOnly=${this.onlyElementTypes}
48+
.elementTypesOnly=${this.onlyElementTypes ?? false}
4949
?showOpenButton=${this.showOpenButton}
5050
@change=${this.#onChange}>
5151
</umb-input-document-type>

src/packages/language/app-language-select/manifests.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ const entityActions: Array<ManifestSectionSidebarApp> = [
1212
alias: 'Umb.Condition.SectionAlias',
1313
match: 'Umb.Section.Content',
1414
},
15+
{
16+
alias: 'Umb.Condition.MultipleAppLanguages',
17+
},
1518
],
1619
},
1720
];

0 commit comments

Comments
 (0)