diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.element.ts index 1aaa695503..0535b38937 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.element.ts @@ -1,7 +1,9 @@ import { html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbUserInputElement } from '@umbraco-cms/backoffice/user'; /** * @element umb-property-editor-ui-user-picker @@ -9,14 +11,19 @@ import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/ @customElement('umb-property-editor-ui-user-picker') export class UmbPropertyEditorUIUserPickerElement extends UmbLitElement implements UmbPropertyEditorUiElement { @property() - value = ''; + value?: string = ''; @property({ attribute: false }) public config?: UmbPropertyEditorConfigCollection; - // TODO: implement config + #onChange(event: CustomEvent) { + const element = event.target as UmbUserInputElement; + this.value = element.selection.join(','); + this.dispatchEvent(new UmbPropertyValueChangeEvent()); + } + render() { - return html` `; + return html``; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts index 218c4517c6..6b4f8537e7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts @@ -1,12 +1,14 @@ import type { UmbUserItemModel } from '../../repository/index.js'; import { UmbUserPickerContext } from './user-input.context.js'; -import { css, html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit'; import { FormControlMixin } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; @customElement('umb-user-input') export class UmbUserInputElement extends FormControlMixin(UmbLitElement) { + // TODO: [LK] Add sorting! + /** * This is a minimum amount of selected items in this input. * @type {number} @@ -105,31 +107,42 @@ export class UmbUserInputElement extends FormControlMixin(UmbLitElement) { return undefined; } + #openPicker() { + this.#pickerContext.openPicker({}); + } + render() { return html` - ${this._items?.map((item) => this._renderItem(item))} - this.#pickerContext.openPicker()} label="open" - >Add + ${this._items?.map((item) => this.#renderItem(item))} + ${this.#renderAddButton()} `; } - private _renderItem(item: UmbUserItemModel) { + #renderItem(item: UmbUserItemModel) { if (!item.unique) return; return html` - + - this.#pickerContext.requestRemoveItem(item.unique)} label="Remove ${item.name}" - >Remove + this.#pickerContext.requestRemoveItem(item.unique)} + label=${this.localize.term('general_remove')}> `; } + #renderAddButton() { + if (this.max === 1 && this.selection.length >= this.max) return nothing; + return html``; + } + static styles = [ css` - #add-button { + #btn-add { width: 100%; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts index d8459f569f..a49ec7f808 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts @@ -48,7 +48,7 @@ export class UmbUserPickerModalElement extends UmbModalBaseElement + ${this._users.map( (user) => html`