From 9864f0b3015f31c083fe51cc6070f0b8cb91ac2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Thu, 1 Aug 2024 09:27:32 +0200 Subject: [PATCH 1/6] retrieve and render content type name --- ...block-grid-area-type-permission.element.ts | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-area-type-permission/block-grid-area-type-permission.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-area-type-permission/block-grid-area-type-permission.element.ts index 645906e4d7..3af917e303 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-area-type-permission/block-grid-area-type-permission.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-area-type-permission/block-grid-area-type-permission.element.ts @@ -7,6 +7,11 @@ import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-ed import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/data-type'; import type { UmbBlockTypeWithGroupKey } from '@umbraco-cms/backoffice/block-type'; import type { UUIComboboxElement, UUIComboboxEvent, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import { UmbRepositoryItemsManager } from '@umbraco-cms/backoffice/repository'; +import { + UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, + type UmbDocumentTypeItemModel, +} from '@umbraco-cms/backoffice/document-type'; @customElement('umb-property-editor-ui-block-grid-area-type-permission') export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement @@ -24,20 +29,41 @@ export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement @state() private _value: Array = []; + _blockTypes: Array = []; + @state() - private _blockTypes: Array = []; + private _blockTypesWithElementName: Array<{ type: UmbBlockTypeWithGroupKey; name: string }> = []; @state() private _blockGroups: Array = []; + #itemsManager = new UmbRepositoryItemsManager( + this, + UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, + (x) => x.unique, + ); + constructor() { super(); + this.observe(this.#itemsManager.items, (items) => { + this._blockTypesWithElementName = items + .map((item) => { + const blockType = this._blockTypes.find((block) => block.contentElementTypeKey === item.unique); + if (blockType) { + return { type: blockType, name: item.name }; + } + return undefined; + }) + .filter((x) => x !== undefined) as Array<{ type: UmbBlockTypeWithGroupKey; name: string }>; + }); + this.consumeContext(UMB_DATA_TYPE_WORKSPACE_CONTEXT, async (context) => { this.observe( await context.propertyValueByAlias>('blocks'), (blockTypes) => { this._blockTypes = blockTypes ?? []; + this.#itemsManager.setUniques(blockTypes.map((block) => block.contentElementTypeKey)); }, 'observeBlockType', ); @@ -103,7 +129,7 @@ export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement this._value, (permission) => permission, (permission, index) => { - const showCategoryHeader = this._blockGroups.length && this._blockTypes.length; + const showCategoryHeader = this._blockGroups.length > 0 && this._blockTypesWithElementName.length > 0; return html`
block.contentElementTypeKey, + this._blockTypesWithElementName, + (block) => block.type.contentElementTypeKey, (block) => html` - ${block.label} + .value=${block.type.contentElementTypeKey} + ?selected=${area.elementTypeKey === block.type.contentElementTypeKey}> + ${block.name} `, ); } From 63e4d1496cc34ce9fec47cd5bc195b23acb745d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 5 Aug 2024 21:25:30 +0200 Subject: [PATCH 2/6] multiple-app-languages-condition --- .../conditions/manifests.ts | 2 + .../conditions/menu-alias.condition.ts | 10 +++-- .../multiple-app-languages.condition.ts | 37 +++++++++++++++++++ .../conditions/section-alias.condition.ts | 10 +++-- .../extension-registry/conditions/types.ts | 6 ++- .../language/app-language-select/manifests.ts | 3 ++ .../global-contexts/app-language.context.ts | 1 + 7 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/multiple-app-languages.condition.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts index 7b63b02b4e..48b22385bb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts @@ -1,10 +1,12 @@ import type { ManifestTypes } from '../models/index.js'; import { manifest as menuAliasConditionManifest } from './menu-alias.condition.js'; +import { manifest as multipleAppLanguagesConditionManifest } from './multiple-app-languages.condition.js'; import { manifest as sectionAliasConditionManifest } from './section-alias.condition.js'; import { manifest as switchConditionManifest } from './switch.condition.js'; export const manifests: Array = [ menuAliasConditionManifest, + multipleAppLanguagesConditionManifest, sectionAliasConditionManifest, switchConditionManifest, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/menu-alias.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/menu-alias.condition.ts index f03bcd1173..5d08fb2b73 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/menu-alias.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/menu-alias.condition.ts @@ -17,9 +17,13 @@ export class UmbMenuAliasCondition extends UmbConditionBase { - this.observe(context.alias, (MenuAlias) => { - this.permitted = MenuAlias === this.config.match; - }); + this.observe( + context.alias, + (MenuAlias) => { + this.permitted = MenuAlias === this.config.match; + }, + 'observeAlias', + ); }); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/multiple-app-languages.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/multiple-app-languages.condition.ts new file mode 100644 index 0000000000..361cbbcb38 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/multiple-app-languages.condition.ts @@ -0,0 +1,37 @@ +import { UmbConditionBase } from './condition-base.controller.js'; +import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import type { + ManifestCondition, + UmbConditionConfigBase, + UmbConditionControllerArguments, + UmbExtensionCondition, +} from '@umbraco-cms/backoffice/extension-api'; + +export type UmbMultipleAppLanguageConditionConfig = UmbConditionConfigBase; + +export class UmbMultipleAppLanguageCondition + extends UmbConditionBase + implements UmbExtensionCondition +{ + constructor(host: UmbControllerHost, args: UmbConditionControllerArguments) { + super(host, args); + + this.consumeContext(UMB_APP_LANGUAGE_CONTEXT, (context) => { + this.observe( + context.moreThanOneLanguage, + (moreThanOneLanguage) => { + this.permitted = moreThanOneLanguage; + }, + 'observeLanguages', + ); + }); + } +} + +export const manifest: ManifestCondition = { + type: 'condition', + name: 'Multiple App Languages Condition', + alias: 'Umb.Condition.MultipleAppLanguages', + api: UmbMultipleAppLanguageCondition, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/section-alias.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/section-alias.condition.ts index dc163ed815..b4fd34b93c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/section-alias.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/section-alias.condition.ts @@ -24,9 +24,13 @@ export class UmbSectionAliasCondition if (permissionCheck !== undefined) { this.consumeContext(UMB_SECTION_CONTEXT, (context) => { - this.observe(context.alias, (sectionAlias) => { - this.permitted = sectionAlias ? permissionCheck!(sectionAlias) : false; - }); + this.observe( + context.alias, + (sectionAlias) => { + this.permitted = sectionAlias ? permissionCheck!(sectionAlias) : false; + }, + 'observeAlias', + ); }); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts index 0481a6cb5f..f1e92fbe34 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts @@ -3,6 +3,7 @@ import type { CollectionBulkActionPermissionConditionConfig } from '../../collec import type { UmbSectionUserPermissionConditionConfig } from '../../section/conditions/index.js'; import type { SectionAliasConditionConfig } from './section-alias.condition.js'; import type { SwitchConditionConfig } from './switch.condition.js'; +import type { UmbMultipleAppLanguageConditionConfig } from './multiple-app-languages.condition.js'; import type { WorkspaceAliasConditionConfig, WorkspaceEntityTypeConditionConfig, @@ -29,8 +30,9 @@ export type ConditionTypes = | CollectionBulkActionPermissionConditionConfig | SectionAliasConditionConfig | SwitchConditionConfig + | UmbConditionConfigBase | UmbDocumentUserPermissionConditionConfig + | UmbMultipleAppLanguageConditionConfig | UmbSectionUserPermissionConditionConfig | WorkspaceAliasConditionConfig - | WorkspaceEntityTypeConditionConfig - | UmbConditionConfigBase; + | WorkspaceEntityTypeConditionConfig; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/manifests.ts index b29b0dde84..e67c16493d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/manifests.ts @@ -12,6 +12,9 @@ const entityActions: Array = [ alias: 'Umb.Condition.SectionAlias', match: 'Umb.Section.Content', }, + { + alias: 'Umb.Condition.MultipleAppLanguages', + }, ], }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/global-contexts/app-language.context.ts b/src/Umbraco.Web.UI.Client/src/packages/language/global-contexts/app-language.context.ts index 1383eee7c8..6a0d4b7d8b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/global-contexts/app-language.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/global-contexts/app-language.context.ts @@ -12,6 +12,7 @@ import { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth'; export class UmbAppLanguageContext extends UmbContextBase implements UmbApi { #languageCollectionRepository: UmbLanguageCollectionRepository; #languages = new UmbArrayState([], (x) => x.unique); + moreThanOneLanguage = this.#languages.asObservablePart((x) => x.length > 1); #appLanguage = new UmbObjectState(undefined); appLanguage = this.#appLanguage.asObservable(); From f29031326c7c53f5bbf0eaf8076134be63fbae11 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 6 Aug 2024 09:19:30 +0200 Subject: [PATCH 3/6] make build happy --- .../examples/block-custom-view/block-custom-view.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/examples/block-custom-view/block-custom-view.ts b/src/Umbraco.Web.UI.Client/examples/block-custom-view/block-custom-view.ts index abd194cf81..40b88d0ce9 100644 --- a/src/Umbraco.Web.UI.Client/examples/block-custom-view/block-custom-view.ts +++ b/src/Umbraco.Web.UI.Client/examples/block-custom-view/block-custom-view.ts @@ -3,7 +3,9 @@ import { html, customElement, LitElement, property, css } from '@umbraco-cms/bac import { UmbElementMixin } from '@umbraco-cms/backoffice/element-api'; import type { UmbBlockDataType, UmbBlockEditorCustomViewElement } from '@umbraco-cms/backoffice/extension-registry'; +// eslint-disable-next-line local-rules/enforce-umb-prefix-on-element-name @customElement('example-block-custom-view') +// eslint-disable-next-line local-rules/umb-class-prefix export class ExampleBlockCustomView extends UmbElementMixin(LitElement) implements UmbBlockEditorCustomViewElement { // @property({ attribute: false }) @@ -13,7 +15,7 @@ export class ExampleBlockCustomView extends UmbElementMixin(LitElement) implemen return html`
My Custom View
-

Headline: ${this.content.headline}

+

Headline: ${this.content?.headline}

`; } From d5b40694e891eb35f88c94d554575086681f7da2 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 5 Aug 2024 15:25:19 +0100 Subject: [PATCH 4/6] Document Type Picker - enabled boolean properties Previously the `?elementTypesOnly` attribute wasn't reading the value --- .../input-document-type/input-document-type.element.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts index a0a7d6a13c..4bdaa37d2f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts @@ -37,7 +37,7 @@ export class UmbInputDocumentTypeElement extends UmbFormControlMixin Date: Tue, 6 Aug 2024 10:32:11 +0200 Subject: [PATCH 5/6] set as properties --- .../property-editor-ui-document-type-picker.element.ts | 2 +- .../webhook/views/webhook-details-workspace-view.element.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-editors/document-type-picker/property-editor-ui-document-type-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-editors/document-type-picker/property-editor-ui-document-type-picker.element.ts index b73d7b9998..e1604bb787 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-editors/document-type-picker/property-editor-ui-document-type-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-editors/document-type-picker/property-editor-ui-document-type-picker.element.ts @@ -45,7 +45,7 @@ export class UmbPropertyEditorUIDocumentTypePickerElement extends UmbLitElement .min=${this.min} .max=${this.max} .value=${this.value} - ?elementTypesOnly=${this.onlyElementTypes} + .elementTypesOnly=${this.onlyElementTypes ?? false} ?showOpenButton=${this.showOpenButton} @change=${this.#onChange}> diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/webhook/views/webhook-details-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/webhook/views/webhook-details-workspace-view.element.ts index 874d2b3764..0be8864bd5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/webhook/views/webhook-details-workspace-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/webhook/views/webhook-details-workspace-view.element.ts @@ -90,7 +90,7 @@ export class UmbWebhookDetailsWorkspaceViewElement extends UmbLitElement impleme slot="editor" @change=${this.#onTypesChange} .selection=${this._webhook?.contentTypes ?? []} - ?documentTypesOnly=${true}> + .documentTypesOnly=${true}> `; case 'Media': return html` From ce76b5c2a6664009b513d53d1a370750803e822d Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 6 Aug 2024 10:32:45 +0200 Subject: [PATCH 6/6] disable attributes --- .../input-document-type/input-document-type.element.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts index 4bdaa37d2f..a0a7d6a13c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts @@ -37,7 +37,7 @@ export class UmbInputDocumentTypeElement extends UmbFormControlMixin