From aab7aadb2e3f54ae1a803ca1192a7cfde46a8b3d Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 15 Aug 2024 12:52:49 +0200 Subject: [PATCH] wip upgrade member picker to use search components --- .../member-picker-modal.element.ts | 147 ++++-------------- 1 file changed, 27 insertions(+), 120 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/components/member-picker-modal/member-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/components/member-picker-modal/member-picker-modal.element.ts index e0c3ec8ed1..f87f86be24 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/components/member-picker-modal/member-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/components/member-picker-modal/member-picker-modal.element.ts @@ -1,13 +1,12 @@ import { UmbMemberCollectionRepository } from '../../collection/index.js'; -import { UmbMemberSearchProvider } from '../../search/member.search-provider.js'; import type { UmbMemberDetailModel } from '../../types.js'; import type { UmbMemberItemModel } from '../../repository/index.js'; import type { UmbMemberPickerModalValue, UmbMemberPickerModalData } from './member-picker-modal.token.js'; -import { css, customElement, html, nothing, repeat, state, when } from '@umbraco-cms/backoffice/external/lit'; -import { debounce, UmbSelectionManager } from '@umbraco-cms/backoffice/utils'; +import { customElement, html, repeat, state } from '@umbraco-cms/backoffice/external/lit'; +import { UmbSelectionManager } from '@umbraco-cms/backoffice/utils'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import { UmbCollectionPickerModalContext } from '@umbraco-cms/backoffice/collection'; @customElement('umb-member-picker-modal') export class UmbMemberPickerModalElement extends UmbModalBaseElement< @@ -17,18 +16,11 @@ export class UmbMemberPickerModalElement extends UmbModalBaseElement< @state() private _members: Array = []; - @state() - private _searchQuery: string = ''; - - @state() - private _searchResult: Array = []; - - @state() - private _searching = false; - #collectionRepository = new UmbMemberCollectionRepository(this); #selectionManager = new UmbSelectionManager(this); - #searchProvider = new UmbMemberSearchProvider(this); + + // TODO: find a way to implement through the manifest api field + #api = new UmbCollectionPickerModalContext(this); override connectedCallback(): void { super.connectedCallback(); @@ -62,54 +54,20 @@ export class UmbMemberPickerModalElement extends UmbModalBaseElement< } } - #onSearchInput(event: UUIInputEvent) { - const value = event.target.value as string; - this._searchQuery = value; - - if (!this._searchQuery) { - this._searchResult = []; - this._searching = false; - return; - } - - this._searching = true; - this.#debouncedSearch(); - } - - #debouncedSearch = debounce(this.#search, 300); - - async #search() { - if (!this._searchQuery) return; - const { data } = await this.#searchProvider.search({ query: this._searchQuery }); - this._searchResult = data?.items ?? []; - this._searching = false; - } - - #onSearchClear() { - this._searchQuery = ''; - this._searchResult = []; - } - override render() { return html` - ${this.#renderSearch()} ${this.#renderItems()} -
- this.modalContext?.reject()}> - this.modalContext?.submit()}> -
+ + + + ${this.#renderItems()} + ${this.#renderActions()}
`; } #renderItems() { - if (this._searchQuery) return nothing; return html` ${repeat( this.#filteredMembers, @@ -119,52 +77,6 @@ export class UmbMemberPickerModalElement extends UmbModalBaseElement< `; } - #renderSearch() { - return html` - -
- ${this._searching - ? html`` - : html``} -
- ${when( - this._searchQuery, - () => html` -
- - - -
- `, - )} -
-
- ${this.#renderSearchResult()} - `; - } - - #renderSearchResult() { - if (this._searchQuery && this._searching === false && this._searchResult.length === 0) { - return this.#renderEmptySearchResult(); - } - - return html` - ${repeat( - this._searchResult, - (item) => item.unique, - (item) => this.#renderMemberItem(item), - )} - `; - } - - #renderEmptySearchResult() { - return html`No result for "${this._searchQuery}".`; - } - #renderMemberItem(item: UmbMemberItemModel | UmbMemberDetailModel) { return html` + this.modalContext?.reject()}> + this.modalContext?.submit()}> + + `; + } - #search-divider { - width: 100%; - height: 1px; - background-color: var(--uui-color-divider); - margin-top: var(--uui-size-space-5); - margin-bottom: var(--uui-size-space-3); - } - - #search-indicator { - margin-left: 7px; - margin-top: 4px; - } - `, - ]; + static override styles = [UmbTextStyles]; } export default UmbMemberPickerModalElement;