Skip to content

Commit 4677006

Browse files
committed
Media Picker Modal - added debounce to search input
1 parent 88364f5 commit 4677006

File tree

1 file changed

+30
-22
lines changed

1 file changed

+30
-22
lines changed

src/packages/media/media/modals/media-picker/media-picker-modal.element.ts

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
import type { UmbDropzoneElement } from '../../dropzone/dropzone.element.js';
2-
import { type UmbMediaItemModel, UmbMediaItemRepository, UmbMediaUrlRepository } from '../../repository/index.js';
1+
import { UmbMediaItemRepository, UmbMediaUrlRepository } from '../../repository/index.js';
32
import { UmbMediaTreeRepository } from '../../tree/media-tree.repository.js';
43
import { UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../entity.js';
4+
import type { UmbDropzoneElement } from '../../dropzone/dropzone.element.js';
5+
import type { UmbMediaItemModel } from '../../repository/index.js';
56
import type { UmbMediaCardItemModel, UmbMediaPathModel } from './types.js';
67
import type { UmbMediaPickerFolderPathElement } from './components/media-picker-folder-path.element.js';
78
import type { UmbMediaPickerModalData, UmbMediaPickerModalValue } from './media-picker-modal.token.js';
8-
import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
9-
import { UmbImagingRepository } from '@umbraco-cms/backoffice/imaging';
109
import { css, html, customElement, state, repeat, ifDefined, query } from '@umbraco-cms/backoffice/external/lit';
11-
import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui';
10+
import { debounce } from '@umbraco-cms/backoffice/utils';
1211
import { ImageCropModeModel } from '@umbraco-cms/backoffice/external/backend-api';
12+
import { UmbImagingRepository } from '@umbraco-cms/backoffice/imaging';
13+
import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
1314
import { UMB_CONTENT_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content';
15+
import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui';
1416

1517
const root: UmbMediaPathModel = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE };
1618

@@ -154,9 +156,13 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement<
154156
this._mediaFilteredList = await this.#mapMediaUrls(data.filter((found) => found.isTrashed === false));
155157
}
156158

159+
#debouncedSearch = debounce(() => {
160+
this.#filterMediaItems();
161+
}, 500);
162+
157163
#onSearch(e: UUIInputEvent) {
158164
this._searchQuery = (e.target.value as string).toLocaleLowerCase();
159-
this.#filterMediaItems();
165+
this.#debouncedSearch();
160166
}
161167

162168
#onPathChange(e: CustomEvent) {
@@ -203,23 +209,25 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement<
203209
#renderToolbar() {
204210
/**<umb-media-picker-create-item .node=${this._currentMediaEntity.unique}></umb-media-picker-create-item>
205211
* We cannot route to a workspace without the media picker modal is a routeable. Using regular upload button for now... */
206-
return html`<div id="toolbar">
207-
<div id="search">
208-
<uui-input
209-
label=${this.localize.term('general_search')}
210-
placeholder=${this.localize.term('placeholders_search')}
211-
@change=${this.#onSearch}>
212-
<uui-icon slot="prepend" name="icon-search"></uui-icon>
213-
</uui-input>
214-
<uui-checkbox
215-
@change=${() => (this._searchOnlyThisFolder = !this._searchOnlyThisFolder)}
216-
label=${this.localize.term('general_excludeFromSubFolders')}></uui-checkbox>
212+
return html`
213+
<div id="toolbar">
214+
<div id="search">
215+
<uui-input
216+
label=${this.localize.term('general_search')}
217+
placeholder=${this.localize.term('placeholders_search')}
218+
@input=${this.#onSearch}>
219+
<uui-icon slot="prepend" name="icon-search"></uui-icon>
220+
</uui-input>
221+
<uui-checkbox
222+
@change=${() => (this._searchOnlyThisFolder = !this._searchOnlyThisFolder)}
223+
label=${this.localize.term('general_excludeFromSubFolders')}></uui-checkbox>
224+
</div>
225+
<uui-button
226+
@click=${() => this._dropzone.browse()}
227+
label=${this.localize.term('general_upload')}
228+
look="primary"></uui-button>
217229
</div>
218-
<uui-button
219-
@click=${() => this._dropzone.browse()}
220-
label=${this.localize.term('general_upload')}
221-
look="primary"></uui-button>
222-
</div> `;
230+
`;
223231
}
224232

225233
#renderCard(item: UmbMediaCardItemModel) {

0 commit comments

Comments
 (0)