@anglr/grid
Version:
Angular module displaying grid
70 lines • 3.34 kB
JavaScript
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