align filter model for extension insight workspace
This commit is contained in:
@@ -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>>>;
|
||||
}
|
||||
|
||||
@@ -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>>>;
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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 };
|
||||
|
||||
Reference in New Issue
Block a user