import { computed, Directive, effect, input, ResourceRef, signal } from '@angular/core'; import { OrderBy } from '../components/table/ordered-header-col'; export interface DatalistResponse { items: TDataItem[]; count: number; } @Directive() export abstract class ListBase> { protected readonly currentPage = signal(1); protected readonly pageSize = signal(30); protected readonly totalItems = signal(0); protected readonly orderedBy = signal(null); protected readonly filter = signal(null); protected readonly skeletonItems = computed(() => Array.from({ length: 10 })); protected readonly defaultList: DatalistResponse = { items: [], count: 0 }; protected get filterParams() { return { filter: this.filter() || ({} as TFilterPayload), page: this.currentPage() ?? 1, pageSize: this.pageSize() ?? 10, sortBy: this.orderedBy()?.field, order: this.orderedBy()?.direction, }; } protected abstract readonly datalist: ResourceRef>; readonly reload = input(false); constructor() { effect(() => { if (this.reload()) { this.datalist.reload(); } }); } reloadList() { this.datalist.reload(); } }