imng-kendo-grid-odata
Version:
This library was generated with [Nx](https://nx.dev).
186 lines (176 loc) • 9.73 kB
TypeScript
import { Observable, BehaviorSubject } from 'rxjs';
import * as i2 from '@progress/kendo-angular-grid';
import { PagerSettings, GridComponent } from '@progress/kendo-angular-grid';
import * as i0 from '@angular/core';
import { OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef, EventEmitter } from '@angular/core';
import { ODataState, ODataResult, ODataService, Expander, Computation } from 'imng-kendo-odata';
import * as i3 from 'imng-kendo-grid';
import { KendoGridBaseComponent, GridStateChangeEvent } from 'imng-kendo-grid';
import { Router } from '@angular/router';
import { Subscribable, Subscriptions } from 'imng-ngrx-utils';
import { CompositeFilterDescriptor, FilterDescriptor } from '@progress/kendo-data-query';
import { ICompositeFilter, IFilter } from 'imng-odata-client';
import * as i1 from '@angular/common';
import * as _progress_kendo_svg_icons from '@progress/kendo-svg-icons';
interface IKendoODataGridFacade<Entity> {
loading$: Observable<boolean>;
gridODataState$: Observable<ODataState | undefined>;
gridData$: Observable<ODataResult<Entity> | undefined>;
gridPagerSettings$: Observable<false | PagerSettings>;
loadEntities(state: ODataState): void;
reloadEntities(state?: ODataState): void;
}
declare abstract class KendoODataBasedComponent<ENTITY extends object, FACADE extends IKendoODataGridFacade<ENTITY>> extends KendoGridBaseComponent<ENTITY> implements OnInit, OnDestroy, Subscribable {
readonly facade: FACADE;
readonly state: ODataState | Observable<ODataState>;
readonly router: Router | null;
readonly gridRefresh$: Observable<unknown> | null;
useLoadAllDataExport: boolean;
odataService: ODataService;
odataEndpoint?: string;
/**
* This sets the amount of the maximum amount of sortable columns for this component. Default = 5.
*/
maxSortedColumnCount: number;
/**
* This will allow you to provide a visual indicator that some of the columns have been hidden.
*/
hasHiddenColumns$: Observable<boolean>;
loadDataProgression$: BehaviorSubject<number>;
gridStateQueryKey: string;
gridDataState: ODataState;
gridDataResult$: Observable<ODataResult<ENTITY>>;
loading$: Observable<boolean>;
gridPagerSettings$: Observable<false | PagerSettings>;
/**
* A properties enum to make kendo grid columns definitions type safe
* {@example <kendo-grid-column [field]="props.FIELD_NAME">}
*/
abstract readonly props: any;
protected expanders?: Expander[];
protected compute?: (string | Computation)[];
protected transformations?: string;
/**
* The default filter descriptor is set by developer in the constructor initialization.
* This is used to reset the filter when the "Clear Filter" button is clicked.
*
* @public
* @type {CompositeFilterDescriptor | ICompositeFilter | undefined}
*/
defaultFilter: CompositeFilterDescriptor | ICompositeFilter | undefined;
constructor(facade: FACADE, state: ODataState | Observable<ODataState>, router?: Router | null, //NOSONAR
gridRefresh$?: Observable<unknown> | null);
ngOnInit(): void;
deserializeODataState(stateQueryParam: string): ODataState;
/**
* This method ensures the proper handling of date filters in an OData query
* @param filter
*/
normalizeFilters(filter: FilterDescriptor | CompositeFilterDescriptor | IFilter | ICompositeFilter): void;
serializeODataState(odataState: ODataState): string;
/**
* Will reset filters to initialGrid state passed into the constructor
*/
resetFilters(): void;
dataStateChange(state: GridStateChangeEvent | ODataState): void;
/**
* Gets an Observable of all data for Excel export.
*
* Returns all data from the OData endpoint if the endpoint is available and
* `useLoadAllDataExport` is enabled, otherwise returns the current grid data result.
*
* @returns {Observable<ODataResult<ENTITY>>} An Observable containing the OData result with entity data
*/
excelData: () => Observable<ODataResult<ENTITY>>;
/**
* Loads all data from the OData service by fetching data in chunks of 100 items.
*
* This method retrieves the current grid data and OData state, then creates multiple
* OData queries to fetch all available data in batches. Each batch is limited to 100 items
* to manage memory and performance. The results from all batches are accumulated and returned
* as a single ODataResult.
*
* @returns {Observable<ODataResult<ENTITY>>} An observable that emits the complete accumulated result
* containing the total count and combined data from all fetched batches. After emission,
* sets the useLoadAllDataExport flag to false.
*
* @remarks
* - Uses `concatMap` to ensure requests are processed sequentially
* - Uses `scan` to accumulate results from each batch
* - Count is disabled on subsequent requests (count: false) to optimize performance
* - The useLoadAllDataExport flag is reset to false upon completion
*/
loadAllData(): Observable<ODataResult<ENTITY>>;
loadEntities(odataState: ODataState): void;
validateSortParameters(state: ODataState): ODataState;
updateRouterState(state: ODataState): void;
reloadEntities(): void;
static ɵfac: i0.ɵɵFactoryDeclaration<KendoODataBasedComponent<any, any>, never>;
static ɵcmp: i0.ɵɵComponentDeclaration<KendoODataBasedComponent<any, any>, "ng-component", never, {}, {}, never, never, true, never>;
}
interface KendoODataGridState<Entity> {
gridData: ODataResult<Entity>;
loading: boolean;
gridODataState: ODataState;
/** Last known error (if any) */
error: unknown | undefined;
gridPagerSettings: PagerSettings | false;
}
declare const getODataPagerSettings: <T>(m: {
gridData: ODataResult<T>;
gridODataState?: ODataState;
}) => false | PagerSettings;
declare const mapPagerSettings: <T>() => (source: Observable<{
gridData: ODataResult<T>;
gridODataState?: ODataState;
}>) => Observable<false | PagerSettings>;
declare function createKendoODataGridInitialState<TEntity>(): KendoODataGridState<TEntity>;
declare class IMNG_KENDO_GRID_ODATA implements OnInit, AfterViewInit, OnDestroy, Subscribable {
readonly gridComponent: GridComponent;
readonly changeDetectorRef: ChangeDetectorRef;
readonly allSubscriptions: Subscriptions;
private facade;
odataComponent: KendoODataBasedComponent<object, IKendoODataGridFacade<object>>;
ngOnInit(): void;
ngAfterViewInit(): void;
ngOnDestroy(): void;
static ɵfac: i0.ɵɵFactoryDeclaration<IMNG_KENDO_GRID_ODATA, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<IMNG_KENDO_GRID_ODATA, "[imngODataGrid]", never, { "odataComponent": { "alias": "imngODataGrid"; "required": false; }; }, {}, never, never, true, never>;
}
declare class IMNG_KENDO_GRID_ODATA_HEADER implements OnInit {
parentGrid: GridComponent;
readonly exportIcon: _progress_kendo_svg_icons.SVGIcon;
readonly filePdfIcon: _progress_kendo_svg_icons.SVGIcon;
readonly plusIcon: _progress_kendo_svg_icons.SVGIcon;
readonly fileExcelIcon: _progress_kendo_svg_icons.SVGIcon;
readonly filterClearIcon: _progress_kendo_svg_icons.SVGIcon;
readonly arrowRotateCcwIcon: _progress_kendo_svg_icons.SVGIcon;
imngODataGrid: KendoODataBasedComponent<object, IKendoODataGridFacade<object>>;
loadDataProgression$: BehaviorSubject<number>;
exportOptions: {
name: string;
command: string;
click: () => void;
svgIcon?: unknown;
}[];
entityName: string;
hideColumnChooser: boolean;
hideResetFilters: boolean;
hideReloadData: boolean;
hideExports: boolean;
hasHiddenColumns$: Observable<boolean> | undefined;
addItemClicked: EventEmitter<any>;
resetFiltersClicked: EventEmitter<any>;
reloadEntitiesClicked: EventEmitter<any>;
ngOnInit(): void;
configureGridForLoadAllData(exportCallback: (gridComponent: GridComponent) => void): void;
static ɵfac: i0.ɵɵFactoryDeclaration<IMNG_KENDO_GRID_ODATA_HEADER, never>;
static ɵcmp: i0.ɵɵComponentDeclaration<IMNG_KENDO_GRID_ODATA_HEADER, "imng-kendo-grid-odata-header", never, { "imngODataGrid": { "alias": "imngODataGrid"; "required": true; }; "entityName": { "alias": "entityName"; "required": false; }; "hideColumnChooser": { "alias": "hideColumnChooser"; "required": false; }; "hideResetFilters": { "alias": "hideResetFilters"; "required": false; }; "hideReloadData": { "alias": "hideReloadData"; "required": false; }; "hideExports": { "alias": "hideExports"; "required": false; }; "hasHiddenColumns$": { "alias": "hasHiddenColumns$"; "required": false; }; }, { "addItemClicked": "addItemClicked"; "resetFiltersClicked": "resetFiltersClicked"; "reloadEntitiesClicked": "reloadEntitiesClicked"; }, never, never, true, never>;
}
declare class ImngKendoGridODataModule {
static ɵfac: i0.ɵɵFactoryDeclaration<ImngKendoGridODataModule, never>;
static ɵmod: i0.ɵɵNgModuleDeclaration<ImngKendoGridODataModule, never, [typeof i1.CommonModule, typeof i2.PDFModule, typeof i2.ExcelModule, typeof i3.ImngKendoGridModule, typeof IMNG_KENDO_GRID_ODATA, typeof IMNG_KENDO_GRID_ODATA_HEADER], [typeof IMNG_KENDO_GRID_ODATA, typeof IMNG_KENDO_GRID_ODATA_HEADER]>;
static ɵinj: i0.ɵɵInjectorDeclaration<ImngKendoGridODataModule>;
}
export { IMNG_KENDO_GRID_ODATA, IMNG_KENDO_GRID_ODATA_HEADER, ImngKendoGridODataModule, KendoODataBasedComponent, createKendoODataGridInitialState, getODataPagerSettings, mapPagerSettings };
export type { IKendoODataGridFacade, KendoODataGridState };