align filter model for extension insight workspace

This commit is contained in:
Mads Rasmussen
2024-05-17 11:40:16 +02:00
parent 130ad83388
commit fa61d14cec
4 changed files with 26 additions and 21 deletions

View File

@@ -1,6 +1,10 @@
import type { UmbDataSourceResponse } from '../../repository/index.js';
import type { UmbPagedModel } from '../../repository/types.js';
import type { UmbCollectionFilterModel } from '../collection-filter-model.interface.js';
export interface UmbCollectionDataSource<CollectionItemType, FilterType = unknown> {
export interface UmbCollectionDataSource<
CollectionItemType extends { entityType: string; unique: string } = any,
FilterType extends UmbCollectionFilterModel = UmbCollectionFilterModel,
> {
getCollection(filter: FilterType): Promise<UmbDataSourceResponse<UmbPagedModel<CollectionItemType>>>;
}

View File

@@ -1,5 +1,10 @@
import type { UmbCollectionFilterModel } from '../collection-filter-model.interface.js';
import type { UmbPagedModel, UmbRepositoryResponse } from '@umbraco-cms/backoffice/repository';
import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
export interface UmbCollectionRepository extends UmbApi {
requestCollection(filter?: any): Promise<any>;
export interface UmbCollectionRepository<
CollectionItemType extends { entityType: string; unique: string } = any,
FilterType extends UmbCollectionFilterModel = UmbCollectionFilterModel,
> extends UmbApi {
requestCollection(filter?: FilterType): Promise<UmbRepositoryResponse<UmbPagedModel<CollectionItemType>>>;
}

View File

@@ -36,9 +36,9 @@ export class UmbExtensionCollectionElement extends UmbCollectionDefaultElement {
#onSearch(event: InputEvent) {
const target = event.target as HTMLInputElement;
const query = target.value || '';
const filter = target.value || '';
clearTimeout(this.#inputTimer);
this.#inputTimer = setTimeout(() => this.#collectionContext?.setFilter({ filter: query }), this.#inputTimerAmount);
this.#inputTimer = setTimeout(() => this.#collectionContext?.setFilter({ filter }), this.#inputTimerAmount);
}
protected renderToolbar() {

View File

@@ -1,39 +1,35 @@
import { umbExtensionsRegistry } from '../../registry.js';
import type { ManifestTypes } from '../../models/index.js';
import type { UmbExtensionCollectionFilterModel } from '../types.js';
import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { UmbCollectionRepository } from '@umbraco-cms/backoffice/collection';
export interface UmbExtensionCollectionFilter {
query?: string;
skip: number;
take: number;
type?: ManifestTypes['type'];
}
export class UmbExtensionCollectionRepository extends UmbRepositoryBase implements UmbCollectionRepository {
constructor(host: UmbControllerHost) {
super(host);
}
async requestCollection(filter: UmbExtensionCollectionFilter) {
async requestCollection(query: UmbExtensionCollectionFilterModel) {
let extensions = umbExtensionsRegistry.getAllExtensions();
if (filter.query) {
const query = filter.query.toLowerCase();
const skip = query.skip || 0;
const take = query.take || 100;
if (query.filter) {
const text = query.filter.toLowerCase();
extensions = extensions.filter(
(x) => x.name.toLowerCase().includes(query) || x.alias.toLowerCase().includes(query),
(x) => x.name.toLowerCase().includes(text) || x.alias.toLowerCase().includes(text),
);
}
if (filter.type) {
extensions = extensions.filter((x) => x.type === filter.type);
if (query.type) {
extensions = extensions.filter((x) => x.type === query.type);
}
extensions.sort((a, b) => a.type.localeCompare(b.type) || a.alias.localeCompare(b.alias));
const total = extensions.length;
const items = extensions.slice(filter.skip, filter.skip + filter.take);
const items = extensions.slice(skip, skip + take);
const data = { items, total };
return { data };
}
@@ -41,4 +37,4 @@ export class UmbExtensionCollectionRepository extends UmbRepositoryBase implemen
destroy(): void {}
}
export default UmbExtensionCollectionRepository;
export { UmbExtensionCollectionRepository as api };