diff --git a/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts b/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts index fe25a89706..42e4eb17b8 100644 --- a/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts +++ b/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts @@ -1,6 +1,6 @@ import type { UmbMemberGroupItemModel } from '../../repository/index.js'; import { UmbMemberGroupPickerInputContext } from './input-member-group.context.js'; -import { css, html, customElement, property, state, repeat } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, property, state, repeat, nothing } from '@umbraco-cms/backoffice/external/lit'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @@ -100,6 +100,27 @@ export class UmbInputMemberGroupElement extends UmbFormControlMixin boolean = () => true; + /** + * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. + * @type {boolean} + * @attr + * @default false + */ + @property({ type: Boolean, reflect: true }) + public get readonly() { + return this.#readonly; + } + public set readonly(value) { + this.#readonly = value; + + if (this.#readonly) { + this.#sorter.disable(); + } else { + this.#sorter.enable(); + } + } + #readonly = false; + @state() private _editMemberGroupPath = ''; @@ -168,36 +189,34 @@ export class UmbInputMemberGroupElement extends UmbFormControlMixin= this.max) return; + if (this.max === 1 && this.selection.length >= this.max) return nothing; return html``; + label=${this.localize.term('general_choose')} + ?disabled=${this.readonly}>`; } #renderItem(item: UmbMemberGroupItemModel) { - if (!item.unique) return; + if (!item.unique) return nothing; return html` - - - ${this.#renderOpenButton(item)} - this.#removeItem(item)} label=${this.localize.term('general_remove')}> - + + ${this.#renderRemoveButton(item)} `; } - #renderOpenButton(item: UmbMemberGroupItemModel) { - if (!this.showOpenButton) return; - return html` - - ${this.localize.term('general_open')} - - `; + #renderRemoveButton(item: UmbMemberGroupItemModel) { + if (this.readonly) return nothing; + return html` this.#removeItem(item)} + label=${this.localize.term('general_remove')}>`; } static override styles = [ diff --git a/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts b/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts index 2ec8bcc4f2..77db474611 100644 --- a/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts +++ b/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ propertyEditorSchemaAlias: 'Umbraco.MemberGroupPicker', icon: 'icon-users-alt', group: 'people', + supportsReadOnly: true, }, }, memberGroupSchemaManifest, diff --git a/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.element.ts b/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.element.ts index 680b011fa6..b26aeea41e 100644 --- a/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.element.ts +++ b/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.element.ts @@ -22,6 +22,15 @@ export class UmbPropertyEditorUIMemberGroupPickerElement extends UmbLitElement i this._max = minMax?.max ?? Infinity; } + /** + * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. + * @type {boolean} + * @attr + * @default false + */ + @property({ type: Boolean, reflect: true }) + readonly = false; + @state() _min = 0; @@ -40,7 +49,8 @@ export class UmbPropertyEditorUIMemberGroupPickerElement extends UmbLitElement i .max=${this._max} .value=${this.value} ?showOpenButton=${true} - @change=${this.#onChange}> + @change=${this.#onChange} + ?readonly=${this.readonly}> `; } }