From f06817a4a1580b27ecee65e6173f69474f38ef62 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 21 Aug 2024 21:25:21 +0200 Subject: [PATCH] readonly media picker --- .../input-media/input-media.element.ts | 62 ++++++++++++++----- .../media-entity-picker/manifests.ts | 1 + ...y-editor-ui-media-entity-picker.element.ts | 10 +++ 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts index 3e0d1f331a..e502ea7953 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts @@ -1,7 +1,16 @@ import type { UmbMediaCardItemModel } from '../../modals/index.js'; import type { UmbMediaItemModel } from '../../repository/index.js'; import { UmbMediaPickerContext } from './input-media.context.js'; -import { css, customElement, html, ifDefined, property, repeat, state } from '@umbraco-cms/backoffice/external/lit'; +import { + css, + customElement, + html, + ifDefined, + nothing, + property, + repeat, + state, +} 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'; @@ -13,7 +22,6 @@ import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; import '@umbraco-cms/backoffice/imaging'; const elementName = 'umb-input-media'; - @customElement(elementName) export class UmbInputMediaElement extends UmbFormControlMixin(UmbLitElement) { #sorter = new UmbSorterController(this, { @@ -116,6 +124,27 @@ export class UmbInputMediaElement extends UmbFormControlMixin 0 ? this.selection.join(',') : undefined; } + /** + * 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 _editMediaPath = ''; @@ -182,7 +211,7 @@ export class UmbInputMediaElement extends UmbFormControlMixin + label=${this.localize.term('general_choose')} + ?disabled=${this.readonly}> ${this.localize.term('general_choose')} @@ -207,30 +237,34 @@ export class UmbInputMediaElement extends UmbFormControlMixin + href="${ifDefined(href)}" + ?readonly=${this.readonly}> ${this.#renderIsTrashed(item)} - - this.#onRemove(item)}> - - - + ${this.#renderRemoveAction(item)} `; } + #renderRemoveAction(item: UmbMediaCardItemModel) { + if (this.readonly) return nothing; + return html` + this.#onRemove(item)}> + + + `; + } + #renderIsTrashed(item: UmbMediaCardItemModel) { - if (!item.isTrashed) return; + if (!item.isTrashed) return nothing; return html` Trashed diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/manifests.ts index 3b0bb49284..86bf37902e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/manifests.ts @@ -9,5 +9,6 @@ export const manifest: ManifestPropertyEditorUi = { label: 'Media Entity Picker', icon: 'icon-picture', group: 'pickers', + supportsReadOnly: true, }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/property-editor-ui-media-entity-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/property-editor-ui-media-entity-picker.element.ts index c5426bfe0f..96827931d1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/property-editor-ui-media-entity-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/property-editor-ui-media-entity-picker.element.ts @@ -19,6 +19,15 @@ export class UmbPropertyEditorUIMediaEntityPickerElement 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: number = 0; @@ -36,6 +45,7 @@ export class UmbPropertyEditorUIMediaEntityPickerElement extends UmbLitElement i .min=${this._min} .max=${this._max} .value=${this.value} + ?readonly=${this.readonly} @change=${this.#onChange}> `; }