UNPKG

@anglr/grid

Version:
70 lines 3.34 kB
import { Component, ChangeDetectionStrategy, Inject, Optional, signal } from '@angular/core'; import { DataLoaderAbstractComponent } from '../dataLoaderAbstract.component'; import { DATA_LOADER_OPTIONS } from '../../../misc/tokens'; import { DataLoaderState } from '../../../misc/enums'; import * as i0 from "@angular/core"; /** * Default options for async data loader */ const defaultOptions = { autoLoadData: true, accumulateData: false, debounceDataCallback: 30, dataCallback: () => new Promise(() => { return { data: [], totalCount: 0 }; }), }; /** * Data loader that allows asynchronous data loading */ export class AsyncDataLoaderComponent extends DataLoaderAbstractComponent { //######################### public properties ######################### /** * @inheritdoc */ get result() { return this.ɵresult.asReadonly(); } //######################### constructor ######################### constructor(options) { super(defaultOptions, options); //######################### private fields ######################### /** * Current result of data loader */ this.ɵresult = signal({ data: [], totalCount: 0 }); } //######################### protected methodes - implements DataLoaderAbstractComponent ######################### /** * @inheritdoc */ async loadGridData(force) { if (!this.checkChanges() && !force) { return; } this.ɵstate.set((this.ɵresult && this.ɵresult().data && this.ɵresult().data.length) ? DataLoaderState.DataLoading : DataLoaderState.NoDataLoading); const result = await this.ɵoptions.dataCallback(this.paging?.page() ?? 1, this.paging?.itemsPerPage() ?? 0, this.ordering?.ordering()); this.ɵstate.set((result && result.data && result.data.length) ? DataLoaderState.Loaded : DataLoaderState.NoData); this.ɵresult.set({ data: this.ɵoptions.accumulateData ? [...this.ɵresult().data, ...result.data] : result.data, totalCount: result.totalCount, }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0", ngImport: i0, type: AsyncDataLoaderComponent, deps: [{ token: DATA_LOADER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.0", type: AsyncDataLoaderComponent, isStandalone: true, selector: "ng-async-data-loader", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0", ngImport: i0, type: AsyncDataLoaderComponent, decorators: [{ type: Component, args: [{ selector: 'ng-async-data-loader', template: '', changeDetection: ChangeDetectionStrategy.OnPush }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [DATA_LOADER_OPTIONS] }, { type: Optional }] }] }); //# sourceMappingURL=asyncDataLoader.component.js.map