From 7555576c9ec35991f2d2f5990bc601f19584d7ac Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 20 Mar 2024 18:39:44 +0000 Subject: [PATCH 1/2] Adds filter input to Item Picker modal --- .../item-picker/item-picker-modal.element.ts | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/item-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/item-picker-modal.element.ts index 62e3788c6b..579ec7bec7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/item-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/item-picker-modal.element.ts @@ -5,6 +5,7 @@ import { repeat, nothing, when, + state, ifDefined, } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; @@ -13,21 +14,49 @@ import type { UmbItemPickerModalData, UmbItemPickerModel } from '@umbraco-cms/ba @customElement('umb-item-picker-modal') export class UmbItemPickerModalElement extends UmbModalBaseElement { + @state() + private _filtered: Array = []; + #close() { this.modalContext?.reject(); } + #filter(event: { target: HTMLInputElement }) { + if (!this.data) return; + + if (event.target.value) { + const query = event.target.value.toLowerCase(); + this._filtered = this.data.items.filter( + (item) => item.label.toLowerCase().includes(query) || item.value.toLowerCase().includes(query), + ); + } else { + this._filtered = this.data.items; + } + } + #submit(item: UmbItemPickerModel) { this.modalContext?.setValue(item); this.modalContext?.submit(); } + connectedCallback() { + super.connectedCallback(); + + if (!this.data) return; + this._filtered = this.data.items; + } + render() { if (!this.data) return nothing; - const items = this.data.items; + const items = this._filtered; return html` -
+
+ +
+ +
+
${when( items.length, () => html` @@ -61,6 +90,16 @@ export class UmbItemPickerModalElement extends UmbModalBaseElement uui-input { + width: 100%; + } + uui-box > uui-button { display: block; --uui-button-content-align: flex-start; From 37e33b277f2a2dc12cf6b73766374659218e5e9c Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 20 Mar 2024 18:40:35 +0000 Subject: [PATCH 2/2] modalContext move setter to `@property` --- .../packages/core/modal/component/modal-base.element.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/component/modal-base.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/component/modal-base.element.ts index c4a1defa21..a1aeb0725c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/component/modal-base.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/component/modal-base.element.ts @@ -16,10 +16,8 @@ export abstract class UmbModalBaseElement< @property({ type: Object, attribute: false }) public manifest?: ModalManifestType; + #modalContext?: UmbModalContext | undefined; @property({ attribute: false }) - public get modalContext(): UmbModalContext | undefined { - return this.#modalContext; - } public set modalContext(context: UmbModalContext | undefined) { this.#modalContext = context; if (context) { @@ -35,7 +33,9 @@ export abstract class UmbModalBaseElement< ); } } - #modalContext?: UmbModalContext | undefined; + public get modalContext(): UmbModalContext | undefined { + return this.#modalContext; + } @property({ attribute: false }) public set data(value: ModalDataType | undefined) {